受限玻尔兹曼机与深度置信网络
1 梯度消失问题与受限玻尔兹曼机
梯度下降法及其派生方法
在使用随机初始化权重的深度网络上效果并不好,其技术原因是:梯度会变得非常小
。具体而言,当使用 反向传播方法
计算导数时,随着网络深度的增加,反向传播的梯度幅度值(从输出层到网络的最初几层)会急剧地减小。结果造成整体损失函数相对于最初几层权重的导数非常小。这样,当使用梯度下降法
时,最初几层的权重变化非常缓慢,以至于不能从样本中进行有效学习。这种问题通常被称为 梯度的消失
。
与梯度消失问题
紧密相关的问题是:当神经网络中最后几层含有足够数量神经元时,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,对所有层都使用随机初始化方法进行训练所得到的网络,其性能将会与浅层网络(仅由深度网络的最后几层组成)性能相似,进而无法体现深度的优势
。
梯度消失
一直困扰着深度神经网络发展,那么如何解决梯度消失问题呢?合理的初始权重是其中一种解决方案(见下面注释框)。多伦多大学的Geoff Hinton 教授
提出的 受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)[1]
,以及在其基础上堆叠而成的深度信念网络(Deeo Believe Network,DBN)
,通过逐层预训练对权重进行初始化,为解决梯度消失问题提供了一种方案。
解决梯度消失(或爆炸)问题的方法有很多种,包括:
(1)建立恒等映射。参考残差网络的思想,设计神经网络的跳跃连接结构,使反向传播的梯度值能直接传递到早期的层。
(2)更换激活函数。选择合适的激活函数来缓解梯度消失问题,如:relu 相比 sigmoid 属于非饱和激活函数,其导数在正数部分是恒等于 1 的,因此在深层网络中使用 relu 激活函数就不会导致梯度消失和爆炸的问题。但 relu 激活函数由于负数部分为 0,会导致神经元死亡,所以出现了很多变种,比如:leakrelu,elu 等。
(3)批量归一化。把每层神经网络神经元的输入值强行拉回到接近均值为 0 方差为 1 的标准正态分布,使激活输入值落在非线性函数对输入比较敏感的区域,从而让梯度变大。批量归一化应作用在激活函数前。
(4)梯度裁剪。检查误差梯度的值是否超过阈值,如果超过阈值,则将梯度设置为阈值,可以一定程度上缓解梯度爆炸问题。
(5)权重初始化。初始权重的大小会对梯度值产生很大影响,所以选择合适的权重初始化方式至关重要,一般推荐 He 初始化和 Xavier 初始化,也可采用预训练方法获得初始权重。本文的受限玻尔兹曼机就是一种权重初始化的解决方法。
(6)权重正则化。检查权重大小,并通过正则化项惩罚产生较大权重值的损失函数。常用 L1 惩罚项或 L2 惩罚项。
(7)长短时记忆网络。与恒等映射相似,但主要针对循环神经网络(循环神经网络按照时序展开,即形成一个等价的深度非循环神经网络)。如:长短期记忆(LSTM)单元和门控神经元结构(GRU)等可建立不同时序网络节点间的跳跃连接,进而减少其梯度消失(或爆炸)问题。
2 什么是受限玻尔兹曼机
受限玻尔兹曼机是一种具有两层网络结构、无向对称连接、无自反馈的随机神经网络模型(可视为一种特殊的马尔科夫随机场
),见 图 1
。 RBM
其实是一种特征提取方法,常用于初始化前馈神经网络,以提高泛化能力,而由多个RBM 结构
堆叠而成的深度信念网络
能提取出更好更抽象的特征,进而更好地支持后续任务。
一个 RBM
包含一个隐藏层(由若干随机隐单元构成,一般是伯努利分布)和一个可见层(由若干随机可见单元构成,一般是伯努利分布或高斯分布)。RBM
可表示成一个二分图模型(图 1)
,所有可见单元和隐单元之间存在全连接,而隐单元两两之间、可见单元两两之间不存在连接,也就是层间全连接,层内无连接
( 普通玻尔兹曼机模型为层间、层内全连接,这也是“受限”二字的由来)。每一个可见层单元和隐藏层单元都有两种状态:激活状态时值为 ,未被激活状态值为 。这里的 和 状态的意义代表了模型会使用哪些单元(处于激活状态的单元被使用,未处于激活状态的单元未被使用)。所有单元的激活概率由概率分布函数计算。
图 1 受限玻尔兹曼机的概率图模型
一个RBM
中, 表示所有可见单元, 表示所有隐单元。要想确定该模型,只需得到模型三个参数,分别是权重矩阵 ,可见层单元偏置 , 隐藏层单元偏置 。 假设一个RBM
有 个可见单元和 个隐单元,用 表示第 个可见单元, 表示第 个隐单元,则其参数可形式化为:
: 表示第 个可见单元和第 个隐单元之间的权值。
: 表示第 个可视单元的偏置阈值。
: 表示第 个隐单元的偏置阈值。
2.1 能量公式
为简单起见,假设可见层单元和隐藏层单元均服从伯努利分布
,则根据玻尔兹曼机原理,对于给定的状态值 ,该受限玻尔兹曼机的能量为:
其中,令 为 RBM
模型的所有参数(均为实数),上述能量公式表明:在 每一个可能的可见单元
和 每一个可能的隐藏层单元
之间都存在一个能量值。
2.2 联合概率公式
对该能量公式做 指数化
和 归一化
后,可得到可见层单元集合 和隐藏层单元集合 分别处于某一确定状态时的联合概率分布:
其中, 为归一化因子或 配分函数(partition function)
,为所有可见层单元和隐藏层单元的所有可能状态的能量指数之和。
2.3 边缘化与似然函数
基于联合概率分布 ,通过对隐藏层单元 做边缘化( 即对所有可能的状态求和 ),就可以得到可见层单元 的边缘概率分布 :
该边缘分布为可见层单元 处于某一种状态时的概率,在贝叶斯统计方法中也被称为似然函数。
(受限)玻尔兹曼机
是一种无向概率图模型(马尔科夫随机场),其中可见层单元与隐藏层单元均为二值的离散随机变量。统计物理学中的能量公式,在此处被用于求解该无向图的联合概率分布。
2.4 联合概率的计算方法
注意, RBM 模型具有“层间全连接、层内无连接”的结构特点
,因此根据马尔可夫随机场原理,具有以下重要性质:
- 在给定可见单元状态 时,各隐藏层单元的激活状态 之间条件独立。其中第 个隐单元的激活概率为:
- 相应的,当给定隐单元状态 时,可见单元的激活状态 之间同样条件独立,其中第 个可见单元的激活概率为:
- 激活函数选择
sigmoid 函数
,$$\sigma(x)=\frac{1}{1+e^{-x}}$$ ,其函数曲线如图 2
所示:
图 2 Sigmoid 函数。采用
sigmoid 函数
作为激活概率函数的原因:其定义域为 ,输出处于 之间。无论函数输入值处于哪种范围,sigmoid 函数
都会输出一个符合概率值值域要求的结果,即单元的激活概率值。
根据马尔可夫随机场的基本原理,联合概率分布 可由独立的概率 和 计算获得。
3 模型参数求解
确定一个 RBM
模型需要明确两个部分的参数:
(1)首先要确定可见层和隐藏层单元的个数 和 ,即确定网络结构。
可见层单元个数 即为输入数据的维数,隐藏层单元个数 有可能与可见层单元个数有关( 如:用 卷积受限玻尔兹曼机
处理图像数据 ),但大多数情况下, 需根据应用人为确定。有研究者提出了一种准则,即在参数 确定条件下,选择能够使模型总能量最小的那组隐藏单元数量作为 。
(2)其次要确定模型的三个参数 ,即确定网络参数。
当已经指定 和 时,需要通过样本来求得这三个参数,其 基本思路 是:
- 根据上述联合概率分布,可通过边缘化求得可见层 的概率分布。根据最大似然原理,能够使该概率分布最大的 值为 的最优解。也就是说,通过对似然函数求导并求极值的方式,可以计算获得最优的参数值。
- 对于
RBM
来说,其本质是在给定样本
和网络结构
后,通过调整模型参数来拟合给定样本,使得在该参数下RBM
表示的可见层单元概率分布 尽可能的与训练数据相符。
上面已经提到了,参数求解会用到似然函数对参数的求导。在概率模型中,通常不会对似然直接求导,而是将原始概率转换为对数形式,即 对数似然
。从 可知,能量 和概率 成反比关系,所以通过最大化 ,才能使能量值 最小。最大化似然函数的常用方法是梯度上升,梯度上升法指迭代地对参数按照以下公式进行更新:
通过求 关于 的导数,即 ,然后对原 值进行修改。如此迭代使似然函数 达到最大,从而使能量 最小。
技术难点分析:
设对数似然的形式为 ,其中 表示模型的第 轮输入。对数似然分别对 里的参数求偏微分,可得到如下解析形式:
上面的三个偏微分公式中,第二项都含有 , 而 无法得到封闭形式解。因此,必须想办法获得 的解,求导工作才能实现。而众所周知,当无法取得封闭形式解时,最好的方法是通过蒙特卡洛方法获得一个近似解,即利用随机样本来表示分布 ,并用该随机样本来计算后续任务 。
4 模型训练算法
4.1 Gibbs 采样算法
在上一节末尾谈到对参数求导时,存在不可求项 ,只能采用蒙特卡洛方法来获得 的近似样本集,然后基于该样本集计算后续任务。蒙特卡洛采样方法很多,论文作者提出采用 Gibbs
采样方法。
Gibbs
采样的思想是:虽然不知道整个样本集 所对应的概率分布 ,但根据玻尔兹曼机模型,可以得到每一个样本点的自由能和条件概率 ,可以先求出每一个数据点的条件概率值,得到 的任一状态 。然后,用条件概率公式迭代对每一个数据点求条件概率。最终,迭代 次的时候, 的状态 将收敛于 的联合概率分布 。
对于 RBM
来讲,执行过程如图 3
所示:
图 3 Gibbs 采样过程
求解过程如下:
假设给出一个训练样本 ,根据公式 求 中每个单元的条件概率,再根据公式 求 中每个单元的条件概率,然后依次迭代,直到执行 步( 足够大),此时 的概率将收敛于 的概率。如下所示:
4.2 CD-k 算法
CD 算法
是需要 次(通常 )Gibbs 采样
对可见层单元进行重构得到可见层单元的概率分布。其思想是:假设给模型一个样本 ,通过 求所有隐藏层单元的概率值,然后每一个概率值和随机数进行比较得到每一个隐藏层单元的状态,然后通过公式 求每一个可见层单元的概率值,再由 求每一个隐藏层单元的概率值。最后参数梯度的计算公式变为:
其中,$\mu $ 是学习率, 和 分别表示训练数据的概率分布和重构后的概率分布。
通过以上方法都可以求出参数的梯度,由每一个参数的梯度对原参数值进行修改来使模型的能量减小。
图 4 CD 算法伪代码
5 模型的评估
对于模型的评估,一般程序中并不会去真的计算当模型训练好时的模型能量 ,而是采用近似方法来对模型进行评估。
常用近似方法是 重构误差
,所谓重构误差是指以训练样本作为初始状态,经过 RBM 模型
的分布进行一次 Gibbs 采样
后与原数据的差异值。具体解释如下:
对于给定的样本 ,通过公式 对所有隐藏层单元的条件概率进行采样,再通过公式 对所有可见层单元的条件概率进行采样,最后由样本值和采样出的可见层概率值做差取绝对值,作为该模型的评估。重构误差能够在一定程度上反映 RBM
对训练数据的似然度。
6 单元状态如何确定
对于每一层单元状态值( 或者 )的确定是采用与随机数(在 到 之间)进行比较的方法,如果单元被激活的概率值大于一个随机产生的数,则认为该单元被激活。原因是:给定可见层单元 时,隐藏层第 个单元状态为 的激活概率为 。这时,在区间 上产生一个随机数 落在子区间 的概率也是 ,既然两个事件的概率相等,若随机数 落在子区间 ,则认为第 个单元的状态为 ,否则为 。如下:
(1)对于隐藏层单元的激活状态
(2)同理,对于可见层单元的激活状态
总结:受限玻尔兹曼机网络模型的目的就是最大可能的拟合输入数据,即最大化 。 Hinton
提出的一种快速训练算法,即 Contrastive Divergence( 对比散度 CD-k )算法
。
该算法需要迭代 次,就可以获得模型对输入数据的估计,而通常 取 。CD 算法
在开始是用训练数据去初始化可见层,然后用条件概率分布计算隐藏层;然后,再根据隐藏层状态用条件概率分布计算可见层。这样产生的结果就是对训练数据的一个重构。根据 CD 算法
可得模型对网络权值的梯度:
其中,$\mu $ 是学习率, 是样本数据的期望, 是重构后可见层数据的期望。
7 深度置信网络
本节讨论 RBM
如何堆叠组成一个 深度置信网络(Deep Belief Network, DBN)
,从而作为 DBN 预训练
的基础模型。在进行细节探究之前,需要首先知道,由 Hinton
和 Salakhutdinov
在 文章[2]
提出的这种预训练过程是一种 无监督的逐层预训练 的通用技术,也就是说,不是只有 RBM
可以堆叠成一个深度生成式或判别式网络,其他类型的网络也可以使用相同方法来生成网络,比如 Bengio 等人
在 文献[3]
中提出的 自动编码器(AutoEncoder)
的变种。
图 5
描述了一个逐层训练的例子,将一定数目的 RBM
堆叠成一个 DBN
,然后从底向上逐层预训练。堆叠过程如下:
(1)训练一个高斯-伯努利 RBM
(适用于语音应用的连续特征)或 伯努利-伯努利 RBM
(适用于正态分布或二项分布特征应用,如黑白图像或编码后的文本)后,将隐单元的激活概率作为下一层 伯努利-伯努利 RBM
的输入数据。
(2)第二层 伯努利-伯努利 RBM
的激活概率作为第三层 伯努利-伯努利 RBM
的可见层输入数据。
(3)以后各层以此类推。
关于这种有效的 逐层贪婪学习策略
的理论依据由 文献[2]
给出。已经表明,上述贪婪过程达到了近似的最大似然学习。该学习过程是无监督的,所以不需要标签信息。
当应用到分类任务时,生成式预训练可以和其他算法结合使用,典型的是判别式方法,它通过有效地调整所有权值来改善网络的性能。判别式 精调(fine-tune)
通常是在现有网络的最后一层上再增加一层单元,用来表示想要的输出或者训练数据提供的标签,它与标准的 前馈神经网络(feed-forward neural network)
一样,可使用 反向传播算法(back-propagation algorithm)
来调整或精调网络的权值。DBN
最后一层即标签层的内容,应根据不同的任务和应用来确定。
图 5 DBN 逐层预训练示意图
上述生成式预训练应用在音素和语音识别中,要比随机初始化网络的效果要好
。研究也表明了其他种类预训练策略的有效性。比如,在执行逐层贪婪训练时,可以在每一层的生成损失函数中增加一项判别项。如果不适用生成式预训练,只使用随机梯度下降方法来对随机初始化 DBN
进行判别式训练,研究结果表明,当非常仔细的选取初始权值并且谨慎的选取适合于随机梯度下降的 小批量”(mini-batch)
的大小(例如,随着训练轮数增加大小),也将会获得很好的效果。小批量
用于在收敛速度和噪声梯度之间进行折中。同时,在建立 小批量
时,对数据进行充分的随机化也是至关重要的。另外,很重要的一个发现是:从一个只含有一层的浅层神经网络开始学习一个 DBN
是非常有效的。当折中方法用于训练区分式模型时(使用提前结束训练的策略以防止过拟合的出现),在第一个隐藏层和标签的 softmax 输出层
之间插入第二个隐藏层,然后对整个网络应用反向传播来微调网络的权值。这种判别式预训练在实践中取得了比较好的效果,特别是在有大量的训练数据的情况下效果较好。当训练数据不断增多时,即使不使用上述预训练,一些特别设计的随机初始化方法也能够取得很好的效果。
参考文献
[1] Hinton G. A practical guide to training restricted Boltzmann machines[J]. Momentum, 2010, 9(1): 926.
[2] Hinton G E, Osindero S, Teh Y W. A fast learning algorithm for deep belief nets[J]. Neural computation, 2006, 18(7): 1527-1554.
[3] Bengio Y, Lamblin P, Popovici D, et al. Greedy layer-wise training of deep networks[J]. Advances in neural information processing systems, 2007, 19: 153.