博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Boltzmann machines and energy-based models
阅读量:3926 次
发布时间:2019-05-23

本文共 7417 字,大约阅读时间需要 24 分钟。

Boltzmann machines and energy-based models

EBM

EBMs简单的说,就是用一个标量——energy 来描述某个变量配置的好坏。在统计力学中,一般认为低能量值的状态比高能量值的状态发生的概率高,所以一般也会认为在EBMs中,真实的样本对应着低能量值,也对应着高的概率值。

P ( x ) = e − E ( x ) Z P(x)=\frac{e^{-E(x)}}{Z} P(x)=ZeE(x)
其中 Z = ∫ x e − E ( x ) d x Z=\int_x e^{-E(x)}dx Z=xeE(x)dx。如果我们想描述一个联合概率分布,比如 ( x , y ) (x,y) (x,y),那么同样可以用EBMs来描述: P ( x , y ) = e − E ( x , y ) Z P(x,y)=\frac{e^{-E(x,y)}}{Z} P(x,y)=ZeE(x,y),其中 Z = ∫ x , y e − E ( x , y ) d x d y Z=\int_{x,y}e^{-E(x,y)}dxdy Z=x,yeE(x,y)dxdy。显然,这是一个生成模型,可以学习数据的分布,我们知道,生成模型往往也可以用于定义一个判别模型,通过 P ( y ∣ x ) = P ( x , y ) P ( x ) P(y|x)=\frac{P(x,y)}{P(x)} P(yx)=P(x)P(x,y),那么我们可以将上面的 P ( x , y ) P(x,y) P(x,y)改写, P ( y ∣ x ) = e − E ( x , y ) Z ′ P(y|x)=\frac{e^{-E(x,y)}}{Z'} P(yx)=ZeE(x,y),其中 Z ′ = ∫ x e − E ( x , y ) d x Z'=\int_x e^{-E(x,y)}dx Z=xeE(x,y)dx Z Z Z存在的目的是使得对于变量的所有配置的概率值sum是1(在 P ( y ∣ x ) = e − E ( x , y ) Z ′ P(y|x)=\frac{e^{-E(x,y)}}{Z'} P(yx)=ZeE(x,y)中就是使得所有可能y值对应的概率值之和为1),且所有概率值控制在(0,1]之间。

EBM with hidden units

很多时候,不是所有的变量都是可观测的,但我们仍然要在基于观测变量的数据集上给出观测变量的分布:

P ( x ) = ∫ h P ( x , h ) = ∫ h e − E ( x , h ) Z P(x)=\int_h P(x,h)=\int_h \frac{e^{-E(x,h)}}{Z} P(x)=hP(x,h)=hZeE(x,h)
h h h是离散变量时 P ( x ) = ∑ h e − E ( x , h ) Z P(x)=\sum_h \frac{e^{-E(x,h)}}{Z} P(x)=hZeE(x,h),而这进一步可以化成最初的EBM的形式:
P ( x ) = e − l o g ∑ h E ( x , h ) Z P(x)=\frac{e^{-log\sum_h E(x,h)}}{Z} P(x)=ZeloghE(x,h)
这时分子可以称为Free energy,即 F ( x ) = − l o g ∑ h E ( x , h ) F(x)=-log\sum_h E(x,h) F(x)=loghE(x,h)

How to train EBMs

这里只介绍一下基础的基于梯度下降的方式的训练方式,还有Score Matching以及Noise Contrastive Estimation暂且不介绍。

当我们用一个EBM来描述数据的概率分布时,我们自然希望与真实的数据分布很接近,这就用到了MLE(最大似然估计),MLE可以简单地理解为,希望真实的数据发生在模型描述的概率分布下的可能性越大越好。

所以我们可以用 L = − 1 N ∑ i N l o g P θ ( x i ) L=-\frac{1}{N}\sum_i^N log P_\theta(x_i) L=N1iNlogPθ(xi)来计算损失。假设数据真实的分布是 P d P_{d} Pd,这个计算损失函数的过程可以描述成:每次从 P d P_d Pd采集 n n n(以下假设 n = 1 n=1 n=1)个样本,我们需要计算这个样本在 P θ P_\theta Pθ概率分布下的概率密度,损失函数取该密度的负数,每次向使得该损失值小的方向更新参数 θ \theta θ

如果我们计算损失函数关于 θ \theta θ的梯度,每次只需要计算 − l o g P θ ( x ) -log P_\theta(x) logPθ(x)关于 θ \theta θ的参数即可。

∂ θ l o g θ ( x ) = − ∂ θ E θ ( x ) − ∂ θ l o g Z θ = − ∂ θ E θ ( x ) − ∂ θ l o g ∫ e − E ( x ) d x = − ∂ θ E θ ( x ) − ( ∫ e − E θ ( x ) d x ) − 1 ∂ θ ∫ e − E ( x ) d x = − ∂ θ E θ ( x ) − ( ∫ e − E θ ( x ) d x ) − 1 ∫ ∂ θ e − E ( x ) d x = − ∂ θ E θ ( x ) + ( Z ) − 1 ∫ e − E θ ( x ) ∂ θ E θ ( x ) d x s = − ∂ θ E θ ( x ) + ( Z ) − 1 ∫ P θ ( x ) Z ∂ θ E θ ( x ) d x = − ∂ θ E θ ( x ) + ∫ P θ ( x ) ∂ θ E θ ( x ) d x = − ∂ θ E θ ( x ) + E x ∼ P θ ( x ) ∂ θ E θ ( x ) \partial_\theta log_\theta(x)=-\partial_\theta E_\theta(x)-\partial_\theta log Z_\theta\\ =-\partial_\theta E_\theta(x)-\partial_\theta log\int e^{-E(x)}dx\\ =-\partial_\theta E_\theta(x)-(\int e^{-E_\theta(x)}dx)^{-1}\partial_\theta \int e^{-E(x)}dx\\ =-\partial_\theta E_\theta(x)-(\int e^{-E_\theta(x)}dx)^{-1} \int\partial_\theta e^{-E(x)}dx\\ =-\partial_\theta E_\theta(x)+(Z)^{-1} \int e^{-E_\theta(x)}\partial_\theta E_\theta(x)dxs\\ =-\partial_\theta E_\theta(x)+(Z)^{-1} \int P_\theta(x)Z\partial_\theta E_\theta(x)dx\\ =-\partial_\theta E_\theta(x)+ \int P_\theta(x)\partial_\theta E_\theta(x)dx\\ =-\partial_\theta E_\theta(x)+ E_{x\sim P_\theta(x)}\partial_\theta E_\theta(x)\\ θlogθ(x)=θEθ(x)θlogZθ=θEθ(x)θlogeE(x)dx=θEθ(x)(eEθ(x)dx)1θeE(x)dx=θEθ(x)(eEθ(x)dx)1θeE(x)dx=θEθ(x)+(Z)1eEθ(x)θEθ(x)dxs=θEθ(x)+(Z)1Pθ(x)ZθEθ(x)dx=θEθ(x)+Pθ(x)θEθ(x)dx=θEθ(x)+ExPθ(x)θEθ(x)
因而,对 − l o g P θ ( x ) -log P_\theta(x) logPθ(x)求梯度,可以用如下操作:每次从数据集(真实分布)中取出某个正样本,然后从 P θ P_\theta Pθ中取出某个负样本,然后计算这两个样本的的能量值关于参数 θ \theta θ的导数。随着损失函数的减小,真实样本的能量值将会减小,而从 P θ P_\theta Pθ中采样的负样本的能量值将会增大。从而使得这个 E θ E_\theta Eθ能够很好地描述真实样本的分布。

Boltzmann Machines

玻尔兹曼机是一种对称连接的网络,是一个完全图,任意两个单元之间互相连接。一般来说,每个单元只有激活和非激活两种状态(有些模型中也可能是非二进制状态)。包含一个隐藏层和可见层,由此可知,这可以用带隐变量的EBM来建模。

img

v i v_i vi h j h_j hj分别表示可见单元 i i i和隐藏单元 j j j v v v h h h的联合概率分布为:

P ( v , h ) = 1 Z e − E ( v , h ) P(v,h)=\frac{1}{Z}e^{-E(v,h)} P(v,h)=Z1eE(v,h)
其中, Z = ∑ v , h e − E ( v , h ) Z=\sum_{v,h}e^{-E(v,h)} Z=v,heE(v,h)。其中 E ( v , h ) = − h T W v − c T v − b T h − v T U v − h T V h E(v,h)=-h^TWv-c^Tv-b^Th-v^TUv-h^TVh E(v,h)=hTWvcTvbThvTUvhTVh

玻尔兹曼机的问题在于,每个单元的概率都与所有其他单元之间有边连接,也就是每个单元必须是其他单元的线性可分函数,这样的训练可能比较困难(还不太清楚为什么困难)。Restricted Boltzmann Machine是对玻尔兹曼机的一种简化。

Restricted Boltzmann Machine

相对于玻尔兹曼机,简化在哪:隐藏层的单元之间没有节点相连接,可见层的单元之间也没有节点相连接,因而能量函数 E ( v , h ) = − h T W v − c T v − b T h E(v,h)=-h^TWv-c^Tv-b^Th E(v,h)=hTWvcTvbTh

由于所有单元只有激活和非激活两种状态,所以我们可以用二项分布来建模每个单元的概率分布。

从概率图的角度理解RBM

  • 基于RBM有哪些问题:一般来说,对于概率图模型,会有两种问题:Learning 和Inference,前者是在给定数据的情况下,学习模型的参数或结构,后者是给定模型的参数和结构,由已知变量的值推断出未知变量的值,放在RBM中,Learning便是学习模型的参数,即 W 、 c 、 b W、c、b Wcb,而Inference可以是给定了 W ′ 、 c ′ 、 b ′ W'、c'、b' Wcb,以及观测单元的值,我们去推断此时隐藏单元的值。
  • RBM的本质:RBM是一种概率无向图模型,它是一种生成模型,也就是说它可以用于建模数据的分布。怎么建模:可以从自编码器的角度理解,可见层相当于输入,隐藏层每个单元的取值构成隐藏编码,当给定一个训练样本时,我们计算出隐藏层各个单元的分布,得到隐藏编码,我们希望这个编码能够尽可能的描述可见层的信息(可能可以理解成降维),然后由隐藏层,我们可以得到可见层的每个单元的分布,从而生成一个样本。

计算条件概率

  • 当可见层给定时,怎么求第 j j j个隐藏层单元的分布:

在给定可见层单元的值时,只与可见层 v v v相关的项可以认为已知,由 E ( v , h ) = − h T W v − c T v − b T h − v T U v − h T V h E(v,h)=-h^TWv-c^Tv-b^Th-v^TUv-h^TVh E(v,h)=hTWvcTvbThvTUvhTVh P ( v , h ) = 1 Z e − E ( v , h ) P(v,h)=\frac{1}{Z}e^{-E(v,h)} P(v,h)=Z1eE(v,h)得到:

P ( h ∣ v ) = P ( h , v ) P ( v ) = 1 Z ′ e h T W v + b T h = 1 Z ′ e ∑ j h j T W : , j v j + b j T h j = 1 Z ′ ∏ j e h j T W : , j v j + b j T h j P(h|v)=\frac{P(h,v)}{P(v)}\\ =\frac{1}{Z'}e^{h^TWv+b^Th}\\ =\frac{1}{Z'}e^{\sum_j h_j^TW_:,jv_j+b^T_jh_j}\\ =\frac{1}{Z'}\prod_je^{h_j^TW_:,jv_j+b^T_jh_j} P(hv)=P(v)P(h,v)=Z1ehTWv+bTh=Z1ejhjTW:,jvj+bjThj=Z1jehjTW:,jvj+bjThj

P ( h j = 1 ∣ v ) = P ( h j = 1 ∣ v ) P ( h j = 1 ∣ v ) + P ( h j = 0 ∣ v ) = e W : , j v j + b j T e W : , j v j + b j T + 1 = s i g m o i d ( W : , j v j + b j T ) P(h_j=1|v)=\frac{P(h_j=1|v)}{P(h_j=1|v)+P(h_j=0|v)}\\ =\frac{e^{W_{:,j}v_j+b_j^T}}{e^{W_{:,j}v_j+b_j^T}+1}\\ =sigmoid(W_{:,j}v_j+b_j^T) P(hj=1v)=P(hj=1v)+P(hj=0v)P(hj=1v)=eW:,jvj+bjT+1eW:,jvj+bjT=sigmoid(W:,jvj+bjT)

由于隐藏单元符合二项分布,所以有了 P ( h j = 1 ∣ v ) P(h_j=1|v) P(hj=1v),便能够给出第 j j j个隐藏层的分布。

  • 当隐藏层给定时,怎么求第 j j j个可见层单元的分布:

P ( v j ∣ h ) = s i g m o i d ( W : , j h j + a j ) P(v_j|h)=sigmoid(W_{:,j}h_j+a_j) P(vjh)=sigmoid(W:,jhj+aj)

因而,我们可以再次借助采样方法,根据求得的分布来得到隐藏层或者是可见层的样本。这便完成了概率图的Inference

How to train RBM

关于概率图的Learning工作,损失函数和前面介绍基于能量的模型的训练方式相同,是负对数似然。参考博客中也有给出,具体做法是,损失函数对 W 、 c 、 b W、c、b Wcb求偏导,然后向着损失函数减小的方向更新参数。

但是,我们仍然能够看到,这个RBM其实就是对EBM的能量函数进行了修改,将 θ \theta θ具体地分成了三个参数 W 、 c 、 b W、c、b Wcb,我们将 − l o g P θ ( v , h ) -log P_\theta(v,h) logPθ(v,h)对每个参数分别求导,仍然会得到 ∂ θ E θ ( v , h ) − E ( v , h ) ∼ P θ ( v , h ) ∂ θ E θ ( v , h ) \partial_\theta E_\theta(v,h)- E_{(v,h)\sim P_\theta(v,h)}\partial_\theta E_\theta(v,h) θEθ(v,h)E(v,h)Pθ(v,h)θEθ(v,h),所以这里我们更新参数的方法:以 c c c的更新为例,取一个真实样本(可见层的输入) ( v , h ) (v,h) (v,h),计算能量函数对 c c c偏导,然后用某一个采样方式得到RBM模型对应的分布的某个负样本 ( v ′ , h ′ ) (v',h') (v,h),计算 E θ ( v ′ , h ′ ) E_\theta(v',h') Eθ(v,h) c c c的偏导,相减即可得到损失函数对 c c c的偏导,然后 c c c向着这个值的负方向进行移动即可。

由于 h h h是隐藏单元,不可能直接提供一个真实的值,所以这里需要借助Gibbs采样,前面提到了如何从可见层的值,得到每个隐藏单元的分布,所以这里的 h j ∼ B ( 1 , P ( h j = 1 ∣ v ) ) h_j\sim B(1,P(h_j=1|v)) hjB(1,P(hj=1v)),而 h j ′ ∼ B ( 1 , P ( h j ′ = 1 ∣ v ′ ) ) h'_j\sim B(1,P(h_j'=1|v')) hjB(1,P(hj=1v))

采样

在前面关于EBM的Learning问题中,都遇到了采样的问题,这可以依赖MCMC,Langevin Dynamic Sampling等等。

参考:

https://blog.csdn.net/chlele0105/article/details/17309491

https://blog.csdn.net/qq_39388410/article/details/78306190

你可能感兴趣的文章
java读取和修改ini配置文件实例代码
查看>>
setsockopt 设置socket 详细用法
查看>>
在局域网中实现多播功能
查看>>
什么叫组播地址(Multicast Address )?
查看>>
掌握IP地址知识 子网掩码与子网划分
查看>>
组播地址,IP组播地址
查看>>
什么是组播
查看>>
组播通信
查看>>
Linux网络编程一步一步学-UDP组播
查看>>
Linux C编程---网络编程
查看>>
在Linux创建库函数(1)
查看>>
在Linux创建库函数(2)
查看>>
在Linux创建库函数(3)
查看>>
多VLAN环境下DHCP服务的实现
查看>>
Java实现文件拷贝的4种方法
查看>>
在pb11中将C/S程序转换到B/S的步骤
查看>>
PowerDesigner教程系列(二)概念数据模型
查看>>
从PowerDesigner概念设计模型(CDM)中的3种实体关系说起
查看>>
SQL Server 2000中查询表名
查看>>
第一个go程序连接mysql读取数据
查看>>