自动编码器
Auto-encoders是一种人工神经网络,用于学习未标记数据的有效编码。它由两个部分组成:编码器和解码器。编码器将输入数据转换为一种更紧凑的表示形式,而解码器则将该表示形式转换回原始数据。这种方法可以用于降维,去噪,特征提取和生成模型。
自编码器的训练过程是无监督的,因为它不需要标记数据。它的目标是最小化重构误差,即输入数据与解码器输出之间的差异。这可以通过反向传播算法和梯度下降等优化方法来实现。
自编码器有多种变体,包括稀疏自编码器,去噪自编码器,变分自编码器等。这些变体旨在强制学习到的表示具有某些有用的属性,例如稀疏性或噪声鲁棒性。
自动编码器作为一种前馈神经网络,由编码器和解码器两个阶段组成。编码器获取输入x,并通过如下非线性映射将其转换为隐藏表示
其中φ是非线性激活函数,然后解码器通过如下方法将隐藏表示映射回原始表示
\[z=φ(W'h+b') \]对包括θ=[W,b,W′,b′]在内的模型参数进行优化,以最小化\(z=f_{θ}(x)\)和x之间的重建误差。N个数据样本集合上平均重建误差的一个常用度量是平方误差,相应的优化问题可以写成
\[min_θ \frac{1}{N} \sum^{N}_{i}(x_i - f_θ(x_i))^2 \]其中\(x_i\)是第i个样本。这清楚地表明,AE可以以无监督的方式进行训练。隐藏表示h可以被视为数据样本x的一种更抽象、更有意义的表示。通常,隐藏大小应该设置为大于AE中的输入大小,这是经过经验验证的。
稀疏自编码器
在自编码器中,稀疏性是指编码器的输出中只有少量的非零元素。这可以通过向损失函数添加一个惩罚项来实现,以鼓励编码器生成更少的非零元素。这个惩罚项通常是L1正则化项,它是编码器输出向量中所有元素的绝对值之和。这个技巧被称为“稀疏自编码器”。 稀疏自编码器的目标是学习到一组稀疏的特征,这些特征可以更好地表示输入数据。这种方法可以用于特征提取和降维。相应的优化函数更新为
\[min_θ \frac{1}{N} \sum^{N}_{i}(x_i - f_θ(x_i))^2+\sum_{j}^{m}KL(p||p_j) \]其中m为隐藏层大小,第二项是隐藏单元上KL发散的总和。第j个隐藏神经元上的KL散度为
\[KL(p||p_j)=plog(\frac{p}{p_j})+(1-p)log(\frac{1-p}{1-p_j}) \]其中p为预定义的平均激活目标,\(p_j\)是整个数据集上第j个隐藏神经元的平均激活。
Addition of Denoising
在自编码器中,去噪是指通过自动编码器去除输入数据中的噪声。这可以通过向损失函数添加一个惩罚项来实现,以鼓励编码器生成更少的非零元素。这个惩罚项通常是L1正则化项,它是编码器输出向量中所有元素的绝对值之和。这个技巧被称为“去噪自编码器”。
去噪自编码器的目标是学习到一组稀疏的特征,这些特征可以更好地表示输入数据。这种方法可以用于特征提取和降维。
Stacking Structure
几个降噪自编码器可以堆叠在一起形成深度网络,通过将第l层输出作为输入提供给第(l+1)层来学习高级表示,训练是贪婪地一层一层完成的。
由于自动编码器可以以无监督的方式进行训练,因此自动编码器,特别是堆叠去噪自动编码器(SDA),可以通过初始化深度神经网络(DNN)的权重来训练模型,从而提供有效的预训练解决方案。在SDA的逐层预训练之后,可以将自动编码器的参数设置为DNN的所有隐藏层的初始化。然后,执行有监督的微调以最小化标记的训练数据上的预测误差。通常,在网络顶部添加一个softmax/回归层,以将AE中最后一层的输出映射到目标。与任意随机初始化相比,基于SDA的预训练协议可以使DNN模型具有更好的收敛能力。