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+exp−x1
表示图中的节点都是服从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∑αivi−j∑βjhj−i,j∑viwijhj
通过调整权值可改变概率。有了联合分布概率,从而很容易得到观察变量的概率:
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<i∑wjiSj)
考虑到条件独立性,完整的可以写为:
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=1∣Sj:j<i)=σ(wjiSj+wj+1iSj+1)=σ(j<i∑wjiSj)
那么很简单就可以表示
P
(
S
i
=
0
∣
S
j
:
j
<
i
)
P\left(S_{i}=0 | S_{j: j<i}\right)
P(Si=0∣Sj: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=0∣Sj: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∗=2Si−1
就可以完美的实现这个结果。所以,就可以合并起来,得到
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(Si∣Sj:j<i)=σ(Si∗∑j<iwjiSj)Si∗=2Si−1
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(h∣v) 就很难被求出来,因为
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)=i∏P(Si∣Sj: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(Si∣Sj:j<i)=σ(Si∗∑j<iwjiSj)Si∗=2Si−1
实际上,应该是
σ
(
S
∗
∑
j
<
i
w
j
i
S
i
+
b
i
)
,
\sigma\left(S * \sum_{j<i} w_{j i} S_{i}+b_{i}\right),
σ(S∗∑j<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 =N1v∑logP(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}}
∂wji∂logP(v)=P(v)1∂wji∂P(v)=P(v)1∂wji∂∑hP(v,h)=P(v)1∂wji∑h∂P(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)1∂wji∑h∂P(v,h)=h∑P(v)∂wji∂P(v,h)
根据贝叶斯公式可得
P
(
v
,
h
)
=
P
(
v
)
P
(
h
∣
v
)
P(v, h)=P(v) P(h | v)
P(v,h)=P(v)P(h∣v) 。所以,
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}}
h∑P(h,v)P(h∣v)∂wji∂P(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}}
h∑P(h∣v)P(S)1∂wji∂P(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(Sk∣Sj: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(Sk∣Sj: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}
h∑P(h∣v)P(S)1∂wji∂P(S)=h∑P(h∣v)∏kP(Sk∣Sj:j<k)1∂wji∂P(Si∣Sj:j<i)∏k=iP(Sk∣Sj:j<k)=h∑P(h∣v)P(Si∣Sj:j<i)∏k=iP(Sk∣Sj:j<k)1∂wji∏k=iP(Sk∣Sj:j<k)∂P(Si∣Sj:j<i)=h∑P(h∣v)P(Si∣Sj:j<i)1∂wji∂P(Si∣Sj: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(Si∣Sj:j<i)=σ(Si∗∑j<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+e−x)2e−x=1+e−x1⋅1+e−xe−x=σ(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∂σ(Si∗∑k<iwkiSk)=Si∗Sj, 所以
∑
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}
h∑P(h∣v)P(Si∣Sk:k<i)1∂wji∂P(Si∣Sk:k<i)=h∑P(h∣v)σ(Si∗∑k<iwkiSk)1σ(Si∗k<i∑wkiSk)σ(−Si∗k<i∑wkiSk)Si∗Sj=h∑P(h∣v)σ(−Si∗k<i∑wkiSk)Si∗Sj
刚刚求得的结果总结一下为:
∂
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}
∂wji∂logP(v)=h∑P(h∣v)σ(−Si∗k<i∑wkiSk)Si∗Sj
那么最终 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}
∂wji∂v∑logP(v)=v∑h∑P(h∣v)σ(−Si∗k<i∑wkiSk)Si∗Sj
而
P
(
h
∣
v
)
P(h | v)
P(h∣v) 可以被写作
P
(
h
,
v
∣
v
)
=
P
(
S
∣
v
)
P(h, v | v)=P(S | v)
P(h,v∣v)=P(S∣v) 。所ル
,
∑
v
∑
h
P
(
h
∣
v
)
=
∑
S
P
(
S
∣
v
)
, \sum_{v} \sum_{h} P(h | v)=\sum_{S} P(S | v)
,∑v∑hP(h∣v)=∑SP(S∣v) 。那么,梯度可以写为:
∂
∂
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}
∂wji∂v∑logP(v)=S∑P(S∣v)σ(−Si∗k<i∑wkiSk)Si∗Sj=E(v,h)∼P(S∣v),v∼Pdate [σ(−Si∗k<i∑wkiSk)Si∗Sj]
其中,
S
i
S_{i}
Si 代表的是第
i
i
i 个节点的随机变量,这就是 Neal 提出鸡 Sigmoid Belief Network 的 Learning Rule。在学习的梯度迭代的过程中,是很依赖后验分布的。所以,如何把
∑
P
(
S
∣
v
)
\sum P(S|v)
∑P(S∣v) 求出来是个大问题,后验概率分布非常的重要,但是这是求不出来的。在观测变量已知的情况下,由于D-Separation中的Head to Head 问题,导致所有节点之间都是有联系的,没有条件独立性,关系太复杂了。所以,
∑
P
(
S
∣
v
)
\sum P(S|v)
∑P(S∣v)过于复杂,无法之间求解。Neal 提出的这种方法用MCMC 来近似计算
P
(
S
∣
v
)
P(S|v)
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
(
S
∣
v
)
P(S|v)
P(S∣v) 根本就算不出来。所以,只能用MCMC去近似,而MCMC 只能处理小规模的图模型,大规模的图模型会遇到Mixing Time 过长的问题。那么,我们的目标很明确,就是寻找更好的办法去近似后验分布。新的近似方法有下列几种思路,这里
做简单的介绍:
- 平均场理论:因为后验分布面临的最大困难就是,变量无法分解。那么,平均场理论假设后验可以分解,不就把这个问题解决了。假设
q
(
h
∣
v
)
=
∏
i
=
1
M
q
i
q(h|v) =\prod_{i=1}^Mq_i
q(h∣v)=∏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 。所以说,这样就有三个迭代嵌套在一起,所有非常的耗时,计算很困难。 - 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是本来并不存在的,是我们假设它存在的。
算法可以分为两个流程:
- 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。 - 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(h∣v) 去近似后验分布
p
(
h
∣
v
)
p(h|v)
p(h∣v)。前面,我们提到了可以把后验分布看成是函数,那么
q
(
h
∣
v
)
q(h|v)
q(h∣v)这个函数的参数就是r。如果,我们将模型看成是一神经网络的话,
q
(
h
∣
v
)
q(h|v)
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
)
,
θ
=
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ϕ(h∣v),ϕ=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ϕ(h∣v) 中采样得到的,Learning 可以理解为使样本使模型的值最大。也就是在
Q
ϕ
(
h
∣
v
)
Q_{\phi}(h | v)
Qϕ(h∣v) 得到的样本下
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ϕ(h∣v)[logPθ(v,h)]≈N1i=1∑NlogPθ(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ϕ(h∣v)[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(q∥p)ELBO=L=Eq(h∣v)[logq(h∣v)p(h,y)]=Eq(h∣v)[logp(h,v)]+H(q(h∣v))
实际上
E
Q
ϕ
(
h
∣
v
)
[
log
P
θ
(
v
,
h
)
]
\mathbb{E}_{Q_{\phi}(h | v)}\left[\log P_{\theta}(v, h)\right]
EQϕ(h∣v)[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ϕ(h∣v))=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ϕ(h∣v)∥Pθ(h∣v)) (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ϕ(h∣v)], 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ϕ(h∣v)]⟺argϕmaxEPθ(v,h)[logQϕ(h∣v)]=argϕmax∫Pθ(v,h)logQϕ(h∣v)dh=argϕmax∫Pθ(v)Pθ(h∣v)logQϕ(h∣v)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ϕmax∫Pθ(h∣v)logQϕ(h∣v)dh
推导到这怎么接着进行呢?观察到因为
θ
\theta
θ 是已知的,所以
P
θ
(
h
∣
v
)
P_{\theta}(h | v)
Pθ(h∣v) 和
ϕ
\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ϕmax∫Pθ(h∣v)logQϕ(h∣v)dh=argϕmax∫Pθ(h∣v)logPθ(h∣v)Qϕ(h∣v)dh=argϕmax−KL(Pθ(h∣v)∥Qϕ(h∣v))=argϕminKL(Pθ(h∣v)∥Qϕ(h∣v))
通过以上的推导,可以证明,确实可以将目标函数看成是一个 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ϕ(h∣v)∥Pθ(h∣v)) 和 KL(
P
θ
(
h
∣
v
)
∥
Q
ϕ
(
h
∣
v
)
)
\left.P_{\theta}(h | v) \| Q_{\phi}(h | v)\right)
Pθ(h∣v)∥Qϕ(h∣v)) 。两个过程求得的 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 算法进行对比。