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