26 Sigmoid信念网络

探讨SigmoidBeliefNetwork的原理与应用,解析Neal的LearningRule及其局限性。介绍Wake-Sleep算法作为近似推断的有效手段,解决大规模图模型的Mixingtime问题。
摘要由CSDN通过智能技术生成

1 Background

1.1 什么是Sigmoid Belief Network

这一节将要学习的是Sigmoid Belief Network。首先来想一想这个名字是怎么来的,其中Belief 就等价于Bayesian Network(俗称有向图),而Sigmoid 指的是Sigmoid Function:
σ ( x ) = 1 1 + exp ⁡ − x \sigma(x)=\frac{1}{1+\exp -x} σ(x)=1+expx1
表示图中的节点都是服从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 , h exp ⁡ { − E ( v , h ) } P(v, h)=\frac{\exp \{-\mathrm{E}(v, h)\}}{\sum_{v, h} \exp \{-\mathrm{E}(v, h)\}} P(v,h)=v,hexp{E(v,h)}exp{E(v,h)}
而能量函数为:
E ( v , h ) = − ∑ i α i v i − ∑ j β j h j − ∑ i , j v i w i j h j \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} E(v,h)=iαivijβjhji,jviwijhj
通过调整权值可改变概率。有了联合分布概率,从而很容易得到观察变量的概率:
P ( v , h ) = ∑ h exp ⁡ { − E ( v , h ) } ∑ v , h exp ⁡ exp ⁡ { − E ( v , h ) } P(v, h)=\frac{\sum_{h} \exp \{-\mathrm{E}(v, h)\}}{\sum_{v, h} \exp \exp \{-\mathrm{E}(v, h)\}} P(v,h)=v,hexpexp{E(v,h)}hexp{E(v,h)}
因为我们观测到的数据只有可观测变量,所以学习调整权值的目的就是极大化观察变量的似然函数 − log ⁡ p ( V ) -\log p(V) logp(V)
Sigmoid Belief Network 将无向图变成有向图的结构则有更好的因果(causal) 形式,其中未
观察变量被看作观察变量发生的原因。

1.2 Sigmoid Belief Network的模型表示

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

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,在 v v v 节点被观测的情况下, h h h 中的节点都不是条件独立的,他们之间都是相关的。那么, P ( h ∣ v ) P(h|v) P(hv) 就很难被求出来,因为 h h h 之间的节点相互影响,有相交解释。
“近似推断”那一节我们已经讲过了,Learning 中是需要求后验的,这里再简单描述一下。Learning的思想是令先验的Log Likelihood Function 最大化,通常使用梯度上升法来解决,在求解梯度的过程中,不可避免的要求后验,因为这个梯度的计算结果就是一个关于后验分布的期望,不可避免的要从后验中采样,因为后验很复杂不能直接采样,所以要使用MCMC 从后验中采样来求近似期望。
下面我们将求解Log Likelihood Gradient 来让大家有一个感性的认识。大佬这里有一句话如醍醐灌顶,推导的目的是看看具体的过程,然后对结论有一个感性的认识,对结论的来龙去脉有更好的理解,主要目的是辅助我们理解结论,而不是为了推导而推导。

3 Log Likelihood Function Gradient

假设联合概率分布为:
P ( S ) = ∏ i P ( S i ∣ S j : j < i ) P(S)=\prod_{i} P\left(S_{i} | S_{j: j<i}\right) P(S)=iP(SiSj:j<i)
而,
{ P ( S i ∣ S j : j < i ) = σ ( S i ∗ ∑ j < i w j i S j ) S i ∗ = 2 S i − 1 \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. {P(SiSj:j<i)=σ(Sij<iwjiSj)Si=2Si1
实际上,应该是 σ ( S ∗ ∑ j < i w j i S i + b i ) , \sigma\left(S * \sum_{j<i} w_{j i} S_{i}+b_{i}\right), σ(Sj<iwjiSi+bi), 还有一个偏置,了解一点机器学习的同学都知道,这个偏置 是可以放到权值里的,因为可以看成是 0 次项对应的系数。所以,可见变量的 Log Likelihood Function
为:
 Log Likelihood Function  = 1 N ∑ v log ⁡ P ( v ) \text { Log Likelihood Function }=\frac{1}{N} \sum_{v} \log P(v)  Log Likelihood Function =N1vlogP(v)
实际上这个 N 1 _{N}^{1} N1 是一个常数,要不要都可以。那么梯度的表达公式为:
∂ log ⁡ P ( v ) ∂ w j i = 1 P ( v ) ∂ P ( v ) ∂ w j i = 1 P ( v ) ∂ ∑ h P ( v , h ) ∂ w j i = 1 P ( v ) ∑ h ∂ P ( v , h ) ∂ w j i \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}} wjilogP(v)=P(v)1wjiP(v)=P(v)1wjihP(v,h)=P(v)1wjihP(v,h)
P ( v ) P(v) P(v) h h h 变量没什么关系,所以,可以放到求和符号里面:
1 P ( v ) ∑ h ∂ P ( v , h ) ∂ w j i = ∑ h ∂ P ( v , h ) P ( v ) ∂ w j i \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)1wjihP(v,h)=hP(v)wjiP(v,h)
根据贝叶斯公式可得 P ( v , h ) = P ( v ) P ( h ∣ v ) P(v, h)=P(v) P(h | v) P(v,h)=P(v)P(hv) 。所以, log ⁡ \log log 似然梯度为:
∑ h P ( h ∣ v ) P ( h , v ) ∂ P ( v , h ) ∂ w j i \sum_{h} \frac{P(h | v)}{P(h, v)} \frac{\partial P(v, h)}{\partial w_{j i}} hP(h,v)P(hv)wjiP(v,h)
P ( v , h ) = P ( S ) , P(v, h)=P(S), P(v,h)=P(S), 所以梯度表达为:
∑ h P ( h ∣ v ) 1 P ( S ) ∂ P ( S ) ∂ w j i \sum_{h} P(h | v) \frac{1}{P(S)} \frac{\partial P(S)}{\partial w_{j i}} hP(hv)P(S)1wjiP(S)
P ( S ) = ∏ k P ( S k ∣ S j : j < k ) P(S)=\prod_{k} P\left(S_{k} | S_{j: j<k}\right) P(S)=kP(SkSj:j<k) 。而在 , P ( S ) = ∏ k P ( S k ∣ S j : j < k ) , P(S)=\prod_{k} P\left(S_{k} | S_{j: j<k}\right) ,P(S)=kP(SkSj:j<k) 中只有一项是和 w j i w_{j i} wji 相关的。只有当 k = i , k=i, k=i, 才会对应 w j i , w_{j i}, wji, 所以只有一项和 w j i w_{j i} wji 相关。那么,梯度进一步推导为:
∑ h P ( h ∣ v ) 1 P ( S ) ∂ P ( S ) ∂ w j i = ∑ h P ( h ∣ v ) 1 ∏ k P ( S k ∣ S j : j < k ) ∂ P ( S i ∣ S j : j < i ) ∏ k ≠ i P ( S k ∣ S j : j < k ) ∂ w j i = ∑ h P ( h ∣ v ) 1 P ( S i ∣ S j : j < i ) ∏ k ≠ i P ( S k ∣ S j : j < k ) ∏ k ≠ i P ( S k ∣ S j : j < k ) ∂ P ( S i ∣ S j : j < i ) ∂ w j i = ∑ h P ( h ∣ v ) 1 P ( S i ∣ S j : j < i ) ∂ P ( S i ∣ S j : j < i ) ∂ w j i \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} hP(hv)P(S)1wjiP(S)=hP(hv)kP(SkSj:j<k)1wjiP(SiSj:j<i)k=iP(SkSj:j<k)=hP(hv)P(SiSj:j<i)k=iP(SkSj:j<k)1wjik=iP(SkSj:j<k)P(SiSj:j<i)=hP(hv)P(SiSj:j<i)1wjiP(SiSj:j<i)
P ( S i ∣ S j : j < i ) = σ ( S i ∗ ∑ j < i w j i S j ) P\left(S_{i} | S_{j: j<i}\right)=\sigma\left(S_{i}^{*} \sum_{j<i} w_{j i} S_{j}\right) P(SiSj:j<i)=σ(Sij<iwjiSj) 。并且. Sigmoid 成数有一个很好的性质:
σ ′ ( x ) = e − x ( 1 + e − x ) 2 = 1 1 + e − x ⋅ e − x 1 + e − x = σ ( 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) σ(x)=(1+ex)2ex=1+ex11+exex=σ(x)(1σ(x))=σ(x)σ(x)
而为了方便区分,后面在 σ σ σ 函数中用 k k k 来表示 j j j(这里老师直接在最后说的,我仔细回想时有点晕,我提前就换过来了,希望可以帮助到同学们)。那么 , ∂ σ ( S i ∗ ∑ k < i w k i S k ) ∂ w j i = S i ∗ S j , , \frac{\partial \sigma\left(S_{i}^{*} \sum_{k<i} w_{k i} S_{k}\right)}{\partial w_{j i}}=S_{i}^{*} S_{j}, ,wjiσ(Sik<iwkiSk)=SiSj, 所以
∑ h P ( h ∣ v ) 1 P ( S i ∣ S k : k < i ) ∂ P ( S i ∣ S k : k < i ) ∂ w j i = ∑ h P ( h ∣ v ) 1 σ ( S i ∗ ∑ k < i w k i S k ) σ ( S i ∗ ∑ k < i w k i S k ) σ ( − S i ∗ ∑ k < i w k i S k ) S i ∗ S j = ∑ h P ( h ∣ v ) σ ( − S i ∗ ∑ k < i w k i S k ) S i ∗ S j \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} hP(hv)P(SiSk:k<i)1wjiP(SiSk:k<i)=hP(hv)σ(Sik<iwkiSk)1σ(Sik<iwkiSk)σ(Sik<iwkiSk)SiSj=hP(hv)σ(Sik<iwkiSk)SiSj
刚刚求得的结果总结一下为:
∂ log ⁡ P ( v ) ∂ w j i = ∑ h P ( h ∣ v ) σ ( − S i ∗ ∑ k < i w k i S k ) S i ∗ S j \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} wjilogP(v)=hP(hv)σ(Sik<iwkiSk)SiSj
那么最终 log Likelihood Function Gradient 的结果为:
∂ ∂ w j i ∑ v log ⁡ P ( v ) = ∑ v ∑ h P ( h ∣ v ) σ ( − S i ∗ ∑ k < i w k i S k ) S i ∗ S j \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} wjivlogP(v)=vhP(hv)σ(Sik<iwkiSk)SiSj
P ( h ∣ v ) P(h | v) P(hv) 可以被写作 P ( h , v ∣ v ) = P ( S ∣ v ) P(h, v | v)=P(S | v) P(h,vv)=P(Sv) 。所ル , ∑ v ∑ h P ( h ∣ v ) = ∑ S P ( S ∣ v ) , \sum_{v} \sum_{h} P(h | v)=\sum_{S} P(S | v) ,vhP(hv)=SP(Sv) 。那么,梯度可以写为:
∂ ∂ w j i ∑ v log ⁡ P ( v ) = ∑ S P ( S ∣ v ) σ ( − S i ∗ ∑ k < i w k i S k ) S i ∗ S j = E ( v , h ) ∼ P ( S ∣ v ) , v ∼ P date  [ σ ( − S i ∗ ∑ k < i w k i S k ) S i ∗ S j ] \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} wjivlogP(v)=SP(Sv)σ(Sik<iwkiSk)SiSj=E(v,h)P(Sv),vPdate [σ(Sik<iwkiSk)SiSj]
其中, S i S_{i} Si 代表的是第 i i i 个节点的随机变量,这就是 Neal 提出鸡 Sigmoid Belief Network 的 Learning Rule。在学习的梯度迭代的过程中,是很依赖后验分布的。所以,如何把 ∑ P ( S ∣ v ) \sum P(S|v) P(Sv) 求出来是个大问题,后验概率分布非常的重要,但是这是求不出来的。在观测变量已知的情况下,由于D-Separation中的Head to Head 问题,导致所有节点之间都是有联系的,没有条件独立性,关系太复杂了。所以, ∑ P ( S ∣ v ) \sum P(S|v) P(Sv)过于复杂,无法之间求解。Neal 提出的这种方法用MCMC 来近似计算 P ( S ∣ v ) P(S|v) P(Sv) 很显然只适合于小规模的图,一旦复杂起来就会出现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 ( S ∣ v ) P(S|v) P(Sv) 根本就算不出来。所以,只能用MCMC去近似,而MCMC 只能处理小规模的图模型,大规模的图模型会遇到Mixing Time 过长的问题。那么,我们的目标很明确,就是寻找更好的办法去近似后验分布。新的近似方法有下列几种思路,这里
做简单的介绍:

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

4.1 Wake-Sleep Algorithm 主要思想

在Learning 的过程中,就是为了求得 w w w。假设每一个weight 都有一个反向的weight,如下图所示:
在这里插入图片描述
正向的箭头为黑色的,代表正向的权重,表示为Generative Connection;反向的箭头为蓝色的,代表反向的权重,表示为Recognization Connect。每一个 w j i w_{ji} wji 都对应一个 r j i r_{ji} rji w j i w_{ji} wji是模型中本来就存在的,而 r j i r_{ji} rji是本来并不存在的,是我们假设它存在的。
算法可以分为两个流程:

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

这并不是一个非常严谨的算法,我们叫它启发式算法,说是启发式算法,我们就已经承认了它并没有那么严密。他是通过引入了一个额外的Recognization Connection 去近似一个后验分布。用一个简单分布 q ( h ∣ v ) q(h|v) q(hv) 去近似后验分布 p ( h ∣ v ) p(h|v) p(hv)。前面,我们提到了可以把后验分布看成是函数,那么 q ( h ∣ v ) q(h|v) q(hv)这个函数的参数就是r。如果,我们将模型看成是一神经网络的话, q ( h ∣ v ) q(h|v) q(hv) 就是一个随机的网络。如何我们将后验分布看成是一个函数的话,直接包装成一个黑箱就避免了复杂的分解过程。
老师在这里指出来,讲解醒眠算法的原因是,它虽然精度不高,但是非常有启发性,后面将讲述的很多算法,都可以很醒眠算法进行类比,从而得到启发。这里讲完,大家对醒眠算法的做法有了初步的了解,但是为什么这样做,一定还是有点懵逼的。下一小节,我们看看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 ) , θ = w P_{\theta}(v, h), \theta=w Pθ(v,h),θ=w
Recognization Model: Q ϕ ( h ∣ v ) , ϕ = r ∘ Q_{\phi}(h | v), \phi=r_{\circ} Qϕ(hv),ϕ=r
下一步,要求解的就是,这么 Learning 过程怎么 Learn? 目标函数是什么?

4.2.1 Wake phase

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

4.2.2 Sleep phase

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

4.2.3 结论分析

通过上述的分析,看到 Wake phase 和 Sleep phase 中的目标勁数,分别为:KL ( Q ϕ ( h ∣ v ) ∥ P θ ( h ∣ v ) ) \left(Q_{\phi}(h | v) \| P_{\theta}(h | v)\right) (Qϕ(hv)Pθ(hv)) 和 KL( P θ ( h ∣ v ) ∥ Q ϕ ( h ∣ v ) ) \left.P_{\theta}(h | v) \| Q_{\phi}(h | v)\right) Pθ(hv)Qϕ(hv)) 。两个过程求得的 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 算法进行对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值