自编码器是神经网络的一种,是一种无监督学习方法,使用了反向传播算法,目标是使输出=输入。 自编码器内部有隐藏层 ,可以产生编码表示输入。1986 年Rumelhart 提出。
自编码器主要作用在于通过复现输出而捕捉可以代表输入的重要因素,利用中间隐层对输入的压缩表达,达到像PCA那样的找到原始信息主成分的效果。
传统自编码器被用于降维或特征学习。 近年来,自编码器与潜变量模型理论的联系将自编码器带到了生成式建模的前沿。
下图是一个自编码网络的例子,对于输入
,让目标值等于输入值
简单而言就是我们不关心输出,而是中间多特征的压缩表达,所以会限制中间层维度小于输入输出,这种编码维度小于输入维度的自编码器称为欠完备自编码器。
设定的损失函数为:
其中
衡量
和x的差异,比如均方误差MSE
在欠完备自编码器我们限制了隐层维度小于输入,而当隐层维度等于或者大于输入的时候,整个网络可能或直接学习到了恒等复制。
这个时候正则编码器就是在这种隐层维度比输入高的情况,使用的损失函数可以鼓励模型学习其他特性(除了将输入复制到输出),而不必限制使用浅层的编码器和解码器以及小的编码维数来限制模型的容量。
这个时候就可以根据要建模的数据分布的复杂性,选择合适的编码维数和编码器、解码器容量,就可以成功训练任意架构的自编码器。
稀疏自编码器简单地在训练时结合编码层的稀疏惩罚
和重构误差:
其中
衡量
和x的差异,比如均方误差MSE
将惩罚项
视为加到前馈网络的正则项,这个前馈网络的主要任务是将输入复制到输出(无监督学习的目标),并尽可能地根据这些稀疏特征执行一些监督学习任务(根据监督学习的目标)。
去噪自编码从改变重构误差入手,先看看公式:
其中
是带有噪声的样本,x是原始无噪样本,
衡量
和x的差异,比如均方误差MSE。
从上面公式我们可以看出,去噪自编码网络的输入是带有噪声的样本,学习目标是原始无噪样本,通过模型的学习可以达到消除输入噪声的效果,具体见我的下一篇帖子。 实现的一个例子:去噪自编码网络-python keras实现
正则化自编码器的另一个策略是使用一个类似稀疏自编码器中的惩罚项
:
而其中:
这迫使模型学习一个在
变化小时目标也没有太大变化的函数。 因为这个惩罚只对训练数据适用,它迫使自编码器学习可以反映训练数据分布信息的特征。
这样正则化的自编码器被称为收缩自编码器。