VAE
- likelihood-based
- ELBO
- VAE
- SGVB估计器和AEVB算法
- 重参数化
likelihood-based
likelihood-based generative models是生成模型的一类范式,通过最大化所有观测数据的似然函数来学习模型参数。
该怎么去理解likelihood-based,基于似然的生成模型,优化的目标函数到底是什么?
如图所示,我们希望待学习分布
p
θ
(
x
)
p_\theta(x)
pθ(x)和真实数据分布
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x)尽可能近。那该如何度量两个分布之间的距离?自然想到KL散度。
D
K
L
(
P
d
a
t
a
∣
∣
P
θ
)
=
E
x
∼
P
d
a
t
a
[
l
o
g
P
d
a
t
a
(
x
)
P
θ
(
x
)
]
=
E
x
∼
P
d
a
t
a
[
l
o
g
P
d
a
t
a
(
x
)
]
−
E
x
∼
P
d
a
t
a
[
l
o
g
P
θ
(
x
)
]
\begin{aligned} D_{KL}(P_{data}||P_\theta) &= E_{x\sim P_{data}}[log\frac{P_{data}(x)}{P_\theta(x)}] \\ &= E_{x\sim P_{data}}[logP_{data}(x)] - E_{x\sim P_{data}}[logP_\theta(x)] \end{aligned}
DKL(Pdata∣∣Pθ)=Ex∼Pdata[logPθ(x)Pdata(x)]=Ex∼Pdata[logPdata(x)]−Ex∼Pdata[logPθ(x)]
RHS第一项是常量,不依赖待学习参数
θ
\theta
θ。因此最小化KL散度等价于最大化log-likelihood
a
r
g
m
i
n
P
θ
D
K
L
(
P
d
a
t
a
∣
∣
P
θ
)
=
a
r
g
m
i
n
P
θ
−
E
x
∼
P
d
a
t
a
[
l
o
g
P
θ
(
x
)
]
=
a
r
g
m
a
x
P
θ
E
x
∼
P
d
a
t
a
[
l
o
g
P
θ
(
x
)
]
\begin{aligned} \mathop{argmin}\limits_{P_\theta}D_{KL}(P_{data}||P_\theta) &= \mathop{argmin}\limits_{P_\theta} - E_{x\sim P_{data}}[logP_\theta(x)] \\&= \mathop{argmax}\limits_{P_\theta} E_{x\sim P_{data}}[logP_\theta(x)] \end{aligned}
PθargminDKL(Pdata∣∣Pθ)=Pθargmin−Ex∼Pdata[logPθ(x)]=PθargmaxEx∼Pdata[logPθ(x)]
ELBO
假设数据集中有N个数据点
{
x
(
1
)
,
.
.
.
,
x
(
N
)
}
\{x^{(1)}, ..., x^{(N)}\}
{x(1),...,x(N)},定义在其上的概率似然可以写作:
E
x
∼
P
d
a
t
a
[
l
o
g
P
θ
(
x
)
]
=
∑
i
=
1
N
[
l
o
g
p
θ
(
x
(
i
)
)
]
E_{x\sim P_{data}}[logP_\theta(x)] = \sum_{i=1}^N[logp_\theta(x^{(i)})]
Ex∼Pdata[logPθ(x)]=i=1∑N[logpθ(x(i))]
对于
l
o
g
p
θ
(
x
(
i
)
)
logp_\theta(x^{(i)})
logpθ(x(i))我们有:
l
o
g
p
θ
(
x
(
i
)
)
=
D
K
L
(
q
ϕ
(
z
∣
x
(
i
)
∣
∣
p
θ
(
z
∣
x
(
i
)
)
)
+
L
(
θ
,
ϕ
;
x
(
i
)
)
logp_\theta(x^{(i)}) = D_{KL}(q_\phi(z|x^{(i)} || p_\theta(z|x^{(i)})) + L(\theta, \phi; x^{(i)})
logpθ(x(i))=DKL(qϕ(z∣x(i)∣∣pθ(z∣x(i)))+L(θ,ϕ;x(i))
RHS的第一项是近似分布和真实后验分布之间的KL散度,因为KL散度的非负特性,RHS的第二项被称为数据点
x
(
i
)
x^{(i)}
x(i)边际似然的(variational) lower bound,简称为ELBO。因此:
l
o
g
p
θ
(
x
(
i
)
)
≥
L
(
θ
,
ϕ
;
x
(
i
)
)
=
E
z
∼
q
ϕ
(
z
∣
x
i
)
[
l
o
g
p
θ
(
x
(
i
)
∣
z
)
]
−
D
K
L
(
q
ϕ
(
z
∣
x
(
i
)
)
∣
∣
p
(
z
)
)
logp_\theta(x^{(i)}) \geq L(\theta, \phi; x^{(i)}) = E_{z\sim q_\phi(z|x^{i})}[logp_\theta(x^{(i)}|z)] - D_{KL}(q_\phi(z|x^{(i)}) || p(z))
logpθ(x(i))≥L(θ,ϕ;x(i))=Ez∼qϕ(z∣xi)[logpθ(x(i)∣z)]−DKL(qϕ(z∣x(i))∣∣p(z))
对于上述结论推导如下。
为了书写简化,下文以
p
(
x
)
p(x)
p(x)代称
p
θ
(
x
(
i
)
)
p_\theta(x^{(i)})
pθ(x(i))。正常上式中的
p
(
x
)
p(x)
p(x)非常复杂,无法求解。因此采用变分推断的方式,通过最大化ELBO,达到间接优化似然函数的目的,通常也称为proxy或者surrogate。
对于上面的“
p
(
x
)
p(x)
p(x)非常复杂,无法求解。”做进一步的解释:
我们有两种方式去利用联合概率分布
p
(
x
,
z
)
p(x, z)
p(x,z)恢复出观测数据的概率似然
p
(
x
)
p(x)
p(x),一种是边际概率似然
p
(
x
)
=
∫
p
(
x
,
z
)
d
z
p(x)=\int p(x, z)dz
p(x)=∫p(x,z)dz,还有一个是贝叶斯法则
p
(
x
)
=
p
(
x
,
z
)
p
(
z
∣
x
)
p(x)=\frac{p(x, z)}{p(z|x)}
p(x)=p(z∣x)p(x,z)。但这两个方法在计算过程中,方法一是对所有隐变量
z
z
z做积分,方法二需要知道隐变量编码器
p
(
z
∣
x
)
p(z|x)
p(z∣x),对于复杂模型,均无法直接求解。因此我们可以利用上述两个公式,推导出ELBO,做为对数似然的代理优化目标函数。
对于上面的“通过最大化ELBO,达到间接优化似然函数的目的”做进一步解释:
引入隐变量
z
z
z,我们的目标是学习可以描述观测数据的隐变量结构。换句话说,我们希望优化变分后验
q
ϕ
(
z
∣
x
)
q_\phi(z|x)
qϕ(z∣x)的参数,使其与真实后验分布
p
(
z
∣
x
)
p(z|x)
p(z∣x)完全一致。这可以通过最小化两者之间的KL散度实现。但不幸的是,我们不知道真实的
p
(
z
∣
x
)
p(z|x)
p(z∣x)分布,没法直接求解两者之间的KL散度项。但我们注意到数据的对数似然
l
o
g
p
(
x
)
logp(x)
logp(x)始终是常值,ELBO + KL等于常值,最大化ELBO项等价于最小化KL散度项,ELBO最大时,模型参数达到最优。也因此ELBO可以做为建模并学习后验分布的proxy。
l
o
g
p
(
x
)
=
l
o
g
p
(
x
)
∫
q
ϕ
(
z
∣
x
)
d
z
=
∫
q
ϕ
(
z
∣
x
)
l
o
g
p
(
x
)
d
z
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
(
x
)
]
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
(
x
,
z
)
p
(
z
∣
x
)
]
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
p
(
z
∣
x
)
q
ϕ
(
z
∣
x
)
]
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
]
+
E
z
∼
q
(
z
∣
x
)
[
l
o
g
q
ϕ
(
z
∣
x
)
p
(
z
∣
x
)
]
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
]
+
K
L
(
q
ϕ
(
z
∣
x
)
∣
∣
p
(
z
∣
x
)
)
≥
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
]
=
E
L
B
O
\begin{aligned} logp(x) &= logp(x)\int q_\phi(z|x)dz \\ &= \int q_\phi(z|x)logp(x)dz \\ &= E_{z\sim q_\phi(z|x)}[logp(x)] \\ &= E_{z\sim q_\phi(z|x)}[log\frac{p(x, z)}{p(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)q_\phi(z|x)}{p(z|x)q_\phi(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] + E_{z\sim q(z|x)} [log\frac{q_\phi(z|x)}{p(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] + KL(q_\phi(z|x)||p(z|x)) \\ &\geq E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] = ELBO \end{aligned}
logp(x)=logp(x)∫qϕ(z∣x)dz=∫qϕ(z∣x)logp(x)dz=Ez∼qϕ(z∣x)[logp(x)]=Ez∼qϕ(z∣x)[logp(z∣x)p(x,z)]=Ez∼qϕ(z∣x)[logp(z∣x)qϕ(z∣x)p(x,z)qϕ(z∣x)]=Ez∼qϕ(z∣x)[logqϕ(z∣x)p(x,z)]+Ez∼q(z∣x)[logp(z∣x)qϕ(z∣x)]=Ez∼qϕ(z∣x)[logqϕ(z∣x)p(x,z)]+KL(qϕ(z∣x)∣∣p(z∣x))≥Ez∼qϕ(z∣x)[logqϕ(z∣x)p(x,z)]=ELBO
推导过程用到了如下特性:
∫
q
ϕ
(
z
∣
x
)
d
z
=
1
\int q_\phi (z|x)dz = 1
∫qϕ(z∣x)dz=1
K
L
(
q
ϕ
(
z
∣
x
)
∣
∣
p
(
z
∣
x
)
)
≥
0
KL(q_\phi(z|x)||p(z|x)) \geq 0
KL(qϕ(z∣x)∣∣p(z∣x))≥0
evidence和ELBO之间的差值是非负的KL项,因此ELBO的值不会超过evidence,且当参数化模型近似的后验分布
q
(
z
∣
x
)
q(z|x)
q(z∣x)和真实后验分布
p
(
z
∣
x
)
p(z|x)
p(z∣x)一致时,等号成立,因此ELBO可以认为是evidence的严格下界。上述ELBO的推导过程也可以用Jensen不等式推导一遍,但从ELBO是evidence严格下界这个角度去理解,没有上述过程那么直观。
l
o
g
p
(
x
)
=
l
o
g
∫
p
(
x
,
z
)
d
z
=
l
o
g
∫
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
q
ϕ
(
z
∣
x
)
d
z
=
l
o
g
E
z
∼
q
ϕ
(
z
∣
x
)
[
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
]
≥
E
z
∼
q
ϕ
(
z
∣
x
)
[
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
]
=
E
L
B
O
\begin{aligned} logp(x) &= log\int p(x, z)dz \\ &= log\int p(x, z)\frac{q_\phi(z|x)}{q_\phi(z|x)}dz \\ &= logE_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] \\ &\geq E_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] = ELBO \end{aligned}
logp(x)=log∫p(x,z)dz=log∫p(x,z)qϕ(z∣x)qϕ(z∣x)dz=logEz∼qϕ(z∣x)[qϕ(z∣x)p(x,z)]≥Ez∼qϕ(z∣x)[qϕ(z∣x)p(x,z)]=ELBO
VAE
将ELBO变换形式可得:
E
L
B
O
=
E
z
∼
q
(
z
∣
x
)
[
l
o
g
p
(
x
∣
z
)
]
−
K
L
(
q
ϕ
(
z
∣
x
)
∣
∣
p
(
z
)
)
ELBO = E_{z\sim q(z|x)}[logp(x|z)] - KL(q_\phi(z|x) || p(z))
ELBO=Ez∼q(z∣x)[logp(x∣z)]−KL(qϕ(z∣x)∣∣p(z))
我们用
ϕ
\phi
ϕ参数化
p
(
z
∣
x
)
p(z|x)
p(z∣x)部分,可称之为decoder;用
θ
\theta
θ参数化
p
(
x
∣
z
)
p(x|z)
p(x∣z)部分,可称之为encoder,ELBO可以进一步写为:
E
L
B
O
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
θ
(
x
∣
z
)
]
−
K
L
(
q
ϕ
(
z
∣
x
)
∣
∣
p
(
z
)
)
ELBO = E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] - KL(q_\phi(z|x) || p(z))
ELBO=Ez∼qϕ(z∣x)[logpθ(x∣z)]−KL(qϕ(z∣x)∣∣p(z))
ELBO的第一部分是重建loss,第二部分是对隐变量分布做约束,让其尽可能贴近先验分布 p ( z ) p(z) p(z),最小化该项可以鼓励encoder学习一个正常的分布,而不致于坍塌为Dirac delta函数。
SGVB估计器和AEVB算法
SGVB: Stochastic Gradient Variational Bayes。
AEVB: Auto-Encoding Variational Bayes。
参考下文的重参数化技巧,我们可以将随机变量
z
∼
q
ϕ
(
z
∣
x
)
z\sim q_\phi(z|x)
z∼qϕ(z∣x)使用一个辅助噪声
ϵ
\epsilon
ϵ的可微变换
g
ϕ
(
ϵ
,
x
)
g_\phi(\epsilon, x)
gϕ(ϵ,x)重参数化。
z
=
g
ϕ
(
ϵ
,
x
)
,
ϵ
∈
p
(
ϵ
)
z=g_\phi(\epsilon, x), \epsilon \in p(\epsilon)
z=gϕ(ϵ,x),ϵ∈p(ϵ)
对于一个函数
f
(
z
)
f(z)
f(z)相对与
q
ϕ
(
z
∣
x
(
i
)
)
q_\phi(z|x^{(i)})
qϕ(z∣x(i))分布的期望,我们可以使用Monte Carlo估计:
E
z
∼
q
ϕ
(
z
∣
x
(
i
)
)
[
f
(
z
)
]
=
E
p
(
ϵ
)
[
f
(
g
ϕ
(
ϵ
,
x
(
i
)
)
)
]
≈
1
L
∑
l
=
1
L
f
(
g
ϕ
(
ϵ
(
l
)
,
x
(
i
)
)
E_{z\sim q_\phi(z|x^{(i)})}[f(z)] = E_{p(\epsilon)}[f(g_\phi(\epsilon, x^{(i)}))] \approx \frac{1}{L}\sum_{l=1}^Lf(g_\phi(\epsilon^{(l)}, x^{(i)})
Ez∼qϕ(z∣x(i))[f(z)]=Ep(ϵ)[f(gϕ(ϵ,x(i)))]≈L1l=1∑Lf(gϕ(ϵ(l),x(i))
where
ϵ
(
l
)
∼
p
(
ϵ
)
\epsilon^{(l)}\sim p(\epsilon)
ϵ(l)∼p(ϵ)
我们可以该技术用在ELBO中,改写下式:
E
L
B
O
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
p
(
x
,
z
)
q
ϕ
(
z
∣
x
)
]
ELBO = E_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}]
ELBO=Ez∼qϕ(z∣x)[qϕ(z∣x)p(x,z)]
可以得到通用的SGVB估计器:
L
~
A
(
θ
,
ϕ
;
x
(
i
)
)
=
1
L
∑
l
=
1
L
l
o
g
p
θ
(
x
(
i
)
,
z
(
i
,
l
)
)
−
l
o
g
q
ϕ
(
z
(
i
,
l
)
∣
x
(
i
)
)
\tilde{L}^A(\theta,\phi; x^{(i)}) = \frac{1}{L}\sum_{l=1}^Llogp_\theta(x^{(i)}, z^{(i, l)}) - logq_\phi(z^{(i, l)}|x^{(i)})
L~A(θ,ϕ;x(i))=L1l=1∑Llogpθ(x(i),z(i,l))−logqϕ(z(i,l)∣x(i))
where
z
(
i
,
l
)
=
g
ϕ
(
ϵ
(
i
,
l
)
,
x
(
i
)
)
=
μ
(
i
)
+
σ
(
i
)
⊙
ϵ
(
l
)
z^{(i, l)}=g_\phi(\epsilon^{(i, l)}, x^{(i)})=\mu^{(i)} + \sigma^{(i)}\odot \epsilon^{(l)}
z(i,l)=gϕ(ϵ(i,l),x(i))=μ(i)+σ(i)⊙ϵ(l), and
ϵ
(
l
)
∼
p
(
ϵ
)
\epsilon^{(l)}\sim p(\epsilon)
ϵ(l)∼p(ϵ)。
不过网络训练的时候也不会用上式。而且基于下式做进一步改写:
E
L
B
O
=
E
z
∼
q
ϕ
(
z
∣
x
)
[
l
o
g
p
θ
(
x
∣
z
)
]
−
K
L
(
q
ϕ
(
z
∣
x
)
∣
∣
p
(
z
)
)
ELBO = E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] - KL(q_\phi(z|x) || p(z))
ELBO=Ez∼qϕ(z∣x)[logpθ(x∣z)]−KL(qϕ(z∣x)∣∣p(z))
得到第二版SGVB估计器,因为第二项的KL散度有解析形式,因此只有第一项的重建误差需要通过采样进行估计。KL散度项可理解为对参数
ϕ
\phi
ϕ的正则化,鼓励近似后验分布接近先验分布
p
(
z
)
p(z)
p(z)。
L
~
B
(
θ
,
ϕ
;
x
(
i
)
)
=
1
L
∑
l
=
1
L
l
o
g
p
θ
(
x
(
i
)
∣
z
(
i
,
l
)
)
−
D
K
L
(
q
ϕ
(
z
∣
x
(
i
)
)
∣
∣
p
(
z
)
)
)
\tilde{L}^B(\theta,\phi; x^{(i)}) = \frac{1}{L}\sum_{l=1}^Llogp_\theta(x^{(i)} | z^{(i, l)}) - D_{KL}(q_\phi(z|x^{(i)}) || p(z)))
L~B(θ,ϕ;x(i))=L1l=1∑Llogpθ(x(i)∣z(i,l))−DKL(qϕ(z∣x(i))∣∣p(z)))
这里需要大白话翻译一下:输入第 i i i个数据点 x ( i ) x^{(i)} x(i),经过 ϕ \phi ϕ参数化模型,得到后验分布 p ( z ∣ x ) p(z|x) p(z∣x)的均值 μ ( i ) \mu^{(i)} μ(i)和方差 σ ( i ) \sigma^{(i)} σ(i)。利用该均值方差,我们用蒙特卡洛估计去估算 E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] Ez∼qϕ(z∣x)[logpθ(x∣z)],也就是 l o g p θ ( x ∣ z ) logp_\theta(x|z) logpθ(x∣z)在隐变量 z z z上的期望值。具体做法就是随机采样 L L L个辅助噪声,利用重参数化技巧构建出隐变量 z ( i , l ) z^{(i, l)} z(i,l),输入到 θ \theta θ参数化的生成模型中,计算 L L L个输出的loss均值,作为最终估计。
假定数据集
X
X
X有N个数据点,从中随机取M个数据点
X
M
=
{
x
(
i
)
}
i
=
1
M
X^M=\{x^{(i)}\}_{i=1}^M
XM={x(i)}i=1M作为minibatch,去估计上述ELBO,则有:
L
(
θ
,
ϕ
;
X
)
≈
L
~
M
(
θ
,
ϕ
;
X
M
)
=
N
M
L
~
(
θ
,
ϕ
;
x
(
i
)
)
L(\theta, \phi; X)\approx \tilde{L}^M(\theta, \phi; X^M)=\frac{N}{M}\tilde{L}(\theta, \phi; x^{(i)})
L(θ,ϕ;X)≈L~M(θ,ϕ;XM)=MNL~(θ,ϕ;x(i))
实验过程中,我们发现只要minibatch够大,比如M=100,做蒙特卡洛估计时L可以取1,而不用大量采样,拉长学习时长。
对于第一部分的
p
θ
(
x
∣
z
)
p_\theta(x|z)
pθ(x∣z)的分布形式不确定,我们可以假设其为多元高斯分布/伯努利分布/拉普拉斯分布。
如果假设其为高斯分布
p
ϕ
(
x
∣
z
)
=
N
(
x
;
μ
ϕ
(
z
)
,
σ
ϕ
2
(
z
)
)
p_\phi(x|z)=N(x;\mu_\phi(z), \sigma^2_\phi(z))
pϕ(x∣z)=N(x;μϕ(z),σϕ2(z)),则:
l
o
g
p
ϕ
(
x
∣
z
)
=
−
1
2
l
o
g
(
2
π
σ
ϕ
2
(
z
)
)
−
1
2
σ
ϕ
2
(
z
)
(
x
−
μ
ϕ
(
z
)
)
2
logp_\phi(x|z) = -\frac{1}{2}log(2\pi\sigma^2_\phi(z)) - \frac{1}{2\sigma^2_\phi(z)}(x-\mu_\phi(z))^2
logpϕ(x∣z)=−21log(2πσϕ2(z))−2σϕ2(z)1(x−μϕ(z))2
如果假设方差为定值
I
I
I,网络只学习
μ
ϕ
(
z
)
\mu_\phi(z)
μϕ(z),这样就简化为最一般的MSE Loss(这里还要展开讲一讲,实际训练时,只用MSE Loss监督的话,重建效果会blur,进一步引出了VQGAN,用GAN Loss起到锐化作用)。
如果假设分布是伯努利分布,那么最后将得到一个交叉熵损失。 (待进一步补充)
如果假设分布是拉普拉斯分布,那么最后得到L1损失。 (待进一步补充)
对于第二部分的KL约束,可参考数理基础部分有详细推导。结论是:
K
L
(
q
θ
(
z
∣
x
)
∣
∣
p
(
z
)
)
=
−
l
o
g
σ
θ
(
x
)
+
1
2
(
σ
θ
2
(
x
)
+
μ
θ
2
(
x
)
)
−
1
2
KL(q_\theta(z|x)||p(z)) = -log\sigma_\theta(x) + \frac{1}{2}(\sigma^2_\theta(x) + \mu^2_\theta(x)) - \frac{1}{2}
KL(qθ(z∣x)∣∣p(z))=−logσθ(x)+21(σθ2(x)+μθ2(x))−21
重参数化
z ∼ p θ ( z ∣ x ) z\sim p_\theta(z|x) z∼pθ(z∣x)可以想象为将样本 x x x,输入到参数化为 θ \theta θ的encoder中,得到隐变量 z z z概率分布的参数估计,假设隐变量 z z z服从高斯分布 z ∼ N ( z ; μ θ ( x ) , σ θ 2 ( x ) ) z\sim N(z;\mu_\theta(x), \sigma^2_\theta(x)) z∼N(z;μθ(x),σθ2(x))。需要从该分布中采样出样本 z z z,输入到decoder部分。这里的采样需要用到重参数化。如果直接利用torch.normal,输入encoder估计出的均值和方差,生成样本,训练过程中梯度无法反传,因此需要用到重参数化,绕开torch.normal采样,采用 m e a n + s t d ∗ ϵ mean + std*\epsilon mean+std∗ϵ, ϵ ∼ N ( 0 , I ) \epsilon\sim N(0, I) ϵ∼N(0,I)的方式采样,得到样本 z z z,这样训练过程中,梯度就可以正常反传,做参数优化。
import torch
mean = torch.rand(3, requires_grad=True)
std = torch.rand(3, requires_grad=True)
val = torch.normal(mean, std)
loss_1 = sum(val)
loss_1.backward() # backpropgation计算梯度
print(mean.grad) # tensor([0., 0., 0.])
print(std.grad) # tensor([0., 0., 0.])
# 重参数化采样
noise = torch.randn(3)
val = mean + std * noise
loss_2 = sum(val)
loss_2.backward()
print(mean.grad) # tensor([1., 1., 1.])
print(std.grad) # noise value