基于能量的模型和波尔兹曼

由于深度置信网络(Deep Belief Networks,DBN)是基于限制性玻尔兹曼机(Restricted Boltzmann Machines,RBM)的深层网络结构, 所以本文重点讨论一下玻尔兹曼机(BM),以及它的学习算法——对比散度(Contrastive Divergence,CD)算法。在介绍BM前,我们首先介绍一下 基于能量的模型(Energy Based Model,EBM),因为BM是一种特殊的EBM。

1. 基于能量的模型(EBM)

基于能量的模型是一种具有普适意义的模型,可以说它是一种模型框架,在它的框架下囊括传统的判别模型和生成模型,图变换网络(Graph-transformer Networks),条件随机场,最大化边界马尔科夫网络以及一些流形学习的方法等。EBM通过对变量的每个配置施加一个有范围限制的能量来捕获变量之间的依赖 关系。EBM有两个主要的任务,一个是推断(Inference),它主要是在给定观察变量的情况,找到使能量值最小的那些隐变量的配置;另一个是学习(Learning), 它主要是寻找一个恰当的能量函数,使得观察变量的能量比隐变量的能量低。

基于能量的概率模型通过一个能量函数来定义概率分布,

p(x)=eE(x)Z.  … ①
其中Z为规整因子,
Z=xeE(x).  … ②
基于能量的模型可以利用使用梯度下降或随机梯度下降的方法来学习,具体而言,就是以训练集的负对数作为损失函数,
l(θ,D)=L(θ,D)=1Nx(i)Dlogp(x(i)).  … ③
其中 θ 为模型的参数,将损失函数对 θ 求偏导,
Δ=l(θ,D)θ=1Nlogp(x(i))θ.  … ④
即得到损失函数下降最快的方向。

包含隐单元的EBMs

在很多情况下,我们无法观察到样本的所有属性,或者我们需要引进一些没有观察到的变量,以增加模型的表达能力,这样得到的就是包含隐含变量的EBM,

P(x)=hP(x,h)=heE(x,h)Z.  … ⑤
其中 h 表示隐含变量。在这种情况下,为了与不包含隐含变量的模型进行统一,我们引入如下的自由能量函数,
F(x)=logheE(x,h).  … ⑥
这样 P(x) 就可以写成,
P(x)=eF(x)Z,whereZ=xeF(x).  … ⑦
此时,损失函数还是类似的定义,只是在进行梯度下降求解时稍微有些不同,
Δ=logp(x)θ=(F(x)logZ)θ=F(x)θx^p(x^)F(x^)θ . … ⑧
该梯度表达式中包含两项,他们都影响着模型所定义的分布密度:第一项增加训练数据的概率(通过减小对应的自由能量),而第二项则减小模型 生成的样本的概率。

通常,我们很难精确计算这个梯度,因为式中第一项涉及到可见单元与隐含单元的联合分布,由于归一化因子 Z(θ) 的存在,该分布很难获取[3]。 我们只能通过一些采样方法(如Gibbs采样)获取其近似值,其具体方法将在后文中详述。

2. 限制性玻尔兹曼机

玻尔兹曼机(Boltzmann Machine,BM)是一种特殊形式的对数线性的马尔科夫随机场(Markov Random Field,MRF),即能量函数是自由变量的线性函数。 通过引入隐含单元,我们可以提升模型的表达能力,表示非常复杂的概率分布。

限制性玻尔兹曼机(RBM)进一步加一些约束,在RBM中不存在可见单元与可见单元的链接,也不存在隐含单元与隐含单元的链接,如下图所示

RBM的能量函数 E(v,h) 定义为,
E(v,h)=bvchhWv .
其中’表示转置, b,c,W 为模型的参数, b,c 分别为可见层和隐含层的偏置, W 为可见层与隐含层的链接权重。此时,对应的自由能量为,
F(v)=bviloghiehi(ci+Wiv).  … ⑨
另外,由于RBM的特殊结构,可见层/隐含层内个单元之间是相互独立的,所以我们有,
p(h|v)=ip(hi|v) ,
p(v|h)=jp(vj|h).  … ⑩

使用二值单元的RBM

如果RBM中的每个单元都是二值的,即有 vj,hi{0,1} ,我们可以得到,

p(hi=1|v)=sigmoid(ci+Wiv) ,
p(vj=1|h)=sigmoid(bj+Wjh).  … ⑪
而对应的自由能量函数为,
F(v)=bvilog(1+eci+Wiv).  … ⑫
使用梯度下降法求解模型参数时,各参数的梯度值如下[2],
logp(v)Wij=Ev[p(hi|v)vj]v(i)jsigmoid(Wiv(i)+ci),
logp(v)ci=Ev[p(hi|v)vj]sigmoid(Wiv(i)),
logp(v)bj=Ev[p(hi|v)vj]v(i)j.  … ⑬

3. RBM的学习

前面提到了,RBM是很难学习的,即模型的参数很难确定,下面我们就具体讨论一下基于采样的近似学习方法。学习RBM的任务是求出模型的参数  θ={c,b,W} 的值。

3.1 Gibbs采样

Gibbs采样是一种基于马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,MCMC)策略的采样方法。对于一个 K 为随机向量 X=(X1,X2,,XK) , 假设我们无法求得关于 X 的联合分布 P(X) ,但我们知道给定 X 的其他分量时,其第 k 个分量 Xk 的条件分布,即 P(Xk|Xk) ,其中 Xk=(X1,X2,,Xk1,Xk+1,,XK) ,那么,我们可以从 X 的一个任意状态(比如[ x1(0),x2(0),,xK(0) ])开始,利用上述条件 分布,迭代的对其分量依次采样,随着采样次数的增加,随机变量[ x1(n),x2(n),,xK(n) ]的概率分布将以 n 的几何级数的速度收敛于 X 的联合 概率分布 P(X) 。也就是说,我们可以在未知联合概率分布的条件下对其进行采样。

基于RBM的对称结构,以及其中神经元状态的条件独立性,我们可以使用Gibbs采样方法得到服从RBM定义的分布的随机样本。在RBM中进行 k 步Gibbs采样的具体 算法为:用一个训练样本(或可见层的任何随机化状态)初始化可见层的状态 v0 ,交替进行如下采样:

h0P(h|v0),v1P(v|h0),
h1P(h|v1),v2P(v|h1),
,vk+1P(v|hk) .
在经过步数 k 足够大的情况下,我们可以得到服从RBM所定义的分布的样本。此外,使用Gibbs采样我们也可以得到式⑧中第一项的近似。

3.2 对比散度算法

尽管利用Gibbs采样我们可以得到对数似然函数关于未知参数梯度的近似,但通常情况下需要使用较大的采样步数,这使得RBM的训练效率仍然不高,尤其是当观测数据 的特征维数较高时。2002年,Hinton[4]提出了RBM的一个快速学习算法,即对比散度(Contrastive Divergence,CD)。与Gibbs采样不同,Hinton指出当使用训练数据初 始化 v0 时,我们仅需要使用 k (通常k=1)步Gibbs采样变可以得到足够好的近似。在CD算法一开始,可见单元的状态被设置成一个训练样本,并利用式⑪第一个式子 来计算所有隐层单元的二值状态,在所有隐层单元的状态确定了之后,根据式⑪第二个式子来确定第 i 个可见单元 vi 取值为1的概率,进而产生可见层的一个重构 (reconstruction)。然后将重构的可见层作为真实的模型代入式⑬各式中第一项,这样就可以进行梯度下降算法了。

在RBM中,可见单元一般等于训练数据的特征维数,而隐层单元数需要事先给定,这里设可见单元数和隐单元数分别为 n m ,令 W 表示可见层与隐层间的链接权重 矩阵(m×n阶), a (n维列向量)和 b (m维列向量)分别表示可见层与隐层的偏置向量。RBM的基于CD的快速学习算法主要步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//输入:一个训练样本x0; 隐层单元个数m; 学习率alpha; 最大训练周期T
//输出:链接权重矩阵W, 可见层的偏置向量a, 隐层的偏置向量b
//训练阶段
初始化:令可见层单元的初始状态v1 = x0; W, a, b为随机的较小数值
For t=1,2,...,T
  For j=1,2,...,m //对所有隐单元
      计算P(h1j=1|v1), 即P(h1j=1|v1) = sigmoid(bj+sum_i(v1i*Wij));
      从条件分布P(h1j|v1)中抽取h1j ∈ {0,1}
  EndFor
  
  For i=1,2,...,n //对所有可见单元
      计算P(v2i=1|h1), 即P(v2i=1|h1) = sigmoid(ai+sum_j(Wij*h1j));
      从条件分布P(v2i|h1)中抽取v2i ∈ {0,1}
  EndFor
  
  For j=1,2,...,m //对所有隐单元
      计算P(h2j=1|v2), 即P(h2j=1|v2) = sigmoid(bj+sum_i(v2i*Wij));
  EndFor
  
  //更新RBM的参数
  W = W + alpha *(P(h1=1|v1)v1' - P(h2=1|v2)v2');
  a = a + alpha *(v1-v2);
  b = b + alpha *(P(h1=1|v1) - P(h2=1|v2));
EndFor
上述基于CD的学习算法是针对RBM的可见单元和隐层单元均为二值变量的情形,我们可以很容易的推广到这些单元为高斯变量的情形。

RBM的完整实现参见https://github.com/ibillxia/DeepLearnToolbox/tree/master/DBN的Matlab代码。

References

[1] Learn Deep Architectures for AI, Chapter 5.
[2] Deep Learning Tutorial, Release 0.1, Chapter 9.
[3] 受限波尔兹曼机简介. 张春霞. 
[4] Training Products of experts by minimizing contrastive divergence. GE Hinton.

【转载自http://ibillxia.github.io/blog/2013/04/12/Energy-Based-Models-and-Boltzmann-Machines/

扩散模型能量模型是机器学习中两种重要的生成模型,它们在原理应用上各有特点,但也在某些方面存在交集。以下将分别介绍它们的原理及其在人工智能机器学习中的应用。 ### 扩散模型的原理与应用 扩散模型是一种基于随机过程的数学模型,用于描述信息、热量、物质等在空间中传播扩散的过程。近年来,扩散模型在生成任务中表现出色,特别是在图像生成、图像恢复文本生成等领域[^2]。其基本原理是通过一个扩散过程(forward process)将数据逐渐加入噪声,直到数据变得完全随机。然后,在反向过程(reverse process)中,模型尝试从噪声中恢复原始数据,从而实现生成新样本的能力[^4]。 扩散模型的训练通常涉及估计数据在扩散过程中各个阶段的噪声,并通过神经网络来建模这些噪声。这种方法使得扩散模型能够生成高质量的样本,尤其是在图像生成任务中,其输出结果在视觉上具有很高的真实感。 ### 能量模型的原理与应用 能量模型是一种基于能量函数的生成模型,它通过定义样本的能量函数来建模概率分布。能量函数的值越低,表示该样本的概率越高。在训练过程中,能量模型的目标是最小化真实数据的能量,同时最大化生成数据的能量,从而使得模型能够区分真实数据生成数据。受限玻尔兹曼机(RBM)是一种常见的能量模型实现方式,它通过可见层隐藏层的组合来捕捉数据中的隐藏结构[^3]。 能量模型在深度学习中被广泛应用于特征学习、降维生成任务。例如,受限玻尔兹曼机可以用于预训练深度神经网络的权重,从而提高模型的泛化能力。此外,能量模型还可以与扩散模型结合使用,以进一步提升生成任务的性能[^3]。 ### 扩散模型能量模型的联系 尽管扩散模型能量模型在原理上有所不同,但它们在某些方面可以相互补充。例如,扩散模型可以通过能量模型的思想来优化其生成过程,从而提高生成样本的质量。此外,两者都可以用于生成任务,并且在深度学习中都具有重要的地位[^3]。 总的来说,扩散模型能量模型在人工智能机器学习中都有广泛的应用。扩散模型因其生成高质量样本的能力而受到关注,而能量模型则因其能够建模复杂的概率分布而被广泛研究。 ```python # 示例代码:一个简单的扩散模型的反向过程 import torch import torch.nn as nn class SimpleDiffusionModel(nn.Module): def __init__(self, input_dim): super(SimpleDiffusionModel, self).__init__() self.model = nn.Sequential( nn.Linear(input_dim, 128), nn.ReLU(), nn.Linear(128, input_dim) ) def forward(self, x, t): # 假设 t 是时间步长,用于控制噪声水平 return self.model(x) # 初始化模型 model = SimpleDiffusionModel(input_dim=784) # 假设 x 是输入数据,t 是时间步长 x = torch.randn(64, 784) t = torch.randint(0, 100, (64,)) output = model(x, t) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值