最近在恶补深度学习基础知识,以下为根据公众号“ 阿力阿哩哩”的《寄己训练寄己|自编码器》而总结的内容。可以结合作者在哔哩大学的视频。
4.5 自编码器
自编码器是一种输入等于输出的神经网络模型,可能大家会疑惑为什么要训练一个这样的模型,毕竟输入等于输出在大家看来就是一件多此一举的事情。一个简单的全连接神经网络自编码器模型如图 4.33所示。
4.5.1 自编码器的原理
全连接层神经网络组成的最简单的自编码器只有三层结构,中间的隐藏层才是我们所需要关注的地方,以隐藏层为界限,左边为编码器(encoder),右边为解码器(decoder),所以在训练过程中,输入才能在经过编码后再解码,还原成原来的模样。
对传统机器学习有所了解的读者应该都知道PCA(主成分分析),它是用来对数据进行降维的。不了解PCA的读者也没关系,我们现在学习的自编码器也有这个功能,所以学完之后再看PCA兴许会理解地更加深刻些。
现在我们看回图 4.33,假如我们通过一组数据训练出了我们的自编码器,然后我们拆掉自编码器的解码器(decoder),就可以用剩下的编码器(encoder)来表征我们的数据了。隐藏层的神经元数目远低于输入层,那么就相当于我们用更少的特征(神经元)去表征我们的输入数据,从而达到降维压缩的功能。
接着,我们在文章开头提到过自编码器还有降噪的功能,那它是如何实现这个功能的呢?在此之前笔者先给大家介绍下这期使用的数据集----minist手写体,这是keras自带的数据集,如图 4.34所示。
这个数据集就是手写数字0~9的图像集合,图 4.37第一行就是加噪后的手写体数据集,第二行则是原本的手写体数据集。我们把加噪后的数据集当成输入,原本的数据集当做输出,训练一个自编码器,让它在训练过程中学习数据的规律,从而把噪声去掉。这就是笔者所说的去噪功能。
到这里,笔者就已经把自编码器的原理和功能给大家讲清楚了。接下来,我们更进一步介绍几种有用的自编码器。
4.5.2 常见的自编码器
1. 普通自编码器
就是本节开头讲的最简单的自编码器。
2. 多层自编码器
多个全连接神经网络隐藏层组成自编码器。如图 4.35所示。
3. 卷积自编码器:
由CNN卷积神经网络组成的自编码器。用卷积层替换全连接层的原因也很简单,传统自编码器一般使用的是全连接层,对于一维信号并没有什么影响,但是对于二维图像或视频信号,全连接层会损失空间信息,而通过卷积操作,卷积自编码器能很好的保留二维信号的空间信息。卷积自编码器如图 4.36所示。
4. 正则自编码器
稀疏自编码器:稀疏自编码器就是普通自编码器的隐藏层加一个L1正则项,也就是一个训练惩罚项,这样我们训练出的编码器(encoder)表征的特征更加的稀疏,从而能得到少且有用的特征项。这也是为啥用L1正则项而不用L2正则项的原因。至于L1,L2正则项的原理,笔者已经在4.4小节中提及,在此就不再赘述。
降噪自编码器:降噪自编码器就是输入换成了加噪的数据集,输出用原数据集去训练的自编码器,目的是习得降噪功能。
4.5.3 自编码器小结
在本小节中,笔者给大家介绍了自编码器的基本框架和几种常见类型的自编码器。这些自编码器根据不同的约束条件,会呈现出不同的属性。因为自编码器的原理相对简单,所以笔者相信大家看完本小节之后都能吃透其中原理。