序言
1. 内容介绍
本章介绍深度学习算法-受限玻尔兹曼机,主要介绍受限玻尔兹曼机的 原理、常见架构 以及 吉布斯分布与对比散度算法
2. 理论目标
- 受限玻尔兹曼机 原理
- 受限玻尔兹曼机 表示形式
- 吉布斯分布算法
- 对比散度算法
3. 实践目标
- 掌握 受限玻尔兹曼机 原理
- 掌握 受限玻尔兹曼机 表示形式
- 掌握 吉布斯分布
- 掌握 对比散度
4. 内容目录
- 1.受限玻尔兹曼机简介
- 2.受限玻尔兹曼机网络模型
- 3.Gibbs Sampling
- 4.对比散度
第1节 受限玻尔兹曼机简介
受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是深度学习的开山鼻祖 Geoffrey Hinton 提出,其在 2006 年的关于 深度信念网络 (Deep Belief Network, DBN) 以及逐层预训练的训练方法,开启了深度学习的序章。其中,DBN 中在层间的预训练就采用了 RBM 算法模型
RBM 是一种无向图模型,也是一种神经网络模型, 模型一般具有两层:可见层(V层),以及隐藏层(H层)
正在上传…重新上传取消
玻尔兹曼机 (Boltzman Machine, BM) 是允许 V 层或 H 层之间的神经元相连的,RBM 其实是一种简化了的 BM 模型。可以看到,两层神经元之间都是全连接的,但是每一层各自的神经元之间并没有连接,也就是说,RBM 图结构是一种 二分图 (Bipartite Graph), 正是这个特点,命名为受限玻尔兹曼机
- RBM 中的神经元都是二值化的,也就是说只有激活 (1) 和不激活 (0) 两种状态
- 可见层和隐藏层之间的边的权重可以用 WW 来表示,为 |V|\times|H|∣V∣×∣H∣ 大小的实数矩阵, RBM 算法的核心即为对 WW 与偏差值 bias 求导,用于梯度下降的更新
- VV 和 HH 都是二值化的,没有连续的可导函数去计算,传统采用的 Sampling,比如 Gibbs Sampling 方法
- Hinton 提出了 对比散度 (Contrastive Divergence,CD) 方法,比 Gibbs 方法更快,并成为求解 RBM 的标准解法
第2节 受限玻尔兹曼机网络模型
2.1 RBM 模型结构
因为 RBM 隐藏层和可见层是全连接的,为了描述清楚与容易理解,把每一层的神经元展平即可,如下所示
正在上传…重新上传取消
- n_v,n_hnv,nh: 分别表示可见层与隐藏层中包含神经元的数目,下标 v,hv,h 代表 visible 与 hidden
- v = (v_1,v_2,\dots,v_{n_v})^Tv=(v1,v2,…,vnv)T: 可见层的 状态向量,v_ivi 表示可见层中第 ii 个神经元的状态
- h = (h_1,h_2,\dots,h_{n_h})^Th=(h1,h2,…,hnh)T: 隐藏层的 状态向量,h_jhj 表示隐藏层中第 jj 个神经元的状态
- a = (a_1,a_2,\dots,a_{n_v})^T \in \Re^{n_v}a=(a1,a2,…,anv)T∈ℜnv: 可见层的 偏置向量,a_iai 表示隐藏层中第 ii 个神经元的状态
- b = (b_1,b_2,\dots,b_{n_h})^T \in \Re^{n_h}b=(b1,b2,…,bnh)T∈ℜnh: 隐藏层的 偏置向量,b_jbj 表示隐藏层中第 jj 个神经元的状态
- W = (W_{i,j}) \in \Re^{{n_h} \times {n_n}}W=(Wi,j)∈ℜnh×nn: 隐藏层与可见层之间的 权值矩阵, w_{i,j}wi,j 表示隐藏层中第 ii 个神经元与可见层中第 jj 个神经元之间的连接权重
经典的 RBM 模型中的神经元都是 binary 的,也就是说上面图中的神经元取值都是 {0,1}
2.2 RBM 能量函数
RBM 是一个 能量模型(Energy based model, EBM),是从物理学能量模型中演变而来。能量模型需要做的事情就是先定义一个合适的能量函数,然后基于这个能量函数得到变量的概率分布,最后基于概率分布去求解一个目标函数(如最大似然)
RBM 过程如下
- 现有 变量 为 (v,h),(v,h)(v,h),(v,h),包括隐藏层和可见层神经元,参数 包括 \theta = (W,a,b)θ=(W,a,b), 则能量函数定义
\qquad\qquad E_{\theta}(v,h) = - \sum\limits^{n_v}_{i=1}a_iv_i - \sum\limits^{n_h}_{j=1}b_jh_j - \sum\limits^{n_v}_{i=1} \sum\limits^{n_h}_{j=1}h_jw_{j,i}v_iEθ(v,h)=−i=1∑nvaivi−j=1∑nhbjhj−i=1∑nvj=1∑nhhjwj,ivi
- 写成向量/矩阵的形式,则
\qquad\qquad E_{\theta}(v,h) = -a^Tv-b^Th-h^TWvEθ(v,h)=−aTv−bTh−hTWv
- 变量 (v,h),(v,h)(v,h),(v,h) 的联合概率分布为
\qquad\qquad P_{\theta}(v,h) = \dfrac{1}{Z_{\theta}} e^{-E_{\theta}\;(v,h)}Pθ(v,h)=Zθ1e−Eθ(v,h)
其中 Z_\thetaZθ 称为归一化因子,作用是使得概率之和为1,形式为 Z_\theta = \sum\limits^{}_{v,h} = e^{-E_{\theta}\;(v,h)}Zθ=v,h∑=e−Eθ(v,h)
下标 \thetaθ 表示在参数 \theta =(W,a,b)θ=(W,a,b) 下的表达, 当得到联合概率分布后,如果想求(可见层)的概率分布 P(v)P(v),则求边缘分布
\qquad\qquad P_{\theta}(v) = \sum\limits^{}_{h} P_{\theta}(v,h) = \dfrac{1}{Z_{\theta}}\sum\limits^{}_{h}e^{-E_{\theta}\;(v,h)}Pθ(v)=h∑Pθ(v,h)=Zθ1h∑e−Eθ(v,h)
相对应的,如果想求隐层单元的概率分布 P(h)P(h),则求边缘分布
\qquad\qquad P_{\theta}(h) = \sum\limits^{}_{v} P_{\theta}(v,h) = \dfrac{1}{Z_{\theta}}\sum\limits^{}_{v}e^{-E_{\theta}\;(v,h)}Pθ(h)=v∑Pθ(v,h)=Zθ1v∑e−Eθ(v,h)
当然,直接计算 Z_\thetaZθ 是不可能的,因为 Z_\thetaZθ 的求和中存在指数项 2^{n_v+n_h}2nv+nh 种取值。接下来考虑条件概率,即可见层神经元状态给定时,任意隐藏层神经元状态为 11 的概率,即 P(h_k=1|v)P(hk=1∣v)
\qquad\qquad P(h_k=1|v) == sigmoid (b_k + \sum\limits^{n_v}_{j=1}w_{kj}v_j)P(hk=1∣v)==sigmoid(bk+j=1∑nvwkjvj)
类似的也可以求 P(v_k=1|h)P(vk=1∣h)
\qquad\qquad P(v_k=1|h) == sigmoid (a_k + \sum\limits^{n_h}_{j=1}w_{jk}h_j)P(vk=1∣h)==sigmoid(ak+j=1∑nhwjkhj)
Sigmoid 是一种激励函数,因此才把 RBM 当做一种神经网络模型
2.3 RBM 目标函数
假设给定的训练集合是 \mathcal{S}={v^i}S=vi,总数是 n_sns,其中每个样本表示为 v^i=(v^i_1,v^i_2,\dots,v^i_{n_v})vi=(v1i,v2i,…,vnvi),且都是独立同分布的。RBM采用最大似然估计,即最大化
\qquad\qquad \color{red}{\ln L_s = \ln\prod^{n_s}_{i=1}P(v^i) = \sum^{n_s}_{i=1}\ln P(v^i)}lnLs=ln∏i=1nsP(vi)=∑i=1nslnP(vi)
第3节 Gibbs Sampling
3.1 二维马尔科夫链转移
吉布斯采样 是 MCMC (Markov Chain Monte Carlo) 方法的一种。Gibbs 采样可以从一个复杂概率分布 P(x)P(x) 下生成数据,只需要知道每一个分量的相对于其他分量的条件概率 P(X_k | X_{k-1})P(Xk∣Xk−1)
假设在二维空间里存在概率分布 p(x,y)p(x,y),考察 xx 坐标相同的两个点 A(x_1,y_1)A(x1,y1), B(x_1,y_2)B(x1,y2), 则有
\qquad\qquad p(x_1,y_1)p(y_2|x_1) = p(x_1)p(y_1|x_1)p(y_2|x_1)p(x1,y1)p(y2∣x1)=p(x1)p(y1∣x1)p(y2∣x1)
\qquad\qquad p(x_1,y_2)p(y_1|x_1) = p(x_1)p(y_2|x_1)p(y_1|x_1)p(x1,y2)p(y1∣x1)=p(x1)p(y2∣x1)p(y1∣x1)
\qquad\qquad\Rightarrow p(x_1,y_1)p(y_2|x_1) = p(x_1,y_2)p(y_1|x_1)⇒p(x1,y1)p(y2∣x1)=p(x1,y2)p(y1∣x1)
\qquad\qquad\Rightarrow p(A)p(y_2|x_1) = p(B)p(y_1|x_1)⇒p(A)p(y2∣x1)=p(B)p(y1∣x1)
基于以上等式,可以推断出在二维平面空间 \Re^2ℜ2 的 x = x_1x=x1 这条平行于 yy 轴的直线上,如果使用条件分布 p(y|x_1)p(y∣x1) 做为任意两个点之间的转换概率,那么任意两个点之间的转移满足细致平稳条件。同样的,如果在 y=y_1y=y1 这条直线上任意取两个点 A(x_1,y_1), C(x_2,y_1)A(x1,y1),C(x2,y1), 也有如下不等式
\qquad\qquad p(A)p(x_2|y_1) = p(C)p(x_1|y_1)p(A)p(x2∣y1)=p(C)p(x1∣y1)
因此,在此平面上任意两点的 转移概率矩阵
\qquad\qquad Q = \begin{cases}Q(A\to B) = p(y_B|x_1)&if\quad x_A = x_B = x_1\\Q(A\to C) = p(x_C|y_1)&if\quad y_A = y_C = y_1\\Q(A\to D) = 0&else\\\end{cases}Q=⎩⎪⎪⎨⎪⎪⎧Q(A→B)=p(yB∣x1)Q(A→C)=p(xC∣y1)Q(A→D)=0ifxA=xB=x1ifyA=yC=y1else
很容易验证对平面上任意两点 X,YX,Y 满足细致平稳条件 p(X)Q(X\to Y) = p(Y)Q(Y\to X)p(X)Q(X→Y)=p(Y)Q(Y→X), 于是这个二维空间上的马尔科夫链将收敛到平稳分布 p(x,y)p(x,y)
3.2 多维马尔可夫链转移
在 \Re^2ℜ2 平面里马尔科夫链的转移只是轮换着沿着坐标轴 xx 轴和 yy 轴做转移,得到样本 (x_0,y_0),(x_0,y_1),(x_1,y_1),(x_1,y_2),(x_2,y_2), \dots(x0,y0),(x0,y1),(x1,y1),(x1,y2),(x2,y2),… 当马尔科夫链收敛时,最终得到的样本就是 p(x,y)p(x,y) 的样本,而收敛之前的阶段称为 burn-in period
以上过程很容易推导到高维的情形,对于上述等式中,如果 x_1x1 变成多维空间中的向量 \mathbf x_1x1,可以看出推导过程不变,所以细致平稳条件同样是成立的
\qquad\qquad p(\mathbf{x_1},y_1)p(y_2|\mathbf{x_1}) = p(\mathbf{x_1},y_2)p(y_1|\mathbf{x_1})p(x1,y1)p(y2∣x1)=p(x1,y2)p(y1∣x1)
此时转移矩阵 QQ 由条件分布 p(y|\mathbf x_1)p(y∣x1) 定义,$\Re^n $ 维空间中对于概率分布 p(x_1,x_2,\dots,x_n)p(x1,x2,…,xn) 可以如下定义转移矩阵
- 如果当前状态为 (x_1,x_2,\dots,x_n)(x1,x2,…,xn), 马尔科夫链转移的过程中,只能沿着坐标轴做转移,沿着 x_ixi 这根坐标系做转移的时候,转移概率由条件概率 p(x_i|x_1,\dots,x_{i-1},x_{i+1},\dots,x_n)p(xi∣x1,…,xi−1,xi+1,…,xn) 定义
- 无法沿着单根坐标轴进行的跳转,转移概率都设置为0
虽然 Gibbs 采样逻辑简单,但是问题是,每一次采样过程都需要反复迭代很多次以保证马尔科夫链收敛,而这只是一次梯度更新
第4节 对比散度
Gibbs Sampling 方法来训练 RBM 会非常慢, Geoffery Hinton 提出了 对比散度 (Contrasive Divergence, CD) 算法。Gibbs 采样算法希望得到 P(v)P(v) 分布下的样本,而训练样本本质上是依照 P(v)P(v) 分布的,因此可以通过直接从训练样本开始 Gibbs 采集,而不是从随机的状态开始
CD 算法的大致思路依照上述想法,从样本集任意一个样本 v^0v0 开始, 经过 kk 次 Gibbs 采样,则有
\qquad\qquad h^{t-1} \sim P(h|v^{t-1})ht−1∼P(h∣vt−1)
\qquad\qquad v^{t} \sim (v|h^{t-1})vt∼(v∣ht−1)
得到样本 v^kvk, 然后用 v^kvk 去近似对应于三个单样本的梯度
\qquad\qquad \frac {\partial \ln {P(v)}}{\partial w_{ij}} \approx P(h_i = 1 |v^0)v^0_j - P(h_i = 1 | v^k)v^k_j∂wij∂lnP(v)≈P(hi=1∣v0)vj0−P(hi=1∣vk)vjk
\qquad\qquad \frac {\partial \ln {P(v)}}{\partial a_i} \approx= v^0_i - v^k_i∂ai∂lnP(v)≈=vi0−vik
\qquad\qquad \frac {\partial \ln {P(v)}}{\partial b_i} \approx P(h_i = 1 |v^0) - P(h_i = 1 | v^k)∂bi∂lnP(v)≈P(hi=1∣v0)−P(hi=1∣vk)
4.1 CDK 算法
CD-k 算法在一次梯度更新中计算梯度近似值
-
输入值: k, S, W, a, bk,S,W,a,b
-
输出值: \Delta W, \Delta a, \Delta bΔW,Δa,Δb
-
步骤:
- 参数初始化 \Delta W = 0, \Delta a = 0, \Delta b = 0ΔW=0,Δa=0,Δb=0
- 通过对 SS 中的样本循环,生成 \Delta W, \Delta a, \Delta bΔW,Δa,Δb
-
伪代码:
\quad \mathcal FORALL\;FORALL the v \in S \;\; \mathcal DOv∈SDO
\quad{
\qquad v^{(0)} := vv(0):=v
\qquad \mathcal FOR \;\; t = 0,1,\dots,k-1 \;\; DOFORt=0,1,…,k−1DO
\qquad{
\qquad\quad \bullet\; h^{(t)} =∙h(t)= sample.h_given_v (v^{(t)},W,a,bv(t),W,a,b)
\qquad\quad \bullet\; v^{(t+1)} =∙v(t+1)= sample.v_given_h (h^{(t)},W,a,bh(t),W,a,b)
\qquad}
\qquad \mathcal FOR \;\; i = 1,2,\dots,n_h;j = 1,2,\dots,n_v \;\; DOFORi=1,2,…,nh;j=1,2,…,nvDO
\qquad{
\qquad\quad \bullet\; \Delta w_{i,j} = \Delta w_{i,j} + [P(h_i = 1 |v^{(0)})v^{(0)}_j - P(h_i=1|v^{(k)})v^{(k)}_j]∙Δwi,j=Δwi,j+[P(hi=1∣v(0))vj(0)−P(hi=1∣v(k))vj(k)]
\qquad\quad \bullet\; \Delta a_j = \Delta a_j + [v^{(0)}_j - v^{(k)}_j]∙Δaj=Δaj+[vj(0)−vj(k)]
\qquad\quad \bullet\; \Delta b_i = \Delta b_i + [P(h_i = 1|v^{(0)}) - P(h_i=1 | v^{(k)})]∙Δbi=Δbi+[P(hi=1∣v(0))−P(hi=1∣v(k))]
\qquad}
\quad}
4.2 RBM 算法
在 CD 算法的帮助下,就可以总结整个 RBM 算法
-
初始化 (Initialization)
- 给定训练样本集合 S(|S| = n_s)S(∣S∣=ns)
- 给定训练周期 JJ, 学习率 \etaη 以及 CD-k 算法参数 kk
- 指定隐藏层的参数数目 n_hnh (可见层的单元数目 n_vnv 由样本特征维数确定)
- 初始化偏置向量 a,ba,b 与权值矩阵 WW
-
训练 (Training)
- 调用 CD-k (k,S,W,a,b; \Delta W,\Delta a,\Delta bΔW,Δa,Δb), 生成 \Delta W, \Delta a, \Delta bΔW,Δa,Δb
- 参数更新 kk 次
- W = W + \eta(\frac{1}{n_s}\Delta W)W=W+η(ns1ΔW)
- a = a + \eta(\frac{1}{n_s}\Delta a)a=a+η(ns1Δa)
- b = b + \eta(\frac{1}{n_s}\Delta b)b=b+η(ns1Δb)
开始实验