一、概述

对于有向概率图模型来说,由于图中存在天然的拓扑排序关系,所以有向概率图的因式分解的形式很容易写出来。而对于无向图来说就需要根据它图中的最大团来写成一个因式分解的形式,无向图模型在局部并没有表现出是一个概率模型,在整体上才表现地是一个概率模型,由此我们也就遇到了配分函数。在无向图模型的学习和评估问题中,我们会面对概率公式中的配分函数(Partition Function),往往这个配分函数是很难处理的。

对于连续或离散的高维随机变量x∈Rpor{0,1,⋯,k}px\in \mathbb{R}^{p}\; or\; \left \{0,1,\cdots ,k\right \}^{p}x∈Rpor{0,1,⋯,k}p,它可以表示成一个无向概率图,模型参数为θ\thetaθ,它的概率公式也就可以写成以下形式:

P(x;θ)=1Z(θ)P^(x;θ)P(x;\theta )=\frac{1}{Z(\theta )}\hat{P}(x;\theta )P(x;θ)=Z(θ)1​P^(x;θ)

其中Z(θ)Z(\theta )Z(θ)也就是配分函数,可以表示为:

Z(θ)=P^(x;θ)dxZ(\theta )=\hat{P}(x;\theta )\mathrm{d}xZ(θ)=P^(x;θ)dx

对于这个概率模型的参数估计,可以采用极大似然估计的方法,首先,我们有一些样本,表示为X={xi}i=1NX=\left \{x_{i}\right \}_{i=1}^{N}X={xi​}i=1N​,然后使用这些样本来做极大似然估计:

θ^=argmaxθP(X;θ)=argmaxθ∏i=1NP(xi;θ)=argmaxθlog∏i=1NP(xi;θ)=argmaxθ∑i=1NlogP(xi;θ)=argmaxθ∑i=1N(logP^(xi;θ)−logZ(θ))=argmaxθ∑i=1NlogP^(xi;θ)−NlogZ(θ)=argmaxθ1N∑i=1NlogP^(xi;θ)−logZ(θ)⏟记作l(θ)\hat{\theta }=\underset{\theta }{argmax}\; P(X;\theta )\\ =\underset{\theta }{argmax}\prod_{i=1}^{N}P(x_{i};\theta )\\ =\underset{\theta }{argmax}\; log\prod_{i=1}^{N}P(x_{i};\theta )\\ =\underset{\theta }{argmax}\sum_{i=1}^{N} logP(x_{i};\theta )\\ =\underset{\theta }{argmax}\sum_{i=1}^{N}\left (log\hat{P}(x_{i};\theta )-logZ(\theta )\right ) \\ =\underset{\theta }{argmax}\sum_{i=1}^{N}log\hat{P}(x_{i};\theta )-NlogZ(\theta )\\ =\underset{\theta }{argmax}\underset{记作l(\theta )}{\underbrace{\frac{1}{N}\sum_{i=1}^{N}log\hat{P}(x_{i};\theta )-logZ(\theta )}}θ^=θargmax​P(X;θ)=θargmax​i=1∏N​P(xi​;θ)=θargmax​logi=1∏N​P(xi​;θ)=θargmax​i=1∑N​logP(xi​;θ)=θargmax​i=1∑N​(logP^(xi​;θ)−logZ(θ))=θargmax​i=1∑N​logP^(xi​;θ)−NlogZ(θ)=θargmax​记作l(θ)N1​i=1∑N​logP^(xi​;θ)−logZ(θ)​​

这里我们也就得到了目标函数l(θ)l(\theta )l(θ):

l(θ)=1N∑i=1NlogP^(xi;θ)−logZ(θ)l(\theta )=\frac{1}{N}\sum_{i=1}^{N}log\hat{P}(x_{i};\theta )-logZ(\theta )l(θ)=N1​i=1∑N​logP^(xi​;θ)−logZ(θ)

接下来使用梯度上升的方法来求解参数θ\thetaθ,因此也就需要对l(θ)l(\theta )l(θ)求导:

∇θl(θ)=1N∑i=1N∇θlogP^(xi;θ)⏟①−∇θlogZ(θ)⏟②\nabla _{\theta }l(\theta )=\underset{①}{\underbrace{\frac{1}{N}\sum_{i=1}^{N}\nabla _{\theta }log\hat{P}(x_{i};\theta )}}-\underset{②}{\underbrace{\nabla _{\theta }logZ(\theta )}}∇θ​l(θ)=①N1​i=1∑N​∇θ​logP^(xi​;θ)​​−②∇θ​logZ(θ)​​

这里我们首先看一下②这一项的求导:

②=∇θlogZ(θ)=1Z(θ)∇θZ(θ)=P(x;θ)P^(x;θ)∇θ∫P^(x;θ)dx=P(x;θ)P^(x;θ)∫∇θP^(x;θ)dx=∫P(x;θ)P^(x;θ)∇θP^(x;θ)dx=∫P(x;θ)∇θlogP^(x;θ)dx=EP(x;θ)[∇θlogP^(x;θ)]②=\nabla _{\theta }logZ(\theta )\\ ={\color{Red}{\frac{1}{Z(\theta )}}}{\color{Blue}{\nabla _{\theta }Z(\theta )}}\\ ={\color{Red}{\frac{P(x;\theta )}{\hat{P}(x;\theta )}}}{\color{Blue}{\nabla _{\theta }\int \hat{P}(x;\theta )\mathrm{d}x}}\\ =\frac{P(x;\theta )}{\hat{P}(x;\theta )}\int \nabla _{\theta }\hat{P}(x;\theta )\mathrm{d}x\\ =\int \frac{P(x;\theta )}{\hat{P}(x;\theta )}\nabla _{\theta }\hat{P}(x;\theta )\mathrm{d}x\\ =\int P(x;\theta )\nabla _{\theta }log\hat{P}(x;\theta )\mathrm{d}x\\ =E_{P(x;\theta )}\left [\nabla _{\theta }log\hat{P}(x;\theta )\right ]②=∇θ​logZ(θ)=Z(θ)1​∇θ​Z(θ)=P^(x;θ)P(x;θ)​∇θ​∫P^(x;θ)dx=P^(x;θ)P(x;θ)​∫∇θ​P^(x;θ)dx=∫P^(x;θ)P(x;θ)​∇θ​P^(x;θ)dx=∫P(x;θ)∇θ​logP^(x;θ)dx=EP(x;θ)​[∇θ​logP^(x;θ)]

注意这里的P(x;θ)P^(x;θ)\frac{P(x;\theta )}{\hat{P}(x;\theta )}P^(x;θ)P(x;θ)​之所以能够放到积分号里面,是因为对于任意xxx来说P(x;θ)P^(x;θ)\frac{P(x;\theta )}{\hat{P}(x;\theta )}P^(x;θ)P(x;θ)​都是个常数。

上面式子之所以这么变换的目的也就是要将这个导数写成关于P(x;θ)P(x;\theta )P(x;θ)的期望的形式,然而P(x;θ)P(x;\theta )P(x;θ)正是我们要求解的分布,是一个未知的分布,因此没办法精确求解,也就没办法计算这个梯度∇θl(θ)\nabla _{\theta }l(\theta )∇θ​l(θ),只能近似采样。如果没有②这一项,l(θ)l(\theta)l(θ)就可以采用梯度上升,但是由于存在配分函数就无法直接采用梯度上升了。以上就是问题所在。

二、随机最大似然(Stochastic Maximum Likelihood)

现在我们可以把∇θl(θ)\nabla _{\theta }l(\theta )∇θ​l(θ)下面的形式:

∇θl(θ)=1N∑i=1N∇θlogP^(xi;θ)−EP(x;θ)[∇θlogP^(x;θ)]\nabla _{\theta }l(\theta )=\frac{1}{N}\sum_{i=1}^{N}\nabla _{\theta }log\hat{P}(x_{i};\theta )-E_{P(x;\theta )}\left [\nabla _{\theta }log\hat{P}(x;\theta )\right ]∇θ​l(θ)=N1​i=1∑N​∇θ​logP^(xi​;θ)−EP(x;θ)​[∇θ​logP^(x;θ)]

对于我们的训练数据,我们可以把它们看做服从一个分布PdataP_{data}Pdata​,这个分布也就是训练数据的真实分布,是我们要去拟合的分布,然而也是一个我们永远不可能真正精确得到的分布,因为我们能够拿到的只有这个分布的若干样本(也就是训练数据)。有了PdataP_{data}Pdata​这个定义以后,我们也可以把上面梯度中减号左边的一项写成期望的形式:

∇θl(θ)=EPdata[∇θlogP^(x;θ)]−EP(x;θ)[∇θlogP^(x;θ)]\nabla _{\theta }l(\theta )={\color{Red}{E_{P_{data}}}}\left [\nabla _{\theta }log\hat{P}(x;\theta )\right ]-E_{P(x;\theta )}\left [\nabla _{\theta }log\hat{P}(x;\theta )\right ]∇θ​l(θ)=EPdata​​[∇θ​logP^(x;θ)]−EP(x;θ)​[∇θ​logP^(x;θ)]

我们的目的也就是要让P(x;θ)P(x;\theta )P(x;θ)尽可能地逼近PdataP_{data}Pdata​,这个P(x;θ)P(x;\theta )P(x;θ)也就是我们的模型,所以我们把P(x;θ)P(x;\theta )P(x;θ)这个分布记作PmodelP_{model}Pmodel​,现在我们就有了两个定义的分布,即数据的真实分布PdataP_{data}Pdata​和用来拟合PdataP_{data}Pdata​的PmodelP_{model}Pmodel​:

{datadistribution:Pdatamodeldistribution:Pmodel≜P(x;θ)\left\{\begin{matrix} data\; distribution:P_{data}\\ model\; distribution:P_{model}\triangleq P(x;\theta ) \end{matrix}\right.{datadistribution:Pdata​modeldistribution:Pmodel​≜P(x;θ)​

现在∇θl(θ)\nabla _{\theta }l(\theta )∇θ​l(θ)就可以写成∇θlogP^(x;θ)\nabla _{\theta }log\hat{P}(x;\theta )∇θ​logP^(x;θ)关于PdataP_{data}Pdata​和PmodelP_{model}Pmodel​的期望的形式:

∇θl(θ)=EPdata[∇θlogP^(x;θ)]⏟positivephase−EPmodel[∇θlogP^(x;θ)]⏟negativephase\nabla _{\theta }l(\theta )=\underset{positive\; phase}{\underbrace{{\color{Red}{E_{P_{data}}}}\left [\nabla _{\theta }log\hat{P}(x;\theta )\right ]}}-\underset{negative\; phase}{\underbrace{{\color{Red}{E_{P_{model}}}}\left [\nabla _{\theta }log\hat{P}(x;\theta )\right ]}}∇θ​l(θ)=positivephaseEPdata​​[∇θ​logP^(x;θ)]​​−negativephaseEPmodel​​[∇θ​logP^(x;θ)]​​

这里分别定义等号左边和右边的部分为正相(positive phase)和负相(negative phase)。

我们期待使用梯度上升法来迭代地求解最优的θ\thetaθ:

θ(t+1)=θ(t)+η∇θl(θ(t))\theta ^{(t+1)}=\theta ^{(t)}+\eta \nabla _{\theta }l(\theta ^{(t)})θ(t+1)=θ(t)+η∇θ​l(θ(t))

对于负相来说,我们无法对这个期望值积分,因此只能采用近似的方法,也就是在每次迭代时利用MCMC的方法(比如吉布斯采样)从Pmodel=P(x;θ(t))P_{model}=P(x;\theta ^{(t)})Pmodel​=P(x;θ(t))里采样得到样本,然后利用这些样本来近似计算负相这个积分值。这里采样得到的MMM个样本记作{x^i}i=1m\left \{\hat{x}_{i}\right \}_{i=1}^{m}{x^i​}i=1m​,这些样本叫做幻想粒子(fantacy particles):

x^1∼P(x;θ(t))⋮x^m∼P(x;θ(t))}fantacyparticles\left.\begin{matrix} \hat{x}_{1}\sim P(x;\theta ^{(t)})\\ \vdots \\ \hat{x}_{m}\sim P(x;\theta ^{(t)}) \end{matrix}\right\}fantacy\; particlesx^1​∼P(x;θ(t))⋮x^m​∼P(x;θ(t))​⎭⎪⎬⎪⎫​fantacyparticles

有了这些样本就可以计算负相,也就是说现在就可以用梯度上升的方法来迭代求解参数θ\thetaθ了,以下就是迭代求解的公式(这里也会从训练集中抽mmm个样本):

θ(t+1)=θ(t)+η(∑i=1m∇θlogP^(xi;θ(t))−∑i=1m∇θlogP^(x^i;θ(t)))\theta ^{(t+1)}=\theta ^{(t)}+\eta \left (\sum_{i=1}^{m}\nabla _{\theta }log\hat{P}(x_{i};\theta ^{(t)})-\sum_{i=1}^{m}\nabla _{\theta }log\hat{P}(\hat{x}_{i};\theta ^{(t)})\right )θ(t+1)=θ(t)+η(i=1∑m​∇θ​logP^(xi​;θ(t))−i=1∑m​∇θ​logP^(x^i​;θ(t)))

这个方法就叫做Gradient Ascent based on MCMC。

上面介绍的内容中引入了几个不容易理解的名词:正相、负相和幻想粒子,现在可以直观地解释一下这几个名词的含义。∇θl(θ(t))\nabla _{\theta }l(\theta ^{(t)})∇θ​l(θ(t))中存在正相和负相,对比目标函数l(θ)l(\theta )l(θ)的表达式可以直观地理解这样命名的用意。

正相的作用是让模型分布在训练样本处概率增大,也就是从PdataP_{data}Pdata​中采样,然后让这些样本在PmodelP_{model}Pmodel​中的概率增大。负相的作用是让Z(θ)Z(\theta)Z(θ)的值变小,也就是说要让从PmodelP_{model}Pmodel​中采样出来的幻想粒子在PmodelP_{model}Pmodel​中的概率减小,这些样本可以认为我们是不信任它的,称它们是fantasy的,因此要让它们的概率减小。正相和负相共同作用,最终结果就会让PmodelP_{model}Pmodel​逼近PdataP_{data}Pdata​,这个过程可以由下图表示:

可以想象如果PmodelP_{model}Pmodel​已经非常逼近PdataP_{data}Pdata​,那么采样得到的幻想粒子和从数据集中采样的样本就会非常一致,这时对这些样本既要增大它们的概率也要压低它们的概率,此时正相和负相的作用就会抵消,也就不会再产生梯度,训练也就必须停止。

三、对比散度

对于MCMC的方法,可以参考这两个链接:
①MCMC-1|机器学习推导系列(十五)
②MCMC-2|机器学习推导系列(十六)

上面的目标函数需要从PdataP_{data}Pdata​和PmodelP_{model}Pmodel​里面都采样mmm个样本,从PdataP_{data}Pdata​里面采样是很容易的,只需要从训练数据中抽取mmm个训练数据,而从PmodelP_{model}Pmodel​中采样就要采用MCMC的方法,具体的操作就是使用一个初始分布初始化马尔可夫链,然后等马尔可夫链随机游走到达平稳分布时进行采样,这里可以构建一条马尔可夫链然后从中采集mmm个样本,也可以构建mmm条马尔可夫链然后从每条马尔可夫链中采集一个样本(只不过这样比较消耗资源)。上述MCMC方法的问题是对于高维数据分布,很可能马尔可夫链的混合时间(或者叫燃烧期)会非常地长。

下图展示了采样多条马尔可夫链的吉布斯采样方法的过程,假设燃烧期是kkk,由于数据维度过高,很可能kkk就会非常大,我们可以认为是无穷大$\infty $。这里也要注意,吉布斯采样的过程是对高维随机变量的每一维依次采样,因此这里的图中的每个step其实都表示高维随机变量每一维采样的过程:

◯0−step→◯1−step→⋯◯k−step⏞mixingtime→⋯◯→x^1⋮◯0−step→◯1−step→⋯◯k−step→⋯◯→x^m}GibbsSampling\left.\begin{matrix} \overset{mixing\; time}{\overbrace{\underset{0-step}{\bigcirc} \rightarrow \underset{1-step}{\bigcirc}\rightarrow \cdots \underset{k-step}{\bigcirc}}}\rightarrow \cdots \bigcirc\rightarrow \hat{x}_{1}\\ \vdots \\ \underset{0-step}{\bigcirc} \rightarrow \underset{1-step}{\bigcirc}\rightarrow \cdots \underset{k-step}{\bigcirc}\rightarrow \cdots \bigcirc\rightarrow \hat{x}_{m} \end{matrix}\right\}Gibbs\; Sampling0−step◯​→1−step◯​→⋯k−step◯​​mixingtime​→⋯◯→x^1​⋮0−step◯​→1−step◯​→⋯k−step◯​→⋯◯→x^m​​⎭⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎫​GibbsSampling

对比散度(Contrastive Divergence)的方法可以避免燃烧期过长的问题,在上面的抽样过程中需要为0-step的x^i\hat{x}_{i}x^i​按照一个初始化分布进行初始化,而对比散度的方法就是使用PdataP_{data}Pdata​这个分布来作为初始化分布,具体的做法也就是从训练数据中抽取mmm个样本来初始化这mmm条马尔可夫链,也就是:

x^1=x1,x^2=x2,⋯,x^m=xm\hat{x}_{1}=x_{1},\hat{x}_{2}=x_{2},\cdots ,\hat{x}_{m}=x_{m}x^1​=x1​,x^2​=x2​,⋯,x^m​=xm​

使用PdataP_{data}Pdata​初始化马尔可夫链以后只需要经过很短的几步就可以采集样本了,比如经过kkk步就开始采样,即使k=1k=1k=1也是可以的。总之,对比散度的方法与普通的直接MCMC采样的方法的区别就在于使用了PdataP_{data}Pdata​初始化马尔可夫链,然后不用等漫长的混合时间,只需要kkk步就可以采样了,无论kkk步时有没有达到平稳分布,而k=1,2,3k=1,2,3k=1,2,3等很小的数字也是可以的。这种对比散度的方法就叫做CD Learning,之前的方法叫做ML Learning。

接下来来看看对比散度这个名字的由来。首先,先看这个式子:

θ^=argmaxθ1N∑i=1NlogP(x;θ)=argmaxθEPdata[logPmodel]=argmaxθ∫PdatalogPmodeldx=argmaxθ∫PdatalogPmodeldx−argmaxθ∫PdatalogPdatadx⏟与θ无关=argmaxθ∫PdatalogPmodelPdatadx=argmaxθ−KL(Pdata∣∣Pmodel)=argminθKL(Pdata∣∣Pmodel)\hat{\theta }=\underset{\theta }{argmax}\frac{1}{N}\sum_{i=1}^{N}logP(x;\theta )\\ =\underset{\theta }{argmax}E_{P_{data}}\left [logP_{model}\right ]\\ =\underset{\theta }{argmax}\int P_{data}logP_{model}\mathrm{d}x\\ =\underset{\theta }{argmax}\int P_{data}logP_{model}\mathrm{d}x-\underset{与\theta 无关}{\underbrace{\underset{\theta }{argmax}\int P_{data}logP_{data}\mathrm{d}x}}\\ =\underset{\theta }{argmax}\int P_{data}log\frac{P_{model}}{P_{data}}\mathrm{d}x \\ =\underset{\theta }{argmax}-KL(P_{data}||P_{model})\\ =\underset{\theta }{argmin}KL(P_{data}||P_{model})θ^=θargmax​N1​i=1∑N​logP(x;θ)=θargmax​EPdata​​[logPmodel​]=θargmax​∫Pdata​logPmodel​dx=θargmax​∫Pdata​logPmodel​dx−与θ无关θargmax​∫Pdata​logPdata​dx​​=θargmax​∫Pdata​logPdata​Pmodel​​dx=θargmax​−KL(Pdata​∣∣Pmodel​)=θargmin​KL(Pdata​∣∣Pmodel​)

可以看到,原来的极大似然估计的方法其实是在最小化PdataP_{data}Pdata​和PmodelP_{model}Pmodel​的KL散度。而现在在对比散度的方法中,我们用PdataP_{data}Pdata​作为第000步的初始化分布,而在经过很长的步数后才能达到平稳分布,我们现在把第000步的分布记作P(0)P^{(0)}P(0),最终的平稳分布记作P(∞)P^{(\infty )}P(∞),而中间的第kkk步的马尔可夫链的分布记作P(k)P^{(k)}P(k)。由于现在PmodelP_{model}Pmodel​采样的样本来自P(k)P^{(k)}P(k)而非P(∞)P^{(\infty )}P(∞),所以通过这些样本进行的参数估计就不是在最小化KL(P(0)∣∣P(∞))KL(P^{(0)}||P^{(\infty )})KL(P(0)∣∣P(∞))(也就是KL(Pdata∣∣Pmodel)KL(P_{data}||P_{model})KL(Pdata​∣∣Pmodel​))了,而是在按照下面式子中的目标函数进行参数估计:

θ^=argmin[KL(P(0)∣∣P(∞))−KL(P(k)∣∣P(∞))]⏟ContrastiveDivergence\hat{\theta }=argmin\underset{Contrastive\; Divergence}{\underbrace{\left [KL(P^{(0)}||P^{(\infty )})-KL(P^{(k)}||P^{(\infty )})\right ]}}θ^=argminContrastiveDivergence[KL(P(0)∣∣P(∞))−KL(P(k)∣∣P(∞))]​​

这个目标函数就是对比散度。使用CD-Learning的方法的算法如下:

t+1t+1t+1时刻:
①为正相从PdataP_{data}Pdata​中采样,x1,x2,⋯,xmx_{1},x_{2},\cdots ,x_{m}x1​,x2​,⋯,xm​是采样的数据,也就是训练数据;
②为负相从Pmodel=P(x;θ(t))P_{model}=P(x;\theta ^{(t)})Pmodel​=P(x;θ(t))中采样,使用为正相采样的数据初始化马尔可夫链:
x^1=x1,x^2=x2,⋯,x^m=xm\hat{x}_{1}=x_{1},\hat{x}_{2}=x_{2},\cdots ,\hat{x}_{m}=x_{m}x^1​=x1​,x^2​=x2​,⋯,x^m​=xm​
然后使用吉布斯采样从马尔可夫链中第kkk步的分布抽取mmm个样本,kkk可以是很小的数字,甚至是111:
◯0−step→◯1−step→⋯◯k−step→x^1⋮◯0−step→◯1−step→⋯◯k−step→x^m}GibbsSampling\left.\begin{matrix} \underset{0-step}{\bigcirc} \rightarrow \underset{1-step}{\bigcirc}\rightarrow \cdots \underset{k-step}{\bigcirc}\rightarrow \hat{x}_{1}\\ \vdots \\ \underset{0-step}{\bigcirc} \rightarrow \underset{1-step}{\bigcirc}\rightarrow \cdots \underset{k-step}{\bigcirc}\rightarrow \hat{x}_{m} \end{matrix}\right\}Gibbs\; Sampling0−step◯​→1−step◯​→⋯k−step◯​→x^1​⋮0−step◯​→1−step◯​→⋯k−step◯​→x^m​​⎭⎪⎪⎪⎬⎪⎪⎪⎫​GibbsSampling

四、受限玻尔兹曼机的学习

  1. 表示

受限玻尔兹曼机在前一篇介绍了它的表示和推断问题,参考链接如下:受限玻尔兹曼机|机器学习推导系列(二十五)。

它的概率模型如下:

{P(h,v)=1Zexp{−E(h,v)}E(h,v)=−(hTWv+αTv+βTh)\left\{\begin{matrix} P(h,v)=\frac{1}{Z}exp\left \{-E(h,v)\right \}\\ E(h,v)=-\left (h^{T}Wv+\alpha ^{T}v+\beta ^{T}h\right ) \end{matrix}\right.{P(h,v)=Z1​exp{−E(h,v)}E(h,v)=−(hTWv+αTv+βTh)​

其中:

h=(h1h2⋯hm)Tv=(v1v2⋯vn)TW=[wij]m×nα=(α1α2⋯αn)Tβ=(β1β2⋯βm)Th=\begin{pmatrix} h_{1} & h_{2} & \cdots & h_{m} \end{pmatrix}^{T}\\ v=\begin{pmatrix} v_{1} & v_{2} & \cdots & v_{n} \end{pmatrix}^{T}\\ W=\left [w_{ij}\right ]_{m\times n}\\ \alpha =\begin{pmatrix} \alpha _{1} & \alpha _{2} & \cdots & \alpha _{n} \end{pmatrix}^{T}\\ \beta =\begin{pmatrix} \beta _{1} & \beta _{2} & \cdots & \beta _{m} \end{pmatrix}^{T}h=(h1​​h2​​⋯​hm​​)Tv=(v1​​v2​​⋯​vn​​)TW=[wij​]m×n​α=(α1​​α2​​⋯​αn​​)Tβ=(β1​​β2​​⋯​βm​​)T

  1. 具有隐变量的能量模型

对于具有隐变量的能量模型来说,我们有的数据是观测变量vvv的数据,假设数据集是SSS,SSS的规模是NNN,即∣S∣=N\left |S\right |=N∣S∣=N,另外用θ\thetaθ表示参数(W,α,β)(W,\alpha ,\beta )(W,α,β),那么数据的logloglog似然就是:

l(θ)=1N∑v∈SlogP(v)l(\theta )=\frac{1}{N}\sum _{v\in S}logP(v)l(θ)=N1​v∈S∑​logP(v)

对于概率logP(v)logP(v)logP(v),来求它对θ\thetaθ的梯度,首先对这个概率做一些变换:

logP(v)=log∑hP(h,v)=log∑h1Zexp{−E(h,v)}=log∑hexp{−E(h,v)}−logZ=log∑hexp{−E(h,v)}⏟记作①−log∑h,vexp{−E(h,v)}⏟记作②logP(v)=log\sum _{h}P(h,v)\\ =log\sum _{h}\frac{1}{Z}exp\left \{-E(h,v)\right \}\\ =log\sum _{h}exp\left \{-E(h,v)\right \}-logZ\\ =\underset{记作①}{\underbrace{log\sum _{h}exp\left \{-E(h,v)\right \}}}-\underset{记作②}{\underbrace{log\sum _{h,v}exp\left \{-E(h,v)\right \}}}logP(v)=logh∑​P(h,v)=logh∑​Z1​exp{−E(h,v)}=logh∑​exp{−E(h,v)}−logZ=记作①logh∑​exp{−E(h,v)}​​−记作②logh,v∑​exp{−E(h,v)}​​

接下来看①和②这两项对参数θ\thetaθ的导数:

∂①∂θ=∂∂θlog∑hexp{−E(h,v)}=−1∑hexp{−E(h,v)}∑hexp{−E(h,v)}∂E(h,v)∂θ=−∑hexp{−E(h,v)}∑hexp{−E(h,v)}∂E(h,v)∂θ=−∑h1Zexp{−E(h,v)}1Z∑hexp{−E(h,v)}∂E(h,v)∂θ=−∑hP(h,v)∑hP(h,v)∂E(h,v)∂θ=−∑hP(h∣v)∂E(h,v)∂θ∂②∂θ=∂∂θlog∑h,vexp{−E(h,v)}=−1∑h,vexp{−E(h,v)}∑h,vexp{−E(h,v)}∂E(h,v)∂θ=−∑h,vexp{−E(h,v)}∑h,vexp{−E(h,v)}∂E(h,v)∂θ=−∑h,vexp{−E(h,v)}Z∂E(h,v)∂θ=−∑h,vP(h,v)∂E(h,v)∂θ\frac{\partial ①}{\partial \theta }=\frac{\partial}{\partial \theta }log\sum _{h}exp\left \{-E(h,v)\right \}\\ =-\frac{1}{\sum _{h}exp\left \{-E(h,v)\right \}}\sum _{h}exp\left \{-E(h,v)\right \}\frac{\partial E(h,v)}{\partial \theta }\\ =-\sum _{h}\frac{exp\left \{-E(h,v)\right \}}{\sum _{h}exp\left \{-E(h,v)\right \}}\frac{\partial E(h,v)}{\partial \theta }\\ =-\sum _{h}\frac{{\color{Red}{\frac{1}{Z}}}exp\left \{-E(h,v)\right \}}{{\color{Red}{\frac{1}{Z}}}\sum _{h}exp\left \{-E(h,v)\right \}}\frac{\partial E(h,v)}{\partial \theta }\\ =-\sum _{h}\frac{P(h,v)}{\sum _{h}P(h,v)}\frac{\partial E(h,v)}{\partial \theta }\\ =-\sum _{h}P(h|v)\frac{\partial E(h,v)}{\partial \theta }\\ \frac{\partial ②}{\partial \theta }=\frac{\partial}{\partial \theta }log\sum _{h,v}exp\left \{-E(h,v)\right \}\\ =-\frac{1}{\sum _{h,v}exp\left \{-E(h,v)\right \}}\sum _{h,v}exp\left \{-E(h,v)\right \}\frac{\partial E(h,v)}{\partial \theta }\\ =-\sum _{h,v}\frac{exp\left \{-E(h,v)\right \}}{\sum _{h,v}exp\left \{-E(h,v)\right \}}\frac{\partial E(h,v)}{\partial \theta }\\ =-\sum _{h,v}\frac{exp\left \{-E(h,v)\right \}}{Z}\frac{\partial E(h,v)}{\partial \theta }\\ =-\sum _{h,v}P(h,v)\frac{\partial E(h,v)}{\partial \theta }∂θ∂①​=∂θ∂​logh∑​exp{−E(h,v)}=−∑h​exp{−E(h,v)}1​h∑​exp{−E(h,v)}∂θ∂E(h,v)​=−h∑​∑h​exp{−E(h,v)}exp{−E(h,v)}​∂θ∂E(h,v)​=−h∑​Z1​∑h​exp{−E(h,v)}Z1​exp{−E(h,v)}​∂θ∂E(h,v)​=−h∑​∑h​P(h,v)P(h,v)​∂θ∂E(h,v)​=−h∑​P(h∣v)∂θ∂E(h,v)​∂θ∂②​=∂θ∂​logh,v∑​exp{−E(h,v)}=−∑h,v​exp{−E(h,v)}1​h,v∑​exp{−E(h,v)}∂θ∂E(h,v)​=−h,v∑​∑h,v​exp{−E(h,v)}exp{−E(h,v)}​∂θ∂E(h,v)​=−h,v∑​Zexp{−E(h,v)}​∂θ∂E(h,v)​=−h,v∑​P(h,v)∂θ∂E(h,v)​

那么最终logP(v)logP(v)logP(v)对参数θ\thetaθ的梯度为:

∂∂θlogP(v)=∂①∂θ−∂②∂θ=∑h,vP(h,v)∂E(h,v)∂θ−∑hP(h∣v)∂E(h,v)∂θ\frac{\partial}{\partial \theta }logP(v)=\frac{\partial ①}{\partial \theta }-\frac{\partial ②}{\partial \theta }\\ =\sum _{h,v}P(h,v)\frac{\partial E(h,v)}{\partial \theta }-\sum _{h}P(h|v)\frac{\partial E(h,v)}{\partial \theta }∂θ∂​logP(v)=∂θ∂①​−∂θ∂②​=h,v∑​P(h,v)∂θ∂E(h,v)​−h∑​P(h∣v)∂θ∂E(h,v)​

  1. RBM的logloglog似然梯度

接下来以求解WWW为例来看RBM的参数学习方法。上面有了logP(v)logP(v)logP(v)对参数θ\thetaθ的梯度,类似地logP(v)logP(v)logP(v)对参数wijw_{ij}wij​的梯度为:

∂∂wijlogP(v)=∑h,vP(h,v)∂E(h,v)∂wij−∑hP(h∣v)∂E(h,v)∂wij\frac{\partial}{\partial w_{ij}}logP(v)=\sum _{h,v}P(h,v)\frac{\partial E(h,v)}{\partial w_{ij}}-\sum _{h}P(h|v)\frac{\partial E(h,v)}{\partial w_{ij}}∂wij​∂​logP(v)=h,v∑​P(h,v)∂wij​∂E(h,v)​−h∑​P(h∣v)∂wij​∂E(h,v)​

然后观察一下能量函数E(h,v)E(h,v)E(h,v):

E(h,v)=−(hTWv+αTv+βTh⏟与W无关,记作Δ)=−(hTWv+Δ)=−(∑i=1m∑i=1nhiwijvj+Δ)E(h,v)=-(h^{T}Wv+\underset{与W无关,记作\Delta }{\underbrace{\alpha ^{T}v+\beta ^{T}h}})\\ =-(h^{T}Wv+\Delta )\\ =-(\sum_{i=1}^{m}\sum_{i=1}^{n}h_{i}w_{ij}v_{j}+\Delta )E(h,v)=−(hTWv+与W无关,记作ΔαTv+βTh​​)=−(hTWv+Δ)=−(i=1∑m​i=1∑n​hi​wij​vj​+Δ)

那么∂E(h,v)∂wij\frac{\partial E(h,v)}{\partial w_{ij}}∂wij​∂E(h,v)​也就很容易写出来:

∂E(h,v)∂wij=−hivj\frac{\partial E(h,v)}{\partial w_{ij}}=-h_{i}v_{j}∂wij​∂E(h,v)​=−hi​vj​

代入∂∂wijlogP(v)\frac{\partial}{\partial w_{ij}}logP(v)∂wij​∂​logP(v)就有:

∂∂wijlogP(v)=∑h,vP(h,v)(−hivj)−∑hP(h∣v)(−hivj)=∑hP(h∣v)hivj⏟记作①−∑h,vP(h,v)hivj⏟记作②\frac{\partial}{\partial w_{ij}}logP(v)=\sum _{h,v}P(h,v)(-h_{i}v_{j})-\sum _{h}P(h|v)(-h_{i}v_{j})\\ =\underset{记作①}{\underbrace{\sum _{h}P(h|v)h_{i}v_{j}}}-\underset{记作②}{\underbrace{\sum _{h,v}P(h,v)h_{i}v_{j}}}∂wij​∂​logP(v)=h,v∑​P(h,v)(−hi​vj​)−h∑​P(h∣v)(−hi​vj​)=记作①h∑​P(h∣v)hi​vj​​​−记作②h,v∑​P(h,v)hi​vj​​​

有一点要回忆一下,就是RBM无论隐变量还是观测变量都是二值的,取值只能是000或111。接下来对①和②继续进行变换,需要利用这一点:

①=∑h1∑h2⋯∑hi⋯∑hmP(h1,h2,⋯,hi,⋯,hm∣v)hivj=∑hiP(hi∣v)hivj=P(hi=1∣v)1⋅vj+P(hi=0∣v)0⋅vj=P(hi=1∣v)vj②=∑h∑vP(h,v)hivj=∑h∑vP(v)P(h∣v)hivj=∑vP(v)∑hP(h∣v)hivj⏟同①=∑vP(v)P(hi=1∣v)vj①=\sum _{h_{1}}\sum _{h_{2}}\cdots \sum _{h_{i}}\cdots \sum _{h_{m}}P(h_{1},h_{2},\cdots ,h_{i},\cdots ,h_{m}|v)h_{i}v_{j}\\ =\sum _{h_{i}}P(h_{i}|v)h_{i}v_{j}\\ =P(h_{i}=1|v)1\cdot v_{j}+P(h_{i}=0|v)0\cdot v_{j}\\ =P(h_{i}=1|v)v_{j}\\ ②=\sum_{h}\sum_{v}P(h,v)h_{i}v_{j}\\ =\sum_{h}\sum_{v}P(v)P(h|v)h_{i}v_{j}\\ =\sum_{v}P(v)\underset{同①}{\underbrace{\sum_{h}P(h|v)h_{i}v_{j}}}\\ =\sum_{v}P(v)P(h_{i}=1|v)v_{j}①=h1​∑​h2​∑​⋯hi​∑​⋯hm​∑​P(h1​,h2​,⋯,hi​,⋯,hm​∣v)hi​vj​=hi​∑​P(hi​∣v)hi​vj​=P(hi​=1∣v)1⋅vj​+P(hi​=0∣v)0⋅vj​=P(hi​=1∣v)vj​②=h∑​v∑​P(h,v)hi​vj​=h∑​v∑​P(v)P(h∣v)hi​vj​=v∑​P(v)同①h∑​P(h∣v)hi​vj​​​=v∑​P(v)P(hi​=1∣v)vj​

因此也就有:

∂∂wijlogP(v)=P(hi=1∣v)vj−∑vP(v)P(hi=1∣v)vj\frac{\partial}{\partial w_{ij}}logP(v)=P(h_{i}=1|v)v_{j}-\sum_{v}P(v)P(h_{i}=1|v)v_{j}∂wij​∂​logP(v)=P(hi​=1∣v)vj​−v∑​P(v)P(hi​=1∣v)vj​

对于上面式子中的P(hi=1∣v)P(h_{i}=1|v)P(hi​=1∣v)这个条件概率,我们是可以直接写出来的,这个概率在上一篇的推断问题中已经推导过了,可以参照本节开头的链接。

  1. RBM的CD-k方法

所有样本的logloglog似然l(θ)l(\theta)l(θ)对wijw_{ij}wij​的梯度现在就可以表示为:

∂l(θ)∂wij=1N∑v∈S∂∂wijlogP(v)=1N∑v∈S(P(hi=1∣v)vj−∑vP(v)P(hi=1∣v)vj⏟EP(v)[P(hi=1∣v)vj])\frac{\partial l(\theta)}{\partial w_{ij}}=\frac{1}{N}\sum _{v\in S}\frac{\partial}{\partial w_{ij}}logP(v)\\ =\frac{1}{N}\sum _{v\in S}(P(h_{i}=1|v)v_{j}-\underset{E_{P(v)}\left [P(h_{i}=1|v)v_{j}\right ]}{\underbrace{{\color{Red}{\sum_{v}P(v)P(h_{i}=1|v)v_{j}}}}})∂wij​∂l(θ)​=N1​v∈S∑​∂wij​∂​logP(v)=N1​v∈S∑​(P(hi​=1∣v)vj​−EP(v)​[P(hi​=1∣v)vj​]v∑​P(v)P(hi​=1∣v)vj​​​)

这里红色的项需要对vvv进行积分,是untrackable的,这一项其实也就是关于P(v)P(v)P(v)的期望,因此需要借助MCMC(这里指CD-k的方法,因为RBM里的随机变量也是高维的,只用MCMC也会面临燃烧期过长的问题)的方法。

使用的采样方法还是吉布斯采样,这里具体的采样过程如下图所示,首先使用训练数据来初始化v(0)v^{(0)}v(0),然后固定v(0)v^{(0)}v(0)来依次采样h(0)h^{(0)}h(0)的每一维,然后固定h(0)h^{(0)}h(0)再来依次采样v(1)v^{(1)}v(1)的每一维,按照如此流程进行kkk步,最终采样得到v(k)v^{(k)}v(k)这一个样本,这种固定一部分来采另一部分的方法叫做块吉布斯采样(block Gibbs Sampling):

需要注意的是虽然按照吉布斯采样的方法需要依次采集每一个维度,但在RBM中由于模型的特殊性,在固定vvv或者hhh时,其余的随机变量都是相互独立的,因此实际操作中并行采每一维也是可以的。

另外我们一共有NNN个训练数据,因此使用每个训练数据初始化一次都可以采集到一个v(k)v^{(k)}v(k),因此最终采集到的v(k)v^{(k)}v(k)一共有NNN个。

具体的CD-k for RBM算法为:

for each vvv:
  v(0)←vv^{(0)}\leftarrow vv(0)←v
  for l=0,1,2,⋯,k−1l=0,1,2,\cdots ,k-1l=0,1,2,⋯,k−1:
    for i=1,2,⋯,mi=1,2,\cdots ,mi=1,2,⋯,m:sample hi(l)∼P(hi∣v(l))h_{i}^{(l)}\sim P(h_{i}|v^{(l)})hi(l)​∼P(hi​∣v(l))
    for j=1,2,⋯,nj=1,2,\cdots ,nj=1,2,⋯,n:sample vj(l+1)∼P(vj∣h(l))v_{j}^{(l+1)}\sim P(v_{j}|h^{(l)})vj(l+1)​∼P(vj​∣h(l))
  for i=1,2,⋯,mi=1,2,\cdots ,mi=1,2,⋯,m,j=1,2,⋯,nj=1,2,\cdots ,nj=1,2,⋯,n:
    Δwij←Δwij+∂∂wijlogP(v)\Delta w_{ij}\leftarrow \Delta w_{ij}+\frac{\partial}{\partial w_{ij}}logP(v)Δwij​←Δwij​+∂wij​∂​logP(v)

这里的Δwij\Delta w_{ij}Δwij​初始化为000,这里的∂∂wijlogP(v)\frac{\partial}{\partial w_{ij}}logP(v)∂wij​∂​logP(v)也就是:

∂∂wijlogP(v)≈P(hi=1∣v(0))vj(0)−P(hi=1∣v(k))vj(k)\frac{\partial}{\partial w_{ij}}logP(v)\approx P(h_{i}=1|v^{(0)})v_{j}^{(0)}-P(h_{i}=1|v^{(k)})v_{j}^{(k)}∂wij​∂​logP(v)≈P(hi​=1∣v(0))vj(0)​−P(hi​=1∣v(k))vj(k)​

也就是说用每个训练数据采样得到的样本对应的P(hi=1∣v(k))vj(k)P(h_{i}=1|v^{(k)})v_{j}^{(k)}P(hi​=1∣v(k))vj(k)​来代替期望EP(v)[P(hi=1∣v)vj]E_{P(v)}\left [P(h_{i}=1|v)v_{j}\right ]EP(v)​[P(hi​=1∣v)vj​],并且将所有训练数据计算得到的∂∂wijlogP(v)\frac{\partial}{\partial w_{ij}}logP(v)∂wij​∂​logP(v)累计起来得到的Δwij\Delta w_{ij}Δwij​作为∂l(θ)∂wij\frac{\partial l(\theta)}{\partial w_{ij}}∂wij​∂l(θ)​的近似值,即:

∂l(θ)∂wij=1N∑v∈S∂∂wijlogP(v)≈1NΔwij\frac{\partial l(\theta)}{\partial w_{ij}}=\frac{1}{N}\sum _{v\in S}\frac{\partial}{\partial w_{ij}}logP(v)\approx \frac{1}{N}\Delta w_{ij}∂wij​∂l(θ)​=N1​v∈S∑​∂wij​∂​logP(v)≈N1​Δwij​

最后进行梯度上升迭代求解就可以了。

配分函数|机器学习推导系列(二十六)相关推荐

  1. Reflex WMS入门系列二十六:合并托盘

    Reflex WMS入门系列二十六:合并托盘 仓库管理业务实践中,对于仓库里的库存,将几个零托合并成一个托,也是比较常见的作业.Reflex WMS系统自然要能支持这种合并托盘(Merge HDs)的 ...

  2. 数据与广告系列二十六:知识迁移的Embedding应用,智能化定向的解药

    作者·黄崇远 『数据虫巢』 全文共4348字 题图ssyer.com " 效果广告后定向时代,虽有千般万难,我们一样还得解决定向智能的问题." 需要提前说明的是,这一篇会涉及到本系 ...

  3. 机器学习算法系列(十六)-非线性支持向量机算法(Non-Linear Support Vector Machine)

    阅读本文需要的背景知识点:线性支持向量机.一丢丢编程知识 一.引言   前面我们用两节介绍了两种支持向量机模型--硬间隔支持向量机.软间隔支持向量机,这两种模型可以统称为线性支持向量机,下面来介绍另一 ...

  4. 机器学习算法(二十六):文本表示模型

    目录 1 词袋模型 2 TF-IDF 2.1 TF(Term Frequency) 2.2 IDF(Inverse Document Frequency) 2.3 TF-IDF 2.4 用scikit ...

  5. 机器学习基础(二十六)—— 将 SVM 推广到多类问题

    有 3 种常用的策略可用于推广 SVM 解决多类问题,下面以一个 4 类问题为例进行说明. 1. 一对多的最大响应策略(one against all) 假设有 A.B.C.D 四类样本需要划分.在抽 ...

  6. 【Python学习系列二十六】networkx库图最短路径求解

    场景:基于python库networkx来求解图最短路径,相关算法基础参考 http://blog.csdn.net/fjssharpsword/article/details/52931373 ht ...

  7. 网络安全系列-二十六: IP地理定位数据库及使用示例

    GeoLite2数据库 GeoLite2数据库是免费的IP地理位置数据库,详见参见:GeoLite2 Free Geolocation Data,比商业版的MaxMind's GeoIP2 datab ...

  8. python networkx进行最短路径分析_【Python学习系列二十六】networkx库图最短路径求解...

    场景:基于python库networkx来求解图最短路径,相关算法基础参考 http://blog.csdn.net/fjssharpsword/article/details/52931373 ht ...

  9. 前端工程师和设计师必读文章推荐【系列三十六】

    <Web 前端开发精华文章推荐>自2011年6月20号发布第一期以来,历经五年半,总共发布了30多期.今天这篇是2017年第2期(总第36期),希望你能在这里发现有用的资料. 梦想天空专注 ...

最新文章

  1. Python:处理一些格式规范的文字
  2. python操作excel-Python对Excel的读写等操作(转)
  3. 南方日报专访 | 网易云信沈青松: 企业上云正热,PaaS将迎来爆发
  4. php artisan 出错,Laravel 5.2 php artisan migrate:回滚错误
  5. win10 4k分屏 eclipse等工具打开后按钮图标大小问题解决方案
  6. Android Studio1.4.x JNI开发基础 - 简单实例
  7. fifo的valid信号啥时候为高_五角枫啥时候适合移栽?五角枫移栽最佳时间
  8. FlowDocumentPageViewer
  9. 结构体对齐 大小 位域问题
  10. putty秘钥转换成xhell支持的格式
  11. wget 命令的使用:HTTP文件下载、FTP文件下载
  12. Python 利用 BeautifulSoup 爬取网站获取新闻流
  13. 常用Windows 运行命令
  14. “万米网格管理法”助力省城城市管理
  15. VMware 虚拟机三种网络模式详解
  16. THINKPAD T14 Windows 10系统安装
  17. 【贪玩巴斯】数字信号处理Digital Signal Processing(DSP)——第三节「离散时间 系统 详解」2021-09-29
  18. 火炬之光(TorchLight)使用的Ogre粒子系统插件ParticleUniverse研究
  19. SN_Writer写IMEI号
  20. 宾补其实是宾语从句的省略

热门文章

  1. css实现多行文本时显示省略号
  2. 【大白话学习】UniApp 微信小程序与APP应用 开发零基础入门教程(一)---基础页面框架搭建
  3. python pandas excle 把两列合并新的一列
  4. 2018-3-25至2018-8-9的日语笔记
  5. 多个tab页如何共享websocket
  6. Android绘图(二)使用 Graphics2D 实现动态效果
  7. 【SQLSERVER 2000】由于数据移动,未能继续以 NOLOCK 方式扫描
  8. 极米、当贝、坚果3000内的投影仪有什么推荐?
  9. Python利用pptx模块三步将图片插入特定PPT模板
  10. 连上WiFi就能打电话?“手机营业厅”中的神奇功能火了