深度学习之autoencoder
1)autoencoder
autoencoder是一种无监督的学习算法,他利用反向传播算法,让目标值等于输入值。如图所示:
Autoencoder尝试学习一个
的函数。也就是说autoencoder尝试逼近一个恒等函数,使得输出接近于输入。当然为了使这个函数有意义,需要加入一些限制条件(比如说限制隐藏神经元的数目),就可以发现一些有意义的结构。Autoencoder可以学习到数据的一些压缩表示。例如如果输入数据为100维,隐藏层为50个,那么就需要从这50维的数据中重构出100维的输出,使这个输出接近于100维的输入。因此这个隐藏层的50维的数据就必然会包含着输入数据的一些相关性。所以说autoencoder就是为了学习到输入数据的相关性表示的一种方法。上面提到的对autoencoder可以加入一些“隐藏神经元的数目”的限制,来学习到输入数据的一些有意义的表示。其实也可以引入稀疏性的限制,而这才是autoencoder中最常用到的限制。稀疏性限制是指如果当神经元的输出接近于1的时候我们认为它被激活,而输出接近于0的时候认为它被抑制,那么使得神经元大部分的时间都是被抑制的限制则被称作稀疏性限制。这里我们假设的神经元的激活函数是sigmoid函数。另
表示隐藏神经元的激活度,那么定义为隐藏神经元的平均激活度。另进而引入稀疏性限制。可以另等接近于0的较小值。要实现这个限制,我们需要给目标函数加入一个惩罚因子(其实是一个相对熵)因此,总的代价函数为
因此更新项为
2)反向传播算法回顾:
假设对于一个样本个数为m的样本集
,对于单个样例,其代价函数为。那么对于样本集整体的代价函数为。第一项为均方差项,第二项是Regularization,是为了防止过拟合而产生的。用于控制前后两项的相对重要性。反向传播算法的目的是针对
来求取函数的最小值。首先我们需要将每一个参数初始化为一个很小的接近于0的随机值,然后利用梯度下降法的迭代更新权重。其中
为学习效率,这也是一个很重要的参数。这里面最大的问题就变成了求取偏导数的问题。反向传播算法的细节:
3)从self-learning到深度网络
有了autoencoder的基本概念,我们可以利用autoencoder来构建深度网络,近些年的一些列研究表明构建深度网络对于解决很多的计算机视觉问题具有重要意义,并能比现有的一些常规方法取得更好的效果。
Self-learning
Self-learning是指可以利用autoecoder从未标注的数据中自我的学习特征。具体说来,给定一组未标注的数据
,训练sparse autoencoder,即:利用训练得到的参数
,给定一个新的样本x,计算激活量a,作为提取出的特征。相对比于原始的样本数据x,激活量a可能会对数据有更好的表示。4)深度网络:
我们可以把self-learning扩展到深度网络,即拥有多个隐藏层的神经网络。
对于这样的深度网络,利用反向传播算法很容易收敛到局部最小值,从而无法得到好的分类效果。对此,我们采用逐层贪婪算法来训练深度网络。即先利用原始输入来训练网络的第一层,得到其参数
;然后网络第一层将原始输入转化成为由隐藏单元激活值组成的向量(假设该向量为A),接着把A作为第二层的输入,继续训练得到第二层的参数;最后,对后面的各层同样采用的策略,即将前层的输出作为下一层输入的方式依次训练。对于上述训练方式,在训练每一层参数的时候,会固定其它各层参数保持不变。所以,如果想得到更好的结果,在上述训练过程完成之后,可以通过反向传播算法同时调整所有层的参数以改善结果,这个过程一般被称作“fine-tuning”。下面的组图揭示了这一过程。