本节代码来自tensorflow的开源实现。
实现自编码器和实现一个单隐含层的神经网络差不多,只不过是在数据输入时做了标准化,并加上了一个高斯噪声,同时输出结果不是数字分类结果,而是复原的数据。
对于没有标注的数据,可以使用无监督的自编码器来提取特征,使用自身的高阶特征编码自己。可以使用自编码器对数据进行降维。自编码器的输入节点和输出节点的数量是一致的。
如果限制中间隐含层节点的数量,如让其小于输入/输出节点的数量,就相当于一个降维的过程。如给中间层的权重加一个L1正则,则可根据惩罚系数控制隐含节点的稀疏程度,惩罚系数越大,学到的特征组合越稀疏,实际使用的特征数量越少。
自编码器的隐含层的最主要功能就是学习出数据中的高阶特征。
自编码器作为一种无监督学习的方法,与其他无监督学习的主要不同在于,它不是对数据进行聚类,而是提取其中最有用,最频繁出现的高阶特征,根据这些高阶特征重构数据。
使用方法:
先用自编码器的方法进行无监督的预训练,提取特征并初始化权重,然后使用标注信息进行监督式的训练。当然,直接使用标注信息进行监督式的训练也行。
参数初始化方法:xavier
特点:根据某一层网络的输入,输出节点数量自动调整最合适的分布。Xaiver初始化器做的事情是:让权重被初始化得不大不小,正好合适。
对数据进行标准化处理,标准化:让数据变成0均值,且标准差为1的分布。方法:先减去均值,再除以标准差。