26 Sigmoid信念网络

1 Background

1.1 什么是Sigmoid Belief Network

这一节将要学习的是Sigmoid Belief Network。首先来想一想这个名字是怎么来的,其中Belief 就等价于Bayesian Network(俗称有向图),而Sigmoid 指的是Sigmoid Function:
σ(x)=11+expx \sigma(x)=\frac{1}{1+\exp -x}
表示图中的节点都是服从0/1 分布的离散随机变量,并且概率值和Sigmoid 函数有关。

周知,有向图的因子分解很简单,因为变量之间的关系非常的清晰。而且采样也非常的简单,先从根节点开始采样,在根节点已知的情况下,子节点之间都是条件独立的(D-Separation 中的Tail to Tail 原则)。这样我们就可以一层一层的往下采样,而在神经网络中用足够多的隐藏层可以近似任何分布,在这里也一样,只要深度足够可以逼近任何的二值分布。
Neal 在1990 年结合Boltzmann Model 提出了Sigmoid Belief Network。Boltzmann Machine 定义了观察变量V 和未观察变量V 的联合分布概率:
P(v,h)=exp{E(v,h)}v,hexp{E(v,h)} P(v, h)=\frac{\exp \{-\mathrm{E}(v, h)\}}{\sum_{v, h} \exp \{-\mathrm{E}(v, h)\}}
而能量函数为:
E(v,h)=iαivijβjhji,jviwijhj \mathrm{E}(v, h)=-\sum_{i} \alpha_{i} v_{i}-\sum_{j} \beta_{j} h_{j}-\sum_{i, j} v_{i} w_{i j} h_{j}
通过调整权值可改变概率。有了联合分布概率,从而很容易得到观察变量的概率:
P(v,h)=hexp{E(v,h)}v,hexpexp{E(v,h)} P(v, h)=\frac{\sum_{h} \exp \{-\mathrm{E}(v, h)\}}{\sum_{v, h} \exp \exp \{-\mathrm{E}(v, h)\}}
因为我们观测到的数据只有可观测变量,所以学习调整权值的目的就是极大化观察变量的似然函数 logp(V)-\log p(V)
Sigmoid Belief Network 将无向图变成有向图的结构则有更好的因果(causal) 形式,其中未
观察变量被看作观察变量发生的原因。

1.2 Sigmoid Belief Network的模型表示

假设无向图中的节点为, {S1,S2,,ST}\left\{S_{1}, S_{2}, \cdots, S_{T}\right\} 。根据可观测变量和不可观测变量, 可以划分为 {V,H}\{V, H\} 如下图所示:
26 Sigmoid信念网络
注意我们用 j < ii 来表示i 的父亲节点,在离散数学里这是一种偏序关系,我们可以简单的认为SjS_j 节点在Si 节点之前进行采样。(这里老师讲的有点模糊,开始听的有点懵逼) 那么SiS_i 节点的概率分布,等于它的两个父亲节点的分布和相应的权重的乘积之和对应的一个Sigmoid 函数(Sigmoid 函数就是用在这儿的),即为:
P(Si=1)=σ(wjiSj+wj+1iSj+1)=σ(j<iwjiSj) P\left(S_{i}=1\right)=\sigma\left(w_{j i} S_{j}+w_{j+1 i} S_{j+1}\right)=\sigma\left(\sum_{j<i} w_{j i} S_{j}\right)
考虑到条件独立性,完整的可以写为:
P(Si=1Sj:j<i)=σ(wjiSj+wj+1iSj+1)=σ(j<iwjiSj) P\left(S_{i}=1 | S_{j: j<i}\right)=\sigma\left(w_{j i} S_{j}+w_{j+1 i} S_{j+1}\right)=\sigma\left(\sum_{j<i} w_{j i} S_{j}\right)
那么很简单就可以表示 P(Si=0Sj:j<i)P\left(S_{i}=0 | S_{j: j<i}\right)
P(Si=0Sj:j<i)=1σ(wjiSj+wj+1iSj+1)=σ(wjiSj+wj+1iSj+1) P\left(S_{i}=0 | S_{j: j<i}\right)=1-\sigma\left(w_{j i} S_{j}+w_{j+1 i} S_{j+1}\right)=\sigma\left(-w_{j i} S_{j}+w_{j+1 i} S_{j+1}\right)
这里用到了一个很重要的性质,即为:1- σ(x)=σ(x)\sigma(x)=\sigma(-x) 这个公式很简单,同学们自己推就可以了。下 一个问题是,想把公式 (4) 和 (5) 合并一下,因为分开不好进行统一的表达。思考到当 Si=1S_{i}=1 时,希 望系数为 1; 当 Si=0S_{i}=0 时,希望系数为 1-1_{\circ} 令:
Si=2Si1 S_{i}^{*}=2 S_{i}-1
就可以完美的实现这个结果。所以,就可以合并起来,得到 SiS_{i} 的条件概率为:
{P(SiSj:j<i)=σ(Sij<iwjiSj)Si=2Si1 \left\{\begin{array}{l} P\left(S_{i} | S_{j: j<i}\right)=\sigma\left(S_{i}^{*} \sum_{j<i} w_{j i} S_{j}\right) \\ S_{i}^{*}=2 S_{i}-1 \end{array}\right.

1.3 小结

本小节讲述了SBN 算法的来源,如何从Boltzmann Machine 中演变而来,以及比Boltzmann 先进的原因。也梳理了一下Boltzmann Machine 的求解策略。然后给出了SBN 的模型表示方法,这里需要注意一下< 是一种代表父子节点关系的偏序关系。

2 Log Likelihood Gradient

2.1 Learning rule

Neal 在提出这个算法的时候,给出了Learning Rule,但是很不幸的是,这个Learning Rule 存在非常明显的缺陷。我先大致的说一下,就是梯度的值用MCMC 来采样,这样只能应对小规模的网络,层次一多起来就不work 了(Mixing time) 过长,而为什么要用MCMC 方法呢?因为Head to Head的问题,请看图1,在vv 节点被观测的情况下,hh 中的节点都不是条件独立的,他们之间都是相关的。那么,P(hv)P(h|v) 就很难被求出来,因为hh 之间的节点相互影响,有相交解释。
“近似推断”那一节我们已经讲过了,Learning 中是需要求后验的,这里再简单描述一下。Learning的思想是令先验的Log Likelihood Function 最大化,通常使用梯度上升法来解决,在求解梯度的过程中,不可避免的要求后验,因为这个梯度的计算结果就是一个关于后验分布的期望,不可避免的要从后验中采样,因为后验很复杂不能直接采样,所以要使用MCMC 从后验中采样来求近似期望。
下面我们将求解Log Likelihood Gradient 来让大家有一个感性的认识。大佬这里有一句话如醍醐灌顶,推导的目的是看看具体的过程,然后对结论有一个感性的认识,对结论的来龙去脉有更好的理解,主要目的是辅助我们理解结论,而不是为了推导而推导。

3 Log Likelihood Function Gradient

假设联合概率分布为:
P(S)=iP(SiSj:j<i) P(S)=\prod_{i} P\left(S_{i} | S_{j: j<i}\right)
而,
{P(SiSj:j<i)=σ(Sij<iwjiSj)Si=2Si1 \left\{\begin{array}{l} P\left(S_{i} | S_{j: j<i}\right)=\sigma\left(S_{i}^{*} \sum_{j<i} w_{j i} S_{j}\right) \\ S_{i}^{*}=2 S_{i}-1 \end{array}\right.
实际上,应该是 σ(Sj<iwjiSi+bi),\sigma\left(S * \sum_{j<i} w_{j i} S_{i}+b_{i}\right), 还有一个偏置,了解一点机器学习的同学都知道,这个偏置 是可以放到权值里的,因为可以看成是 0 次项对应的系数。所以,可见变量的 Log Likelihood Function
为:
 Log Likelihood Function =1NvlogP(v) \text { Log Likelihood Function }=\frac{1}{N} \sum_{v} \log P(v)
实际上这个 N1_{N}^{1} 是一个常数,要不要都可以。那么梯度的表达公式为:
logP(v)wji=1P(v)P(v)wji=1P(v)hP(v,h)wji=1P(v)hP(v,h)wji \frac{\partial \log P(v)}{\partial w_{j i}}=\frac{1}{P(v)} \frac{\partial P(v)}{\partial w_{j i}}=\frac{1}{P(v)} \frac{\partial \sum_{h} P(v, h)}{\partial w_{j i}}=\frac{1}{P(v)} \frac{\sum_{h} \partial P(v, h)}{\partial w_{j i}}
P(v)P(v)hh 变量没什么关系,所以,可以放到求和符号里面:
1P(v)hP(v,h)wji=hP(v,h)P(v)wji \frac{1}{P(v)} \frac{\sum_{h} \partial P(v, h)}{\partial w_{j i}}=\sum_{h} \frac{\partial P(v, h)}{P(v) \partial w_{j i}}
根据贝叶斯公式可得 P(v,h)=P(v)P(hv)P(v, h)=P(v) P(h | v) 。所以, log\log 似然梯度为:
hP(hv)P(h,v)P(v,h)wji \sum_{h} \frac{P(h | v)}{P(h, v)} \frac{\partial P(v, h)}{\partial w_{j i}}
P(v,h)=P(S),P(v, h)=P(S), 所以梯度表达为:
hP(hv)1P(S)P(S)wji \sum_{h} P(h | v) \frac{1}{P(S)} \frac{\partial P(S)}{\partial w_{j i}}
P(S)=kP(SkSj:j<k)P(S)=\prod_{k} P\left(S_{k} | S_{j: j<k}\right) 。而在 ,P(S)=kP(SkSj:j<k), P(S)=\prod_{k} P\left(S_{k} | S_{j: j<k}\right) 中只有一项是和 wjiw_{j i} 相关的。只有当k=i,k=i, 才会对应 wji,w_{j i}, 所以只有一项和 wjiw_{j i} 相关。那么,梯度进一步推导为:
hP(hv)1P(S)P(S)wji=hP(hv)1kP(SkSj:j<k)P(SiSj:j<i)kiP(SkSj:j<k)wji=hP(hv)1P(SiSj:j<i)kiP(SkSj:j<k)kiP(SkSj:j<k)P(SiSj:j<i)wji=hP(hv)1P(SiSj:j<i)P(SiSj:j<i)wji \begin{aligned} \sum_{h} P(h | v) \frac{1}{P(S)} \frac{\partial P(S)}{\partial w_{j i}} &=\sum_{h} P(h | v) \frac{1}{\prod_{k} P\left(S_{k} | S_{j: j<k}\right)} \frac{\partial P\left(S_{i} | S_{j: j<i}\right) \prod_{k \neq i} P\left(S_{k} | S_{j: j<k}\right)}{\partial w_{j i}} \\ &=\sum_{h} P(h | v) \frac{1}{P\left(S_{i} | S_{j: j<i}\right) \prod_{k \neq i} P\left(S_{k} | S_{j: j<k}\right)} \frac{\prod_{k \neq i} P\left(S_{k} | S_{j: j<k}\right) \partial P\left(S_{i} | S_{j: j<i}\right)}{\partial w_{j i}} \\ &=\sum_{h} P(h | v) \frac{1}{P\left(S_{i} | S_{j: j<i}\right)} \frac{\partial P\left(S_{i} | S_{j: j<i}\right)}{\partial w_{j i}} \end{aligned}
P(SiSj:j<i)=σ(Sij<iwjiSj)P\left(S_{i} | S_{j: j<i}\right)=\sigma\left(S_{i}^{*} \sum_{j<i} w_{j i} S_{j}\right) 。并且. Sigmoid 成数有一个很好的性质:
σ(x)=ex(1+ex)2=11+exex1+ex=σ(x)(1σ(x))=σ(x)σ(x) \sigma^{\prime}(x)=\frac{e^{-x}}{\left(1+e^{-x}\right)^{2}}=\frac{1}{1+e^{-x}} \cdot \frac{e^{-x}}{1+e^{-x}}=\sigma(x)(1-\sigma(x))=\sigma(x) \sigma(-x)
而为了方便区分,后面在σσ 函数中用kk 来表示jj(这里老师直接在最后说的,我仔细回想时有点晕,我提前就换过来了,希望可以帮助到同学们)。那么 ,σ(Sik<iwkiSk)wji=SiSj,, \frac{\partial \sigma\left(S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right)}{\partial w_{j i}}=S_{i}^{*} S_{j}, 所以
hP(hv)1P(SiSk:k<i)P(SiSk:k<i)wji=hP(hv)1σ(Sik<iwkiSk)σ(Sik<iwkiSk)σ(Sik<iwkiSk)SiSj=hP(hv)σ(Sik<iwkiSk)SiSj \begin{aligned} \sum_{h} P(h | v) \frac{1}{P\left(S_{i} | S_{k: k<i}\right)} \frac{\partial P\left(S_{i} | S_{k: k<i}\right)}{\partial w_{j i}} &=\sum_{h} P(h | v) \frac{1}{\sigma\left(S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right)} \sigma\left(S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right) \sigma\left(-S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right) S_{i}^{*} S_{j} \\ &=\sum_{h} P(h | v) \sigma\left(-S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right) S_{i}^{*} S_{j} \end{aligned}
刚刚求得的结果总结一下为:
logP(v)wji=hP(hv)σ(Sik<iwkiSk)SiSj \frac{\partial \log P(v)}{\partial w_{j i}}=\sum_{h} P(h | v) \sigma\left(-S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right) S_{i}^{*} S_{j}
那么最终 log Likelihood Function Gradient 的结果为:
wjivlogP(v)=vhP(hv)σ(Sik<iwkiSk)SiSj \frac{\partial}{\partial w_{j i}} \sum_{v} \log P(v)=\sum_{v} \sum_{h} P(h | v) \sigma\left(-S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right) S_{i}^{*} S_{j}
P(hv)P(h | v) 可以被写作 P(h,vv)=P(Sv)P(h, v | v)=P(S | v) 。所ル ,vhP(hv)=SP(Sv), \sum_{v} \sum_{h} P(h | v)=\sum_{S} P(S | v) 。那么,梯度可以写为:
wjivlogP(v)=SP(Sv)σ(Sik<iwkiSk)SiSj=E(v,h)P(Sv),vPdate [σ(Sik<iwkiSk)SiSj] \begin{aligned} \frac{\partial}{\partial w_{j i}} \sum_{v} \log P(v) &=\sum_{S} P(S | v) \sigma\left(-S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right) S_{i}^{*} S_{j} \\ &=\mathbb{E}_{(v, h) \sim P(S | v), v \sim P_{\text {date }}}\left[\sigma\left(-S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right) S_{i}^{*} S_{j}\right] \end{aligned}
其中, SiS_{i} 代表的是第 ii 个节点的随机变量,这就是 Neal 提出鸡 Sigmoid Belief Network 的 Learning Rule。在学习的梯度迭代的过程中,是很依赖后验分布的。所以,如何把 P(Sv)\sum P(S|v) 求出来是个大问题,后验概率分布非常的重要,但是这是求不出来的。在观测变量已知的情况下,由于D-Separation中的Head to Head 问题,导致所有节点之间都是有联系的,没有条件独立性,关系太复杂了。所以,P(Sv)\sum P(S|v)过于复杂,无法之间求解。Neal 提出的这种方法用MCMC 来近似计算P(Sv)P(S|v) 很显然只适合于小规模的图,一旦复杂起来就会出现Mixing time 过长的问题,根本就不work。

3.1 小结

我们在这一小节中,讲述了Neal 提出来的learning rule,说白了就是如何使Log Likelihood Function最大化,那么就要求它的梯度。梯度的表达式,为一个关于后验的期望,由D-Separation 原则可知,后验分布过于复杂,无法求解。用MCMC 来近似计算,然而这样的方法只适合于小规模的图,一旦复杂起来就会出现Mixing time 过长的问题。所以,需要寻找新的方法。

4 Wake-Sleep Algorithm

小编在理解这个算法的过程中是有点艰辛的,主要是小编第一次听的时候,没有get 到这个算法的点。后来经常长时间的思考,翻阅了不少其他的资料才总算找到一点感觉。
通过第三节的分析,看到了Neal 提出的Learning Rule,并不work。因为有向图的explain away导致的,变量之间交织严重,无法分解,所以后验分布P(Sv)P(S|v) 根本就算不出来。所以,只能用MCMC去近似,而MCMC 只能处理小规模的图模型,大规模的图模型会遇到Mixing Time 过长的问题。那么,我们的目标很明确,就是寻找更好的办法去近似后验分布。新的近似方法有下列几种思路,这里
做简单的介绍:

  1. 平均场理论:因为后验分布面临的最大困难就是,变量无法分解。那么,平均场理论假设后验可以分解,不就把这个问题解决了。假设q(hv)=i=1Mqiq(h|v) =\prod_{i=1}^Mq_i,将这个等式代入进去,会得到一个迭代式,也被称为“不动点方程”。在求解的时候,先固定住其他的维度,一次只求解一维,依次把q1,q2,,qM{q_1, q_2, · · · , q_M} 给求出来。一直这样去迭代,直到最后把整个值求出来。
    这种方式比较耗时,因为前面我们讲到了,求后验很大程度上是为Learning 服务的,Learning 本身用的是梯度上升或下降算法,所以这里有一个循环。在梯度下降的每一步都要求后验,后验在平均场理论下用一个不动点方程去迭代近似,实际上不动点方程的求解过程就是一个坐标上升。而每一次坐标上升,又有一个迭代,依次求解q1,q2,,qM{q_1, q_2, · · · , q_M} 。所以说,这样就有三个迭代嵌套在一起,所有非常的耗时,计算很困难。
  2. Wake-Sleep Algorithm: 既然,平均场理论的计算仍然很耗时。所以,Hinton 在1995 年,提出了用神经网络取近似后验分布的方法。它把后验分布看成是一个函数,而不是一个分布,我们知道神经网络理论上可以拟合任意的一个函数。所以,这属于学习近似推断的思想,后验分布是学习出来的,那么具体是怎么做的呢?请看下文。

4.1 Wake-Sleep Algorithm 主要思想

在Learning 的过程中,就是为了求得ww。假设每一个weight 都有一个反向的weight,如下图所示:
26 Sigmoid信念网络
正向的箭头为黑色的,代表正向的权重,表示为Generative Connection;反向的箭头为蓝色的,代表反向的权重,表示为Recognization Connect。每一个wjiw_{ji} 都对应一个rjir_{ji}wjiw_{ji}是模型中本来就存在的,而rjir_{ji}是本来并不存在的,是我们假设它存在的。
算法可以分为两个流程:

  1. Wake phase: 这是一个从底向上的过程,根据有向图中D-Separation 中的Tail to Tail 原则,可以看到,bottom to up 这样采样,所有的节点都是条件独立的,计算起来非常简单。
    (a) 从Bottom to up 的次序来采样**来得到每一层的样本。同样,还是假设每一个节点SiS_i 是二值分布,节点之间的概率关系,仍然和Sigmoid 函数相关。
    (b) 有了样本之后,那就好办了。我们可以拿这些样本去训练Generative Connection,也就是求ww
  2. Sleep phase: 这是一个从上往下的过程。
    (a) 从上往下来采样以得到各个节点的样本,有向图的采样非常简单。那么,这样从上往下进行采样,得到h,vh, v 的样本都是虚拟出来的。因为,没有把vv 当成是可观测节点,所有不存在explain away 的问题。和Wake phase 很大的不同点就在于,Wake phase 是根据真实的数据vv 衍生出来的。
    (b) 获得了样本之后,我们就需要去学习Recognization Connection,也就是求rr

这并不是一个非常严谨的算法,我们叫它启发式算法,说是启发式算法,我们就已经承认了它并没有那么严密。他是通过引入了一个额外的Recognization Connection 去近似一个后验分布。用一个简单分布q(hv)q(h|v) 去近似后验分布p(hv)p(h|v)。前面,我们提到了可以把后验分布看成是函数,那么q(hv)q(h|v)这个函数的参数就是r。如果,我们将模型看成是一神经网络的话,q(hv)q(h|v) 就是一个随机的网络。如何我们将后验分布看成是一个函数的话,直接包装成一个黑箱就避免了复杂的分解过程。
老师在这里指出来,讲解醒眠算法的原因是,它虽然精度不高,但是非常有启发性,后面将讲述的很多算法,都可以很醒眠算法进行类比,从而得到启发。这里讲完,大家对醒眠算法的做法有了初步的了解,但是为什么这样做,一定还是有点懵逼的。下一小节,我们看看w 和r 是怎么learning 到的,从而挖掘一下其背后的思想。

4.2 w 和r 的Learning

w 和r 的Learning 过程,仍然是像之前一样使用梯度上升的方法来max Likelihood function?如果不是,那怎么操作?和KL Divergence 之间又有什么联系?这就是这一小节将要解决的问题。
主要想法就是构建一个Recognization Connection 去近似后验分布p(h|v)。聪明的同学已经观测到了,如果采用蓝色的箭头,bottom to up 这样进行采样,那么根据D-Separation 中的Tail to Tail,父亲节点已知的情况下,子节点都是相互独立的,那么概率图模型就是可分解的了。那么,计算就可以被简化了,我们用一个可分解的后验分布去近似一个不可分解的后验分布。
很显然,这样做,精度的误差是很大的,实际上week-sleep 算法追求的不是精度而是效率,什么意思呢?用一个可分解的后验分布去近似一个不可分解的后验分布,计算量肯定会变小很多。

那么,接下来给出两个 model 的模型表示:
Generative Model: Pθ(v,h),θ=wP_{\theta}(v, h), \theta=w
Recognization Model: Qϕ(hv),ϕ=rQ_{\phi}(h | v), \phi=r_{\circ}
下一步,要求解的就是,这么 Learning 过程怎么 Learn? 目标函数是什么?

4.2.1 Wake phase

简单的说。第一步,首先通过 bottom up 生成样本; 第二步,再通过这些样本来进行 Learning Generative Model, 求 θ(w)\theta(w) 。Wake phase 就是 bottom to up 生成样本,利用样本从上往下(图1) 来学习 Pθ(v,h)P_{\theta}(v, h) 单参数。样本来自 bottom to up 的过程,即为 Qϕ(hv)Q_{\phi}(h | v) 中采样得到的,Learning 可以理解为使样本使模型的值最大。也就是在 Qϕ(hv)Q_{\phi}(h | v) 得到的样本下 Pθ(v,h)P_{\theta}(v, h) 的值最大。所以目标函 数可V格写做:
EQϕ(hv)[logPθ(v,h)]1Ni=1NlogPθ(v,h) \mathbb{E}_{Q_{\phi}(h | v)}\left[\log P_{\theta}(v, h)\right] \approx \frac{1}{N} \sum_{i=1}^{N} \log P_{\theta}(v, h)
在求解 θ\theta 时,假设 ϕ\phi 是已知的(因为已经从这个分布中采到了样本):
θ^=argmaxθEQϕ(hv)[logPθ(v,h)] \hat{\theta}=\arg \max _{\theta} \mathbb{E}_{Q_{\phi}(h | v)}\left[\log P_{\theta}(v, h)\right]
ϕ\phi 初始是一个随机的分布。
注意到,前面有讲过近似推断的求后验的方法,这里做一个类比。
logP(X)=ELBO+KL(qp)ELBO=L=Eq(hv)[logp(h,y)q(hv)]=Eq(hv)[logp(h,v)]+H(q(hv)) \begin{array}{l} \log P(X)=\mathrm{ELBO}+\mathbb{K L}(q \| p) \\ \mathrm{ELBO}=\mathcal{L}=\mathbb{E}_{q(h | v)}\left[\log \frac{p(h, y)}{q(h | v)}\right]=\mathbb{E}_{q(h | v)}[\log p(h, v)]+\mathrm{H}(q(h | v)) \end{array}
实际上 EQϕ(hv)[logPθ(v,h)]\mathbb{E}_{Q_{\phi}(h | v)}\left[\log P_{\theta}(v, h)\right] 就是一个 ELBO,\mathrm{ELBO}, 因为当 QϕQ_{\phi} 是固定的情况下, H(Qϕ(hv))=0,H\left(Q_{\phi}(h | v)\right)=0, 那么, θ^=argmaxθL(θ)\hat{\theta}=\arg \max _{\theta} \mathcal{L}(\theta) 。这个优化过程可以等价于优化:
KL(Qϕ(hv)Pθ(hv))      (23) \mathrm{KL}\left(Q_{\phi}(h | v) \| P_{\theta}(h | v)\right) \ \ \ \ \ \ (23)

4.2.2 Sleep phase

防止大家忘记,在这里给出一个详细的推导。前面过程都是一样的,不再做过多的描述,目标函数为:
ϕ^=argmaxϕElogPθ(v,h)[Qϕ(hv)], fixed  \hat{\phi}=\arg \max _{\phi} \mathbb{E}_{\log P_{\theta}(v, h)}\left[Q_{\phi}(h | v)\right], \quad \text { fixed }
在推导过程中遇到常数,添加和減少都是没有关系的。那么:
ϕ^=argmaxϕEPθ(v,h)[Qϕ(hv)]argmaxϕEPθ(v,h)[logQϕ(hv)]=argmaxϕPθ(v,h)logQϕ(hv)dh=argmaxϕPθ(v)Pθ(hv)logQϕ(hv)dh \begin{aligned} \hat{\phi} &=\arg \max _{\phi} \mathbb{E}_{P_{\theta}(v, h)}\left[Q_{\phi}(h | v)\right] \Longleftrightarrow \arg \max _{\phi} \mathbb{E}_{P_{\theta}(v, h)}\left[\log Q_{\phi}(h | v)\right] \\ &=\arg \max _{\phi} \int P_{\theta}(v, h) \log Q_{\phi}(h | v) d h \\ &=\arg \max _{\phi} \int P_{\theta}(v) P_{\theta}(h | v) \log Q_{\phi}(h | v) d h \end{aligned}
这里的 Pθ(v)P_{\theta}(v)ϕ\phihh 都没有关系,可以看成是一个常数,所以可以直接忽略掉:
ϕ^=argmaxϕPθ(hv)logQϕ(hv)dh \hat{\phi}=\arg \max _{\phi} \int P_{\theta}(h | v) \log Q_{\phi}(h | v) d h
推导到这怎么接着进行呢?观察到因为 θ\theta 是已知的,所以 Pθ(hv)P_{\theta}(h | v)ϕ\phi 没有关系。那么:
ϕ^=argmaxϕPθ(hv)logQϕ(hv)dh=argmaxϕPθ(hv)logQϕ(hv)Pθ(hv)dh=argmaxϕKL(Pθ(hv)Qϕ(hv))=argminϕKL(Pθ(hv)Qϕ(hv)) \begin{aligned} \hat{\phi} &=\arg \max _{\phi} \int P_{\theta}(h | v) \log Q_{\phi}(h | v) d h \\ &=\arg \max _{\phi} \int P_{\theta}(h | v) \log \frac{Q_{\phi}(h | v)}{P_{\theta}(h | v)} d h \\ &=\arg \max _{\phi}-\operatorname{KL}\left(P_{\theta}(h | v) \| Q_{\phi}(h | v)\right) \\ &=\arg \min _{\phi} \operatorname{KL}\left(P_{\theta}(h | v) \| Q_{\phi}(h | v)\right) \end{aligned}
通过以上的推导,可以证明,确实可以将目标函数看成是一个 ELBO,从而转换为求 KL Divergence 的最小化。按照同样的方法,得到公式 (23)。

4.2.3 结论分析

通过上述的分析,看到 Wake phase 和 Sleep phase 中的目标勁数,分别为:KL (Qϕ(hv)Pθ(hv))\left(Q_{\phi}(h | v) \| P_{\theta}(h | v)\right) 和 KL( Pθ(hv)Qϕ(hv))\left.P_{\theta}(h | v) \| Q_{\phi}(h | v)\right) 。两个过程求得的 KL 散度是相反的,有点基础的同学应该知道 KL 散度不 对称,不是・个距离。
两个过程的目标函数不一致,所以这是一个启发性算法,并不可以保证收敛。Sleep 过程,可以看成不清醒,所以目标函数都搞错了。Sleep 样本是从Generative Connect 过程中采样出来的,而Model是对数据的一种假设。个人对算法的理解请看总结。

5 总结

本章节的思路其实和前面的章节都很类似,实际上有的同学已经有感觉了,这个讲解的过程就是算法的孕育和成长的过程。出现了一个问题,这个问题之前的算法无法有效的解决,针对这个问题设计一个算法,这个算法可以有效的改善这个问题的求解。这个算法在求解的过程中又遇到了什么样的问题,我们如何去解决这个问题,这就是一个算法的发展过程。

首先是讲解了Sigmoid Belief Network 的思想来源,将无向图变成有向图的结构则有更好的因果(causal) 形式,其中未观察变量被看作观察变量发生的原因。然后介绍了模型的表示方法。紧接着在模型求解的过程中,发现由于D-Separation 中的Head to Head 问题,会造成节点之间的关系复杂,无法用条件独立性分解,也就是Explain away 现象。这样后验分布的精确计算是intractable 的。所以,Neal 提出了基于MCMC 的求解方法,但是MCMC 只能求解小规模的图,大规模的图中会出现Mixing time 过长的问题,根本就不work。

这时诞生了Wake-Sleep 算法来近似推断,其主要思想就是用一个简单的分布来近似后验分布。为了解决Explain away 现象,采用的是反过来求的思路,将Head to Head 变成Tail to Tail 就可以解决这个问题了。然后两者相互迭代,相互利用数据,来使两者的数据慢慢的逼近,这是不是有点像GAN的思想,实际上GAN 的思想就有借鉴于Wake-Sleep 算法。但是,因为KL 散度并不是一个距离,所以Wake-Sleep 算法两个过程的目标函数是不一致的,算法并不收敛。这个算法是启发式的算法,而且很重要,后面很多算法的思想都可以和Wake-Sleep 算法进行对比。