Boltzmann Machine玻尔兹曼机

本文参考Hinton发表于2007年的一篇论文,链接在此
但玻尔兹曼机实际上是1985年就被Hinton和Terry Sejnowski发明了。
本渣英语自认并不是特别烂,但最近发现看长篇的英文文献总是看的时候很明白,但眼睛拿开就特别容易忘记···所以很多重点我翻译过来,变成中文一下爽多了。并不是完全不看英文哈,毕竟地道和专业的文献写作技术还是需要不断打磨的,而且很多时候只看单一语言不容易懂,偶尔你只看中文会很迷惑,看看原英文就一下明白了,因为翻译毕竟不能传神,有时候只看英文也会很迷惑,需要借助翻译工具搭配中文一起看才明白本意。
本文长篇大论预警,但讲的系统详尽,看不进去的自动撤离。。。

(一)简介

  1. 玻尔兹曼机是一种对称连接的网络,其实它就是图论中的完全图,任意单元都相互连接,像神经元一样的单元会对是否开启或关闭做出随机的决策。最开始BM只是用来描述只有二值变量的模型,但现在的很多模型如均值-协方差RBM也含有实值变量。

  2. BM有一个简单的学习算法,是Hinton等人1983年提出的,这个学习算法可以发现训练数据中很有趣的可以表示复杂规律的特征

但这个算法在有很多层特征检测器的网络中很慢,但在RBM受限玻尔兹曼机中很快RBM只有一个隐层,也就是只有一层特征检测器,特征检测器就是隐层中像人脑神经元一样的单元们。

多个隐层的学习可以通过组合RBM高效地实现,即用一个RBM的特征激活程度(feature activations)作为下一个RBM的训练数据。这种组合就像是堆叠,很多描述DBN的文献也常用stack一词.

  1. BM常被用于解决两种不同的计算问题。
  • 一是搜索问题(a search problem),这种问题中,连接的权值们是固定的,它们一起表示了一个代价函数。BM的随机动态性就允许它去采样出一个代价函数取值低的二元状态向量。 实际上这在DBN的训练中就是权重固定对隐层单元采样的操作。
  • 二是学习问题(a learning problem),这时候,我们会给BM一组二元状态向量作为输入,二元状态向量就是一个元素要么取0要么取1的向量,BM要努力去学习以很高的概率生成这些向量,这一句话就说明了BM学习的目的,就是以高概率去重现自己接收到的所有输入数据,学习到的参数就是连接的权重和每个隐层单元的偏置。
    具体怎么实现以高概率生成训练数据呢?还是要建立一个代价函数cost function去量化问题,努力训练找到使代价函数最小化的权重和偏置。学习问题中,需要多次更新权重,每次更新很小,且每次更新都要解决多个搜索问题,就是在DBN或者RBM的学习训练中需要对隐层和显层单元反复采样的,所以学习问题中也需要执行搜索问题。

(二)BM的随机动力学

stochastic dynamics 不清楚译为随机动力学还是随机动态性比较好,可见我还没明白精髓。

  1. 一个单元被激活的概率
  • 当隐层单元i可以更新自己的二元状态时,它要先计算自己的总输入,由自己的偏置加上所有连接到它的神经元的激活程度乘以相应连接的权重得到。最终神经元i更新为1的概率用sigmoid计算,把总输入带进去算出来的概率就是单元i开启(取1)的概率。
    Boltzmann Machine玻尔兹曼机_第1张图片
    Boltzmann Machine玻尔兹曼机_第2张图片
    2. 一个状态向量出现的概率

  • 如果BM的所有单元以任意顺序先后更新自己的激活状态,那么网络最终将会到达一个玻尔兹曼分布(也叫做均衡点,平衡点equilibrium 或者平稳分布 stationary distribution)。

  • 在玻尔兹曼分布下,一个状态向量v的概率完全由他自己的能量相对于所有可能的状态向量的总能量决定。
    在这里插入图片描述

  • 可见没有一个能量函数会使得任何状态变量的概率小于或等于0 ,所有变量的概率都是正的。

  • 分母就是配分函数,它用来保证所有可能的v的概率总和是1,实际上就是个归一化常数。

  • 玻尔兹曼分布就是玻尔兹曼机得名的原因。这个分布是物理学上给出粒子在各量子态的分布概率。它的数学建模就是上图公式那样,只要满足这个公式的任何分布都是玻尔兹曼分布的一个实例instance。详情可见

  • 所以说BM是基于能量的模型,参考了统计力学的一个分布和其建模方式,其实概率的建模最初都是统计物理学家在研究的,所以会在机器学习的文献中常常见到能量,配分函数等物理学上的术语,其实很有趣,这体现了学科的交叉性,这么火热的机器学习模型实际上灵感来源于物理上的一种能量分布。实际上在实际应用中这个能量就是我们的代价函数,能量越小的状态向量被采样的概率就越大

  • 而且!!!由于BM的随机动态性,就可以使我们在寻找低代价的解时跳出比较差的局部最小( poor local optima)。 举个栗子:有时候 z i z_i zi即使是负的,即单元 i i i的总输入为负,他的能量当然就不足以激活啦,但按照sigmoid计算的概率虽然很小,但小概率事件也是有可能发生的,所以单元i可能被激活,使得系统的能量上升(激活的神经元越多能量越大),就可以跳出能量局部最小啦。

  1. 能量怎么计算
    在Hopfield 网络中,一个二元状态向量的能量是这么计算的:
    Boltzmann Machine玻尔兹曼机_第3张图片
    也可以写作矩阵形式:
    E ( v ) = − v T W v − b T v E(\boldsymbol v)=-\boldsymbol v^T\boldsymbol W\boldsymbol v-\boldsymbol b^T\boldsymbol v E(v)=vTWvbTv
  • s i v s^v_i siv是状态向量v中单元i的状态,0或1

  • b i b_i bi是单元i的偏置

  • w i j w_{ij} wij是单元i和单元j连接的权重

  • 可见状态向量的能量是开启/激活的单元们的总偏置加上所有两两相互连接的激活了的单元的权值和。所以,激活的单元越多,能量就越大。(这个负号是为了抵消p(v)计算中的负号)

  • 搜索/采样高概率的状态向量的过程可以用模拟退火来改进,提高效率。它通过把系统温度T从一个大的初始值降低到小的最终值,可能受益于高温下的快速均衡使得最终仍有一个均衡分布,因此使得低代价的状态向量被采样出来的概率更大.(只有在均衡分布下才能使训练向量的概率比较高,所以我们要努力到达均衡分布再去采样)。

  • 在温度降到0时,更新规则就变成确定deterministic的了,玻尔兹曼机网络也就完全变成了Hopfield网络 (一种循环神经网络,递归神经网络(RNN)是指神经元相互发送反馈信号的网络,这个概念就包含了大量的可能性,多种反馈形式,有的反馈有的不反馈···)。

(三)BM的学习

BM可以有潜变量,也可以没有。现在无潜变量的BM通常被称为马尔科夫随机场或者对数线性模型。而现在说BM一般都是指有隐变量的BM。

(1)无隐变量的学习

即所有的变量的状态都是可以被观察到的,也就是状态向量会描述所有单元的取值是0还是1。

给定训练数据集(一组二元状态向量)后,学习的目的就是要学到使得生成这些训练数据的概率最大的那些权重和偏置 。也就是说,

这些权重和偏置定义了一个让训练数据有高概率的玻尔兹曼分布。

先研究权重:
为了求出使v出现概率最大化的权重,则令p(v)对权重求导:
∂ l o g P ( v ) ∂ W i j = ∂ [ − E ( v ) − l o g ( ∑ u e − E ( u ) ) ] ∂ W i j = s i v s j v − 1 ∑ u e − E ( u ) ∂ [ e − E ( u 1 ) + e − E ( u 2 ) + ⋯ + e − E ( u n ) ] ∂ W i j \frac{\partial logP(v)}{\partial W_{ij}}=\frac{\partial [-E(v)-log(\sum_ue^{-E(u)})]}{\partial W_{ij}}=s_i^vs_j^v-\frac{1 }{\sum_ue^{-E(u)}}\frac{\partial [e^{-E(u_1)}+e^{-E(u_2)}+\cdots+e^{-E(u_n)}]}{\partial W_{ij}} WijlogP(v)=Wij[E(v)log(ueE(u))]=sivsjvueE(u)1Wij[eE(u1)+eE(u2)++eE(un)]
= s i v s j v − 1 ∑ u e − E ( u ) [ − e − E ( u 1 ) ∂ E ( u 1 ) ∂ W i j − e − E ( u 2 ) ∂ E ( u 2 ) ∂ W i j − ⋯ − e − E ( u n ) ∂ E ( u n ) ∂ W i j ] =s_i^vs_j^v-\frac{1 }{\sum_ue^{-E(u)}}[-e^{-E(u_1)}\frac{\partial E(u_1)}{\partial W_{ij}}-e^{-E(u_2)}\frac{\partial E(u_2)}{\partial W_{ij}}-\cdots-e^{-E(u_n)}\frac{\partial E(u_n)}{\partial W_{ij}}] =sivsjvueE(u)1[eE(u1)WijE(u1)eE(u2)WijE(u2)eE(un)WijE(un)]
= s i v s j v − e − E ( u 1 ) s i u 1 s j u 1 + e − E ( u 2 ) s i u 2 s j u 2 + ⋯ + e − E ( u n ) s i u n s j u n ∑ u e − E ( u ) =s_i^vs_j^v-\frac{e^{-E(u_1)}s^{u_1}_is_j^{u_1}+e^{-E(u_2)}s^{u_2}_is_j^{u_2}+\cdots+e^{-E(u_n)}s^{u_n}_is_j^{u_n} }{\sum_ue^{-E(u)}} =sivsjvueE(u)eE(u1)siu1sju1+eE(u2)siu2sju2++eE(un)siunsjun

以上公式是我自己推的,可能有错误,敬请指正。原文只写了这么一个式子,不是很明白:
Boltzmann Machine玻尔兹曼机_第4张图片
< . > d a t a <.>_{data} <.>data表示数据分布的期望值。 < . > m o d e l <.>_{model} <.>model表示BM在温度为1时从均衡分布中采样二元状态向量的期望值。

再研究偏置:
完全一样,还是求导,只是没了 s j s_j sj
∂ l o g P ( v ) ∂ b i = ∂ [ − E ( v ) − l o g ( ∑ u e − E ( u ) ) ] ∂ b i = s i v − 1 ∑ u e − E ( u ) ∂ [ e − E ( u 1 ) + e − E ( u 2 ) + ⋯ + e − E ( u n ) ] ∂ b i \frac{\partial logP(v)}{\partial b_i}=\frac{\partial [-E(v)-log(\sum_ue^{-E(u)})]}{\partial b_i}=s_i^v-\frac{1 }{\sum_ue^{-E(u)}}\frac{\partial [e^{-E(u_1)}+e^{-E(u_2)}+\cdots+e^{-E(u_n)}]}{\partial b_i} bilogP(v)=bi[E(v)log(ueE(u))]=sivueE(u)1bi[eE(u1)+eE(u2)++eE(un)]
= s i v − 1 ∑ u e − E ( u ) [ − e − E ( u 1 ) ∂ E ( u 1 ) ∂ b i − e − E ( u 2 ) ∂ E ( u 2 ) ∂ b i − ⋯ − e − E ( u n ) ∂ E ( u n ) ∂ b i ] =s_i^v-\frac{1 }{\sum_ue^{-E(u)}}[-e^{-E(u_1)}\frac{\partial E(u_1)}{\partial b_i}-e^{-E(u_2)}\frac{\partial E(u_2)}{\partial b_i}-\cdots-e^{-E(u_n)}\frac{\partial E(u_n)}{\partial b_i}] =sivueE(u)1[eE(u1)biE(u1)eE(u2)biE(u2)eE(un)biE(un)]
= s i v − e − E ( u 1 ) s i u 1 + e − E ( u 2 ) s i u 2 + ⋯ + e − E ( u n ) s i u n ∑ u e − E ( u ) =s_i^v-\frac{e^{-E(u_1)}s^{u_1}_i+e^{-E(u_2)}s^{u_2}_i+\cdots+e^{-E(u_n)}s^{u_n}_i}{\sum_ue^{-E(u)}} =sivueE(u)eE(u1)siu1+eE(u2)siu2++eE(un)siun

没有隐变量的学习问题是凸的(为啥?),没有局部最优,但是从 < . > m o d e l <.>_{model} <.>model采样可能会跳出全局最小,这是一点缺陷。

(2)有隐变量的学习

即不是所有的变量的状态都是可以被观察到的,也就是状态向量不会描述所有单元的取值,显变量的取值会描述,隐变量则不会。
有潜变量的BM更加强大。

(四)不同种类的BM

  1. 高阶Higher-order BM
    上面的BM的能量函数只描述了两个神经元的相互关系和权重,高阶BM允许描述更多的神经元的相互关系,即允许更复杂的能量函数形式。
    E ( v ) = − ∑ i s i v b i − ∑ s i s j s k W i j k E(v)=-\sum_i s_i^vb_i-\sum s_is_js_kW_{ijk} E(v)=isivbisisjskWijk
    一个神经元的输入:
    z i = b i + ∑ j , k s j s k W i j k z_i=b_i+\sum _{j,k}s_js_kW_{ijk} zi=bi+j,ksjskWijk
    对学习规则的改变只是把 s i s j s_is_j sisj变成了 s i s j s k s_is_js_k sisjsk.
  2. 条件Conditional BM
  3. Mean field 均值场BM
  4. Non-binary 非二元变量BM

(五)学习速度

BM的学习速度是非常慢的,隐层越多的大型网络学到均衡分布的耗时越长。只有RBM很快,所以通常都是逐层贪婪训练多个RBM从而训练深度信念网,一次学习一个隐层

(六)受限玻尔兹曼机RBM

A restricted Boltzmann machine (Smolensky, 1986) consists of a layer of visible units and a layer of hidden units with no visible-visible or hidden-hidden connections.

(七)和其他模型的关系

  1. Markov random fields and Ising models马尔科夫随机场和伊辛模型
  • 玻尔兹曼机是马尔可夫随机场的一种,但大多数马尔可夫随机场具有简单的局部交互权值,这些权值是手工设计的,而不是学习的。

  • 玻尔兹曼机是Ising模型,但Ising模型通常使用随机或手工设计的交互权重。

  1. Graphical models图模型
  • BM就是一种图模型,玻尔兹曼机器学习算法是第一个针对具有隐变量的无向图形模型的学习算法。
  • 当堆叠多个受限玻尔兹曼机来学习深度网络时,得到的图形模型的最上面两层构成一个不受限玻尔兹曼机,而底层构成一个有从高层到低层的有向连接的有向无环图。
  1. Gibbs sampling吉布斯采样
  • 玻尔兹曼机的搜索过程是Gibbs sampling的早期例子,Gibbs sampling是一种被两人独立发明的马尔可夫链蒙特卡罗方法 MCMC方法(Geman & Geman, 1984),(a Markov chain Monte Carlo method)。
  • 也受到了模拟退火的启发。
  1. Conditional random fields条件随机场

条件随机场(Lafferty et. al., 2001)可以看作是高阶条件玻尔兹曼机的简化版本,其中的隐藏单元已被消除(无潜变量)。这使得学习问题是凸的,但是失去了学习新特性的能力。

你可能感兴趣的:(机器学习)