刚学自编码,以下是本人关于题目问题的一点思考。
自编码器是一种非常简单的BP神经网络,是一种无监督学习算法。
使用一个三层(只有一个隐含层)的自编码网络,然后设置隐含节点的数量少于输入层节点,就能够轻松地实现特征降维。如图:
Fig1. 自编码器网络结构(图片来自网络)
refer to: Deep Learning(深度学习)学习笔记整理系列之(四)
如果隐藏节点比可视节点(输入、输出)少的话,由于被迫的降维,自编码器会自动习得训练样本的特征(变化最大,信息量最多的维度)。但是如果隐藏节点数目过多,甚至比可视节点数目还多的时候,自编码器不仅会丧失这种能力,更可能会习得一种“恒等函数”——直接把输入复制过去作为输出。这时候,我们需要对隐藏节点进行稀疏性限制。
Fig2. 稀疏自编码器模型(图片来自网络)
这里说当隐含节点数量太大的时候,需要通过引入正则项(比如上图的L1限制)来使得每次表达的code尽量稀疏。
那么这样和用更少的隐含节点相比,有什么用呢?
其实可以和SVM比较:
1. 原本使用的是比较少的隐含节点数,相当于使用线性核的SVM。这时候模型很简单,但是它的表现能力是比较有限的。
2. 增加节点的数量,相当于使用了多项式核的SVM。这时候的模型表示能力变强了,但是容易过拟合(如用9项式来拟合10个样本点)。
3. 添加限制,让每次得到的表达code尽量系数,相当于给多项式的SVM添加了正则约束项(如还是用9项式来拟合10个样本点,但是我们限制之后只能有两项不是0),这是就不会再过拟合了。
总结就是: 使用了更多的隐含节点之后,模型具有了更强大表达能力;但是同时会导致过拟合的问题,所以需要通过添加约束条件来限制,这时候模型依然具有很强的表达能力(和少隐含节点的模型比),却又避免了过拟合的问题。而且因为实际上不为0(或不接近0)的权值很少,所以网络被迫用少量的节点来学习到网络的整体信息,这些被学习到的特征都非常有代表性。