本文共 7417 字,大约阅读时间需要 24 分钟。
EBMs简单的说,就是用一个标量——energy 来描述某个变量配置的好坏。在统计力学中,一般认为低能量值的状态比高能量值的状态发生的概率高,所以一般也会认为在EBMs中,真实的样本对应着低能量值,也对应着高的概率值。
P ( x ) = e − E ( x ) Z P(x)=\frac{e^{-E(x)}}{Z} P(x)=Ze−E(x) 其中 Z = ∫ x e − E ( x ) d x Z=\int_x e^{-E(x)}dx Z=∫xe−E(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)=Ze−E(x,y),其中 Z = ∫ x , y e − E ( x , y ) d x d y Z=\int_{x,y}e^{-E(x,y)}dxdy Z=∫x,ye−E(x,y)dxdy。显然,这是一个生成模型,可以学习数据的分布,我们知道,生成模型往往也可以用于定义一个判别模型,通过 P ( y ∣ x ) = P ( x , y ) P ( x ) P(y|x)=\frac{P(x,y)}{P(x)} P(y∣x)=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(y∣x)=Z′e−E(x,y),其中 Z ′ = ∫ x e − E ( x , y ) d x Z'=\int_x e^{-E(x,y)}dx Z′=∫xe−E(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(y∣x)=Z′e−E(x,y)中就是使得所有可能y值对应的概率值之和为1),且所有概率值控制在(0,1]之间。很多时候,不是所有的变量都是可观测的,但我们仍然要在基于观测变量的数据集上给出观测变量的分布:
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)=∫hZe−E(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)=∑hZe−E(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)=Ze−log∑hE(x,h) 这时分子可以称为Free energy,即 F ( x ) = − l o g ∑ h E ( x , h ) F(x)=-log\sum_h E(x,h) F(x)=−log∑hE(x,h)。这里只介绍一下基础的基于梯度下降的方式的训练方式,还有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=−N1∑iNlogPθ(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)−∂θlog∫e−E(x)dx=−∂θEθ(x)−(∫e−Eθ(x)dx)−1∂θ∫e−E(x)dx=−∂θEθ(x)−(∫e−Eθ(x)dx)−1∫∂θe−E(x)dx=−∂θEθ(x)+(Z)−1∫e−Eθ(x)∂θEθ(x)dxs=−∂θEθ(x)+(Z)−1∫Pθ(x)Z∂θEθ(x)dx=−∂θEθ(x)+∫Pθ(x)∂θEθ(x)dx=−∂θEθ(x)+Ex∼Pθ(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θ能够很好地描述真实样本的分布。玻尔兹曼机是一种对称连接的网络,是一个完全图,任意两个单元之间互相连接。一般来说,每个单元只有激活和非激活两种状态(有些模型中也可能是非二进制状态)。包含一个隐藏层和可见层,由此可知,这可以用带隐变量的EBM来建模。
用 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)=Z1e−E(v,h) 其中, Z = ∑ v , h e − E ( v , h ) Z=\sum_{v,h}e^{-E(v,h)} Z=∑v,he−E(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)=−hTWv−cTv−bTh−vTUv−hTVh。玻尔兹曼机的问题在于,每个单元的概率都与所有其他单元之间有边连接,也就是每个单元必须是其他单元的线性可分函数,这样的训练可能比较困难(还不太清楚为什么困难)。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)=−hTWv−cTv−bTh。
由于所有单元只有激活和非激活两种状态,所以我们可以用二项分布来建模每个单元的概率分布。
在给定可见层单元的值时,只与可见层 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)=−hTWv−cTv−bTh−vTUv−hTVh且 P ( v , h ) = 1 Z e − E ( v , h ) P(v,h)=\frac{1}{Z}e^{-E(v,h)} P(v,h)=Z1e−E(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(h∣v)=P(v)P(h,v)=Z′1ehTWv+bTh=Z′1e∑jhjTW:,jvj+bjThj=Z′1j∏ehjTW:,jvj+bjThjP ( 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=1∣v)=P(hj=1∣v)+P(hj=0∣v)P(hj=1∣v)=eW:,jvj+bjT+1eW:,jvj+bjT=sigmoid(W:,jvj+bjT)
由于隐藏单元符合二项分布,所以有了 P ( h j = 1 ∣ v ) P(h_j=1|v) P(hj=1∣v),便能够给出第 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(vj∣h)=sigmoid(W:,jhj+aj)
因而,我们可以再次借助采样方法,根据求得的分布来得到隐藏层或者是可见层的样本。这便完成了概率图的Inference。
关于概率图的Learning工作,损失函数和前面介绍基于能量的模型的训练方式相同,是负对数似然。参考博客中也有给出,具体做法是,损失函数对 W 、 c 、 b W、c、b W、c、b求偏导,然后向着损失函数减小的方向更新参数。
但是,我们仍然能够看到,这个RBM其实就是对EBM的能量函数进行了修改,将 θ \theta θ具体地分成了三个参数 W 、 c 、 b W、c、b W、c、b,我们将 − 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)) hj∼B(1,P(hj=1∣v)),而 h j ′ ∼ B ( 1 , P ( h j ′ = 1 ∣ v ′ ) ) h'_j\sim B(1,P(h_j'=1|v')) hj′∼B(1,P(hj′=1∣v′))。
在前面关于EBM的Learning问题中,都遇到了采样的问题,这可以依赖MCMC,Langevin Dynamic Sampling等等。
参考:
https://blog.csdn.net/chlele0105/article/details/17309491
https://blog.csdn.net/qq_39388410/article/details/78306190