文章目录
24 直面配分函数——Confronting Partition Function
24.1 Stochastic Gradient of log-likelihood——log配分函数在随机梯度上升中的应用
为什么要使用配分函数呢?简单来说就是为了在分布太复杂无法计算的时候,帮你把困难的分布转换为简单的分布。我们也经常在MLE中使用这种方法。
假如我们此时要在MLE的Learning问题中通过梯度上升求解参数,我们有以下条件:
- 数据: X ∈ R p , { 0 , 1 } p X \in {\mathbb R}^p, {\lbrace 0, 1 \rbrace}^p X∈Rp,{0,1}p
- 分布转换: P ( X ∣ θ ) = 1 Z ( θ ) P ^ ( X ∣ θ ) , Z ( θ ) = ∫ P ^ ( X ∣ θ ) d x P(X | \theta) = \frac{1}{Z(\theta)} {\hat P}(X | \theta), Z(\theta) = \int {\hat P}(X | \theta) {\rm d}x P(X∣θ)=Z(θ)1P^(X∣θ),Z(θ)=∫P^(X∣θ)dx
我们可以将MLE的公式写成(给定条件
X
=
{
x
i
}
i
=
1
N
X = {\lbrace x_i \rbrace}_{i=1}^N
X={xi}i=1N,参数为
θ
\theta
θ):
θ
^
=
a
r
g
max
θ
P
(
X
∣
θ
)
=
a
r
g
max
θ
∏
i
=
1
N
P
(
x
i
∣
θ
)
=
a
r
g
max
θ
log
∏
i
=
1
N
P
(
x
i
∣
θ
)
=
a
r
g
max
θ
∑
i
=
1
N
l
o
g
P
(
x
i
∣
θ
)
=
a
r
g
max
θ
∑
i
=
1
N
l
o
g
P
^
(
x
i
∣
θ
)
−
N
⋅
log
Z
(
θ
)
=
a
r
g
max
θ
1
N
∑
i
=
1
N
l
o
g
P
^
(
x
i
∣
θ
)
−
⋅
log
Z
(
θ
)
⏟
L
(
θ
)
\begin{align} {\hat \theta} &= arg\max_\theta P(X|\theta) = arg\max_\theta \prod_{i=1}^N P(x_i|\theta) \\ &= arg\max_\theta \log \prod_{i=1}^N P(x_i|\theta) = arg\max_\theta \sum_{i=1}^N log P(x_i|\theta) \\ &= arg\max_\theta \sum_{i=1}^N log {\hat P}(x_i|\theta) - N \cdot \log Z(\theta) \\ &= arg\max_\theta \underbrace{ \frac{1}{N} \sum_{i=1}^N log {\hat P}(x_i|\theta) - \cdot \log Z(\theta)}_{{\mathcal L}(\theta)} \end{align}
θ^=argθmaxP(X∣θ)=argθmaxi=1∏NP(xi∣θ)=argθmaxlogi=1∏NP(xi∣θ)=argθmaxi=1∑NlogP(xi∣θ)=argθmaxi=1∑NlogP^(xi∣θ)−N⋅logZ(θ)=argθmaxL(θ)
N1i=1∑NlogP^(xi∣θ)−⋅logZ(θ)
此时我们采用梯度上升法求解的话,就需要求解梯度
∇
θ
L
(
θ
)
\nabla_\theta {\mathcal L}(\theta)
∇θL(θ),我们可以对梯度做一些数学变换,使得要求的梯度变成几部分:
∇
θ
L
(
θ
)
=
1
N
∑
i
=
1
N
∇
θ
log
P
^
(
x
i
∣
θ
)
⏟
−
∇
θ
log
Z
(
θ
)
⏟
\nabla_\theta {\mathcal L}(\theta) = \frac{1}{N} \sum_{i=1}^N \underbrace{\nabla_\theta \log {\hat P}(x_i|\theta)} - \underbrace{\nabla_\theta \log Z(\theta)}
∇θL(θ)=N1i=1∑N
∇θlogP^(xi∣θ)−
∇θlogZ(θ)
第一部分的梯度很好求,因为我们假定的
l
o
g
P
^
(
x
i
∣
θ
)
log {\hat P}(x_i|\theta)
logP^(xi∣θ)是一个简单分布,难点在右边,我们对右边进行数学变换:
∇
θ
log
Z
(
θ
)
=
1
Z
(
θ
)
∇
θ
Z
(
θ
)
=
P
(
X
∣
θ
)
P
^
(
X
∣
θ
)
∇
θ
∫
P
^
(
X
∣
θ
)
=
∫
P
(
X
∣
θ
)
P
^
(
X
∣
θ
)
∇
θ
P
^
(
X
∣
θ
)
=
∫
P
(
X
∣
θ
)
∇
θ
log
P
^
(
X
∣
θ
)
=
E
P
(
X
∣
θ
)
[
∇
θ
log
P
^
(
X
∣
θ
)
]
\begin{align} \nabla_\theta \log Z(\theta) &= \frac{1}{Z(\theta)} \nabla_\theta Z(\theta) = \frac{P(X|\theta)}{{\hat P}(X|\theta)} \nabla_\theta \int {\hat P}(X|\theta) \\ &= \int \frac{P(X|\theta)}{{\hat P}(X|\theta)} \nabla_\theta {\hat P}(X|\theta) = \int {P(X|\theta)} \nabla_\theta \log {\hat P}(X|\theta) \\ &= E_{P(X|\theta)}[\nabla_\theta \log {\hat P}(X|\theta)] \end{align}
∇θlogZ(θ)=Z(θ)1∇θZ(θ)=P^(X∣θ)P(X∣θ)∇θ∫P^(X∣θ)=∫P^(X∣θ)P(X∣θ)∇θP^(X∣θ)=∫P(X∣θ)∇θlogP^(X∣θ)=EP(X∣θ)[∇θlogP^(X∣θ)]
经过转换,我们知道
∇
θ
log
P
^
(
X
∣
θ
)
\nabla_\theta \log {\hat P}(X|\theta)
∇θlogP^(X∣θ),只要里面求得出来,且化成了期望的形式,我们就可以通过Monte Carlo方法求出近似解。若采样的数据是通过MCMC采样的且表示为
X
^
=
{
x
^
1
,
x
^
2
,
…
,
x
^
M
}
{\hat X} = {\lbrace {\hat x}_1, {\hat x}_2, \dots, {\hat x}_M \rbrace}
X^={x^1,x^2,…,x^M}具体的梯度上升公式可以写作(前半部分假设是从N个已知数据中采样出了M个):
θ
(
t
+
1
)
=
θ
(
t
)
+
η
∇
θ
L
(
θ
)
=
θ
(
t
)
+
η
(
∑
i
=
1
M
∇
θ
log
P
^
(
x
i
∣
θ
)
−
∑
i
=
1
M
∇
θ
log
P
^
(
x
^
i
∣
θ
)
)
\theta^{(t+1)} = \theta^{(t)} + \eta \nabla_\theta {\mathcal L}(\theta) = \theta^{(t)} + \eta \left( \sum_{i=1}^M \nabla_\theta \log {\hat P}(x_i|\theta) - \sum_{i=1}^M \nabla_\theta \log {\hat P}({\hat x}_i|\theta) \right)
θ(t+1)=θ(t)+η∇θL(θ)=θ(t)+η(i=1∑M∇θlogP^(xi∣θ)−i=1∑M∇θlogP^(x^i∣θ))
通过上面的介绍已经能理解求解方法了,然后我们要对这个方法做一个解释。
上面的梯度公式,其实我们可以通过变换写作:
L
(
θ
)
=
E
P
D
a
t
a
[
∇
θ
log
P
^
(
x
i
∣
θ
)
]
⏟
positive phase
−
E
P
M
o
d
e
l
[
∇
θ
log
P
^
(
X
∣
θ
)
]
⏟
negative phase
{\mathcal L}(\theta) = \underbrace{E_{P_{Data}}[\nabla_\theta \log {\hat P}(x_i|\theta)]}_{\text{positive phase}} - \underbrace{E_{P_{Model}}[\nabla_\theta \log {\hat P}(X|\theta)]}_{\text{negative phase}}
L(θ)=positive phase
EPData[∇θlogP^(xi∣θ)]−negative phase
EPModel[∇θlogP^(X∣θ)]
其中的
P
D
a
t
a
P_{Data}
PData和
P
M
o
d
e
l
P_{Model}
PModel代表什么意思呢?
- P D a t a P_{Data} PData:表示现实分布,采样的结果其实就是用到的训练数据
- P M o d e l P_{Model} PModel:表示我们构建的模型分布,可以通过MCMC进行采样
其中两项分别说明:
- 现实分布:带来的结果毋庸置疑是给分布带来积极作用的,使得结果分布在 P D a t a P_{Data} PData的高概率区域取值更大
- 模型分布:由于模型是猜测的, P M o d e l P_{Model} PModel是不准确的,所以 P M o d e l P_{Model} PModel高概率区域反而应该降低
24.2 CD——Contrastive Divergence
24.2.1 CD简述
核心思想:由于采样的mixing time可能过长,所以通过修改初始值,选择一个更快可以到达均匀分布的初始值。
具体实现:初始值直接选用 P D a t a P_{Data} PData的值。
具体情况也会使用k-CD(CD-k),k表示mcmc的mixing time具体做几步。不一定要到达均匀分布再采样,忽略这个误差。
24.2.2 CD的由来——CD Learning
从MLE来看,我们可以将公式进行一个转换:
θ
^
=
a
r
g
max
θ
∑
i
=
1
N
log
θ
(
x
i
)
=
a
r
g
max
θ
1
N
∑
i
=
1
N
log
(
x
i
;
θ
)
=
a
r
g
max
θ
E
P
d
a
t
a
[
log
P
m
o
d
e
l
(
x
i
;
θ
)
]
=
a
r
g
max
θ
∫
P
d
a
t
a
⋅
log
P
m
o
d
e
l
d
x
=
a
r
g
max
θ
∫
P
d
a
t
a
⋅
log
P
m
o
d
e
l
P
d
a
t
a
d
x
=
a
r
g
max
θ
−
K
L
(
P
d
a
t
a
∥
P
m
o
d
e
l
)
=
a
r
g
min
θ
K
L
(
P
d
a
t
a
∥
P
m
o
d
e
l
)
\begin{align} {\hat \theta} &= arg\max_{\theta} \sum_{i=1}^{N} \log_\theta(x_i) \\ &= arg\max_{\theta} \frac{1}{N} \sum_{i=1}^{N} \log(x_i;\theta) \\ &= arg\max_{\theta} E_{P_{data}} \big[ \log_{P_{model}}(x_i;\theta) \big] \\ &= arg\max_{\theta} \int P_{data} \cdot \log P_{model} {\rm d}x \\ &= arg\max_{\theta} \int P_{data} \cdot \log \frac{P_{model}}{P_{data}} {\rm d}x \\ &= arg\max_{\theta} -KL(P_{data} \Vert P_{model}) \\ &= arg\min_{\theta} KL(P_{data} \Vert P_{model}) \\ \end{align}
θ^=argθmaxi=1∑Nlogθ(xi)=argθmaxN1i=1∑Nlog(xi;θ)=argθmaxEPdata[logPmodel(xi;θ)]=argθmax∫Pdata⋅logPmodeldx=argθmax∫Pdata⋅logPdataPmodeldx=argθmax−KL(Pdata∥Pmodel)=argθminKL(Pdata∥Pmodel)
我们又假设
P
(
0
)
P^{(0)}
P(0)表示样本数据(同时也是P_{model}原始数据),
P
(
∞
)
P^{(\infty)}
P(∞)表示均匀分布的采样数据,而
P
(
k
)
P^{(k)}
P(k)表示CD-k采样出来的数据。所以我们可以写得:
θ
^
=
a
r
g
min
θ
K
L
(
P
d
a
t
a
∥
P
m
o
d
e
l
)
=
a
r
g
min
θ
K
L
(
P
(
0
)
∥
P
(
∞
)
)
{\hat \theta} = arg\min_{\theta} KL(P_{data} \Vert P_{model}) = arg\min_{\theta} KL(P^{(0)} \Vert P^{(\infty)})
θ^=argθminKL(Pdata∥Pmodel)=argθminKL(P(0)∥P(∞))
根据以上的内容,我们引入CD-k的公式:
θ
^
=
a
r
g
min
θ
[
K
L
(
P
(
0
)
∥
P
(
∞
)
)
−
K
L
(
P
(
k
)
∥
P
(
∞
)
)
]
{\hat \theta} = arg\min_{\theta} \big[ KL(P^{(0)} \Vert P^{(\infty)}) - KL(P^{(k)} \Vert P^{(\infty)}) \big]
θ^=argθmin[KL(P(0)∥P(∞))−KL(P(k)∥P(∞))]
其中
K
L
(
P
(
0
)
∥
P
(
∞
)
)
−
K
L
(
P
(
k
)
∥
P
(
∞
)
)
KL(P^{(0)} \Vert P^{(\infty)}) - KL(P^{(k)} \Vert P^{(\infty)})
KL(P(0)∥P(∞))−KL(P(k)∥P(∞))被称作Contrastive Divergence,这一部分与过去求出的梯度公式
L
(
θ
)
=
E
P
D
a
t
a
[
∇
θ
log
P
^
(
x
i
∣
θ
)
]
−
E
P
M
o
d
e
l
[
∇
θ
log
P
^
(
X
∣
θ
)
]
{\mathcal L}(\theta) = {E_{P_{Data}}[\nabla_\theta \log {\hat P}(x_i|\theta)]} - {E_{P_{Model}}[\nabla_\theta \log {\hat P}(X|\theta)]}
L(θ)=EPData[∇θlogP^(xi∣θ)]−EPModel[∇θlogP^(X∣θ)]近似。
24.3 RBM Learning
Learning问题我们已经做过很多了,无非就是通过其log-likelihood,然后通过求导得到其极值,从而求得其参数近似解。
首先回忆一下RBM中的公式是什么:
{
P
(
V
,
H
)
=
1
Z
exp
{
−
E
(
V
,
H
)
}
E
(
V
,
H
)
=
−
(
H
T
W
V
+
α
T
V
+
β
T
H
)
\begin{cases} P(V, H) = \frac{1}{Z} \exp{\lbrace - E(V, H) \rbrace} \\ E(V, H) = - {({H^T W V} + {\alpha^T V} + {\beta^T H})} \end{cases}
{P(V,H)=Z1exp{−E(V,H)}E(V,H)=−(HTWV+αTV+βTH)
然后我们可以将其log-likelihood写出来,因为V表示为条件数据,所以Learning问题可以表示为:
θ
^
=
1
N
∑
v
∈
S
log
P
(
V
)
{\hat \theta} = \frac{1}{N} \sum_{v \in S} \log P(V)
θ^=N1v∈S∑logP(V)
首先我们可以对
log
P
(
V
)
\log P(V)
logP(V)做一个变换:
log
P
(
V
)
=
log
∑
H
P
(
H
,
V
)
=
l
o
g
∑
H
1
z
exp
{
−
E
(
H
,
V
)
}
=
log
∑
H
exp
{
−
E
(
H
,
V
)
}
−
log
z
=
log
∑
H
exp
{
−
E
(
H
,
V
)
}
−
log
∑
H
,
V
exp
{
−
E
(
H
,
V
)
}
\begin{align} \log P(V) &= \log \sum_{H} P(H, V) = log \sum_{H} \frac{1}{z} \exp {\lbrace -E(H, V) \rbrace} \\ &= \log \sum_{H} \exp {\lbrace -E(H, V) \rbrace} - \log z \\ &= \log \sum_{H} \exp {\lbrace -E(H, V) \rbrace} - \log \sum_{H, V} \exp {\lbrace -E(H, V) \rbrace} \\ \end{align}
logP(V)=logH∑P(H,V)=logH∑z1exp{−E(H,V)}=logH∑exp{−E(H,V)}−logz=logH∑exp{−E(H,V)}−logH,V∑exp{−E(H,V)}
我们分别对左右两项进行求导,左边通过变换可以得到:
∇
l
e
f
t
=
∇
log
∑
H
exp
{
−
E
(
H
,
V
)
}
=
1
∑
H
exp
{
−
E
(
H
,
V
)
}
∇
∑
H
exp
{
−
E
(
H
,
V
)
}
=
−
1
∑
H
exp
{
−
E
(
H
,
V
)
}
∑
H
[
exp
{
−
E
(
H
,
V
)
}
⋅
∇
E
(
H
,
V
)
]
=
−
∑
H
[
exp
{
−
E
(
H
,
V
)
}
∑
H
exp
{
−
E
(
H
,
V
)
}
⋅
∇
E
(
H
,
V
)
]
=
−
∑
H
[
1
z
exp
{
−
E
(
H
,
V
)
}
∑
H
1
z
exp
{
−
E
(
H
,
V
)
}
⋅
∇
E
(
H
,
V
)
]
=
−
∑
H
[
P
(
H
,
V
)
P
(
V
)
⋅
∇
E
(
H
,
V
)
]
=
−
∑
H
[
P
(
H
∣
V
)
⋅
∇
E
(
H
,
V
)
]
\begin{align} \nabla left &= \nabla \log \sum_{H} \exp {\lbrace -E(H, V) \rbrace} \\ &= \frac{1}{\sum_{H} \exp {\lbrace -E(H, V) \rbrace}} \nabla \sum_{H} \exp {\lbrace -E(H, V) \rbrace} \\ &= - \frac{1}{\sum_{H} \exp {\lbrace -E(H, V) \rbrace}} \sum_{H} \left[ \exp {\lbrace -E(H, V) \rbrace} \cdot \nabla E(H, V) \right] \\ &= - \sum_{H} \left[ \frac{ \exp {\lbrace -E(H, V) \rbrace}}{\sum_{H} \exp {\lbrace -E(H, V) \rbrace}} \cdot \nabla E(H, V) \right] \\ &= - \sum_{H} \left[ \frac{\frac{1}{z} \exp {\lbrace -E(H, V) \rbrace}}{\sum_{H} \frac{1}{z} \exp {\lbrace -E(H, V) \rbrace}} \cdot \nabla E(H, V) \right] \\ &= - \sum_{H} \left[ \frac{P(H, V)}{P(V)} \cdot \nabla E(H, V) \right] \\ &= - \sum_{H} \left[ P(H|V) \cdot \nabla E(H, V) \right] \\ \end{align}
∇left=∇logH∑exp{−E(H,V)}=∑Hexp{−E(H,V)}1∇H∑exp{−E(H,V)}=−∑Hexp{−E(H,V)}1H∑[exp{−E(H,V)}⋅∇E(H,V)]=−H∑[∑Hexp{−E(H,V)}exp{−E(H,V)}⋅∇E(H,V)]=−H∑[∑Hz1exp{−E(H,V)}z1exp{−E(H,V)}⋅∇E(H,V)]=−H∑[P(V)P(H,V)⋅∇E(H,V)]=−H∑[P(H∣V)⋅∇E(H,V)]
右边通过变换可以得到:
∇
r
i
g
h
t
=
∇
log
∑
H
,
V
exp
{
−
E
(
H
,
V
)
}
=
1
exp
{
−
E
(
H
,
V
)
}
∇
∑
H
,
V
exp
{
−
E
(
H
,
V
)
}
=
−
1
∑
H
,
V
exp
{
−
E
(
H
,
V
)
}
∑
H
,
V
[
exp
{
−
E
(
H
,
V
)
}
⋅
∇
E
(
H
,
V
)
]
=
−
∑
H
,
V
[
exp
{
−
E
(
H
,
V
)
}
∑
H
,
V
exp
{
−
E
(
H
,
V
)
}
⋅
∇
E
(
H
,
V
)
]
=
−
∑
H
,
V
[
1
z
exp
{
−
E
(
H
,
V
)
}
⋅
∇
E
(
H
,
V
)
]
=
−
∑
H
,
V
[
P
(
H
,
V
)
⋅
∇
E
(
H
,
V
)
]
\begin{align} \nabla right &= \nabla \log \sum_{H, V} \exp {\lbrace -E(H, V) \rbrace} \\ &= \frac{1}{\exp {\lbrace -E(H, V) \rbrace}} \nabla \sum_{H, V} \exp {\lbrace -E(H, V) \rbrace} \\ &= - \frac{1}{\sum_{H, V} \exp {\lbrace -E(H, V) \rbrace}} \sum_{H, V} \left[ \exp {\lbrace -E(H, V) \rbrace} \cdot \nabla E(H, V) \right] \\ &= - \sum_{H, V} \left[ \frac{\exp {\lbrace -E(H, V) \rbrace}}{\sum_{H, V} \exp {\lbrace -E(H, V) \rbrace}} \cdot \nabla E(H, V) \right] \\ &= - \sum_{H, V} \left[ \frac{1}{z} \exp {\lbrace -E(H, V) \rbrace} \cdot \nabla E(H, V) \right] \\ &= - \sum_{H, V} \left[ P(H, V) \cdot \nabla E(H, V) \right] \\ \end{align}
∇right=∇logH,V∑exp{−E(H,V)}=exp{−E(H,V)}1∇H,V∑exp{−E(H,V)}=−∑H,Vexp{−E(H,V)}1H,V∑[exp{−E(H,V)}⋅∇E(H,V)]=−H,V∑[∑H,Vexp{−E(H,V)}exp{−E(H,V)}⋅∇E(H,V)]=−H,V∑[z1exp{−E(H,V)}⋅∇E(H,V)]=−H,V∑[P(H,V)⋅∇E(H,V)]
所以我们可以得到结果为:
∇
log
P
(
V
)
=
−
∑
H
[
P
(
H
∣
V
)
⋅
∇
E
(
H
,
V
)
]
+
∑
H
,
V
[
P
(
H
,
V
)
⋅
∇
E
(
H
,
V
)
]
\begin{align} \nabla \log P(V) &= - \sum_{H} \left[ P(H|V) \cdot \nabla E(H, V) \right] + \sum_{H, V} \left[ P(H, V) \cdot \nabla E(H, V) \right] \end{align}
∇logP(V)=−H∑[P(H∣V)⋅∇E(H,V)]+H,V∑[P(H,V)⋅∇E(H,V)]
参数 θ \theta θ中包含 H = ( h 1 , h 2 , … , h m ) T , V = ( v 1 , v 2 , … , v m ) T , W = [ w i j ] m × n H = (h_1, h_2, \dots, h_m)^T, V = (v_1, v_2, \dots, v_m)^T, W = [w_{ij}]_{m \times n} H=(h1,h2,…,hm)T,V=(v1,v2,…,vm)T,W=[wij]m×n具体以求解 w i j w_{ij} wij为例。
根据之前的公式,加上由于
∇
w
i
j
E
(
H
,
V
)
=
−
h
i
v
j
\nabla_{w_{ij}} E(H, V) = - h_i v_j
∇wijE(H,V)=−hivj,这个很简单。所以我们可以得到:
∇
w
i
j
log
P
(
V
)
=
−
∑
H
[
P
(
H
∣
V
)
⋅
∇
w
i
j
E
(
H
,
V
)
]
+
∑
H
,
V
[
P
(
H
,
V
)
⋅
∇
w
i
j
E
(
H
,
V
)
]
=
−
∑
H
[
P
(
H
∣
V
)
⋅
(
−
h
i
v
j
)
]
+
∑
H
,
V
[
P
(
H
,
V
)
⋅
(
−
h
i
v
j
)
]
=
∑
H
[
P
(
H
∣
V
)
⋅
h
i
v
j
]
−
∑
H
,
V
[
P
(
H
,
V
)
⋅
h
i
v
j
]
\begin{align} \nabla_{w_{ij}} \log P(V) &= - \sum_{H} \left[ P(H|V) \cdot \nabla_{w_{ij}} E(H, V) \right] + \sum_{H, V} \left[ P(H, V) \cdot \nabla_{w_{ij}} E(H, V) \right] \\ &= - \sum_{H} \left[ P(H|V) \cdot (- h_i v_j) \right] + \sum_{H, V} \left[ P(H, V) \cdot (- h_i v_j) \right] \\ &= \sum_{H} \left[ P(H|V) \cdot h_i v_j \right] - \sum_{H, V} \left[ P(H, V) \cdot h_i v_j \right] \\ \end{align}
∇wijlogP(V)=−H∑[P(H∣V)⋅∇wijE(H,V)]+H,V∑[P(H,V)⋅∇wijE(H,V)]=−H∑[P(H∣V)⋅(−hivj)]+H,V∑[P(H,V)⋅(−hivj)]=H∑[P(H∣V)⋅hivj]−H,V∑[P(H,V)⋅hivj]
这里已经得出来结果了,但因为在RBM中,隐变量的值一般都是0/1变量,所以还可以继续化简:
l
e
f
t
=
∑
H
[
P
(
H
∣
V
)
⋅
h
i
v
j
]
=
∑
h
1
∑
h
2
⋯
∑
h
m
[
P
(
h
1
,
h
2
,
…
,
h
m
∣
V
)
⋅
h
i
v
j
]
=
∑
h
i
[
P
(
h
i
∣
V
)
⋅
h
i
v
j
]
=
P
(
h
i
=
1
∣
V
)
⋅
v
j
\begin{align} left &= \sum_{H} \left[ P(H|V) \cdot h_i v_j \right] \\ &= \sum_{h_1} \sum_{h_2} \dots \sum_{h_m} \left[ P(h1, h2, \dots, h_m|V) \cdot h_i v_j \right] \\ &= \sum_{h_i} \left[ P(hi|V) \cdot h_i v_j \right] \\ &= P(h_i=1|V) \cdot v_j \\ \end{align}
left=H∑[P(H∣V)⋅hivj]=h1∑h2∑⋯hm∑[P(h1,h2,…,hm∣V)⋅hivj]=hi∑[P(hi∣V)⋅hivj]=P(hi=1∣V)⋅vj
r i g h t = ∑ H , V [ P ( H , V ) ⋅ h i v j ] = ∑ H ∑ V [ P ( V ) ⋅ P ( H ∣ V ) ⋅ h i v j ] = ∑ V [ P ( V ) ⋅ ∑ H [ P ( H ∣ V ) ⋅ h i v j ] ] = ∑ V [ P ( V ) ⋅ P ( h i = 1 ∣ V ) ⋅ v j ] \begin{align} right &= \sum_{H, V} \left[ P(H, V) \cdot h_i v_j \right] \\ &= \sum_{H} \sum_{V} \left[ P(V) \cdot P(H|V) \cdot h_i v_j \right] \\ &= \sum_{V} \left[ P(V) \cdot \sum_{H} \left[ P(H|V) \cdot h_i v_j \right] \right] \\ &= \sum_{V} \left[ P(V) \cdot P(h_i=1|V) \cdot v_j \right] \\ \end{align} right=H,V∑[P(H,V)⋅hivj]=H∑V∑[P(V)⋅P(H∣V)⋅hivj]=V∑[P(V)⋅H∑[P(H∣V)⋅hivj]]=V∑[P(V)⋅P(hi=1∣V)⋅vj]
所以最终可以化为:
∇
w
i
j
log
P
(
V
)
=
P
(
h
i
=
1
∣
V
)
⋅
v
j
−
∑
V
[
P
(
V
)
⋅
P
(
h
i
=
1
∣
V
)
⋅
v
j
]
\begin{align} \nabla_{w_{ij}} \log P(V) &= P(h_i=1|V) \cdot v_j - \sum_{V} \left[ P(V) \cdot P(h_i=1|V) \cdot v_j \right] \end{align}
∇wijlogP(V)=P(hi=1∣V)⋅vj−V∑[P(V)⋅P(hi=1∣V)⋅vj]
此时我们可以看出来公式的左边是可解的,不过公式的右边可能无法求出积分,所以要对右边进行采样,通过MCMC求解。我们在这里选取的采样方法就是CD-k,是一种特殊的Gibbs采样。
我们现在的核心就是对公式的右边进行采样求解,首先就要将其化为期望的形式:
∑
V
[
P
(
V
)
⋅
P
(
h
i
=
1
∣
V
)
⋅
v
j
]
=
E
P
(
V
)
[
P
(
h
i
=
1
∣
V
)
⋅
v
j
]
\sum_{V} \left[ P(V) \cdot P(h_i=1|V) \cdot v_j \right] = E_{P(V)} \left[ P(h_i=1|V) \cdot v_j \right]
V∑[P(V)⋅P(hi=1∣V)⋅vj]=EP(V)[P(hi=1∣V)⋅vj]
所以我们要在
P
(
V
)
P(V)
P(V),也就是
P
(
V
∣
H
)
P(V|H)
P(V∣H)中进行采样。根据这个我们也就知道,我们不止要对
V
V
V进行采样,也要对
H
H
H进行采样。具体的流程可以写为:
For V in S:
V V V <- V ( 0 ) V^{(0)} V(0)
For l = 0 to k-1:
For i = 1 to m:
get sample h i ( l ) ∽ P ( H ∣ V ( l ) ) h^{(l)}_{i} \backsim P(H | V^{(l)}) hi(l)∽P(H∣V(l))
For i = 1 to n:
get sample v j ( l + 1 ) ∽ P ( V ∣ H ( l ) ) v^{(l+1)}_{j} \backsim P(V | H^{(l)}) vj(l+1)∽P(V∣H(l))
For i = 1 to m:
For j = 1 to n:
∇ w i j \nabla w_{ij} ∇wij <- ∇ w i j + ∇ log P ( V ) \nabla w_{ij} + \nabla \log P(V) ∇wij+∇logP(V)
我们可以看出来,我们是对
H
H
H和
V
V
V进行交替采样,并且最后进行梯度上升得到结果。其中
∇
log
P
(
V
)
\nabla \log P(V)
∇logP(V)就是之前求出来的公式,我们假设训练数据表示为
V
(
0
)
V^{(0)}
V(0),CD-k采样出来的样本表示为
V
(
k
)
V^{(k)}
V(k),则
∇
log
P
(
V
)
\nabla \log P(V)
∇logP(V)可以表示为:
∇
log
P
(
V
)
≈
P
(
h
i
=
1
∣
V
(
0
)
)
⋅
v
j
(
0
)
−
P
(
h
i
=
1
∣
V
(
k
)
)
⋅
v
j
(
k
)
\nabla \log P(V) \approx P(h_i=1|V^{(0)}) \cdot v^{(0)}_j - P(h_i=1|V^{(k)}) \cdot v^{(k)}_j
∇logP(V)≈P(hi=1∣V(0))⋅vj(0)−P(hi=1∣V(k))⋅vj(k)