本文主要讲解有关自编码器、深度信念网络和深度玻尔兹曼机的相关知识。
一、自编码器
1. 自编码器
自编码器(auto-encoder,AE)是一个只有一个隐藏层的神经网络,它先对输入x进行编码,再对编码结果进行解码,我们希望能够得到和输入x非常相似的输出y(最理想情况就是输入和输出完全一样)。则编码所得到的结果就可以看作是该输入数据的特征。对于该目标更新网络参数,从而使其效果达到最优,这就构建了一个自解码器。
如上图所示,从输入x到隐藏层a之间就是编码过程,从隐藏层a到输出y之间就是解码过程。更具体的,$a=f(W_1x+b_1)$,$y=W_2a+b_2$,$W_1$是输入层和隐藏层之间的权重,$b_1$是输入层和隐藏层之间的偏置,$W_2$是隐藏层和输出层之间的权重,$b_2$是隐藏层和输出层之间的偏置,$f()$是激活函数。我们的目标是使得 $y\approx x$。为了评价输出值与真实值(输入值)之间的误差,还需要设置一个损失函数 $E(x,y)$。
2. 稀疏自编码器
从自动编码器获得有用特征的一种方法是限制隐藏层的节点个数比输入层少,这样将使自动编码器捕捉训练数据中最显著的特征,这样的自动编码器叫稀疏自编码器(sparse auto-encoder)。也就是说用少量的特征就可以还原原始输入数据。与普通的自编码器不同的是,稀疏自编码器中的总损失函数为:
$$
J(W,b)=E(x,y)+\gamma\sum_j^{D_H}KL(\rho||\hat{\rho_j})
$$
其中$\gamma$是稀疏控制参数,$D_H$是隐藏层节点的个数,$KL(\rho||\hat{\rho_j})$是KL散度,又称相对熵,其定义如下:
$$
KL(\rho||\hat{\rho_j})=\rho\log\frac{\rho}{\hat{\rho_j}}+(1-\rho)log\frac{1-\rho}{1-\hat{\rho_j}}
$$
式中,$\hat{\rho_j}$表示隐藏层第j个节点的平均活跃度,$\rho$表示目标平均活跃度。
3. 堆栈自编码器
简单来说,堆栈自编码器(stacked auto-encoder,SAE)就是将多个自编码器串联堆叠起来,将前一个自编码器的输出作为下一个自编码器的输入进行训练。这样做的目的是通过加深网络的层数,从而提取到输入数据更加抽象的特征。由于对网络的权重进行随机初始化时容易发生陷入局部最优解(而不是全局最优解)的问题,对此采取的办法是进行预训练(pretraining),它的思想是对网络逐层进行训练,只考虑相邻两层从而得到最优的参数,并把该参数作为权重初始化的值(微调)。
对于分类问题来说,还需要在SAE的基础上另加一个额外的输出层,从而输出是某一类别的可能性大小。此时只有原SAE中的初始参数是通过预训练得到,而新输出层和旧输出层之间的初始参数随机赋值得到。
二、深度信念网络和深度玻尔兹曼机
1. 受限玻尔兹曼机
受限玻尔兹曼机(restricted Boltzmann machines, RBM)的本质是一种自编码器,它由可视层和隐藏层组成,可视层其实就是输入层,只不过名称不同。可视层和隐藏层之间的神经元采用对称的全连接,而层内的神经元之间没有连接。所有的神经元只有1和0两种状态,分别表示激活和未激活。
在RBM中还有一些能量函数和概率函数等,但是我目前还没有搞懂它们的作用,所以就不详细介绍了,想了解更多请参考大话深度信念网络。由于最后推导得出的公式比较难计算,所以又提出了通过Gibbs(吉布斯)采样的方法来近似计算,后来还提出了对比散度(contrastive divergence)算法更高效的方式来近似计算。
2. 深度信念网络
深度信念(置信)网络(deep belief network, DBN)类似于堆栈自编码器,置信就是可能性的意思。它的思想是把多个受限玻尔兹曼机串联堆叠起来形成一个更深的网络,其顶部两层(靠近输出层的层)之间的连接是双向的,而其他所有层之间的连接是单向的,箭头指向最接近数据的层。类似于堆栈自编码器,在对该模型进行训练时,也可以采用预训练的方式来避免陷入局部最优解。
3. 深度玻尔兹曼机
深度玻尔兹曼机(deep Boltzmann machines, DBM)与深度信念网络类似,都是右多个受限玻尔兹曼机串联堆叠而形成的一个深层神经网络,与深度信念网络相区别的是DBM的任意两层之间都是双向连接的。
- 本文作者: 俎志昂
- 本文链接: zuzhiang.cn/2019/09/11/dl-2/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!