生成模型–VAE
变分自编码器(variational autoencoder, VAE)采用变分推断的方式来构建,与其他自编码器类似,变分自编码器也是由编码器和解码器组成,其本质是对一个含隐变量的函数进行密度估计。在训练过程中, VAE 的主要目的是进行极大似然估计,为了使得隐变量服从某一分布,在参数估计的过程中采用了变分推断的思想。
KL 散度
在变分推断中,我们希望望找到一个相对简单好算的概率分布 q(z)q(z) ,使它尽可能地近似我们待分析地后验概率 p ( z ∣ x ) p(z|x) p(z∣x),以求我们能够用 q ( z ) q(z) q(z) 来近似 p ( z ∣ x ) p(z|x) p(z∣x) 。所以,为了度量两个概率分布 q ( z ) q(z) q(z) 和 p ( z ∣ x ) p(z∣x) p(z∣x) 之间的距离,我们需要用到的一个工具就是 KL 散度。
KL 散度(Kullback-Leibler divergence)即相对熵,两个概率分布间差异的非对称性度量。如果两个分布越接近,那么 KL 散度越小,如果越远,KL 散度就会越大。对于两个分布
p
p
p 和
q
q
q ,其 KL 散度的公式为:
K
L
(
p
∣
q
)
=
Σ
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
KL(p|q)=\Sigma p(x)log\frac{p(x)}{q(x)}
KL(p∣q)=Σp(x)logq(x)p(x), 这个是离散概率分布的公式;
K
L
(
p
∣
q
)
=
∫
p
(
x
)
p
(
x
)
q
(
x
)
KL(p|q)=\int p(x) \frac{p(x)}{q(x)}
KL(p∣q)=∫p(x)q(x)p(x), 这个是连续概率分布的公式。
VAE 基本思想
假设我们有一个判别任务,现有一个等待判别的事物
X
X
X ,这个事物有一个类别
y
y
y ,我们需要建立一个模型
y
=
f
(
x
;
w
)
y=f(x;w)
y=f(x;w) 使得
p
(
y
∣
X
)
p(y|X)
p(y∣X)的概率尽可能大,即让
f
(
x
;
w
)
f(x;w)
f(x;w) 尽可能地接近
y
y
y。
如果我们使用生成式模型去解决这一问题,就需要用贝叶斯公式将这个问题转换成:
让我们再考虑一下数据生成问题,则问题可以转换成:当我们有式子左边的
p
(
z
∣
X
)
p(z|X)
p(z∣X),应该如何生成一个符合某种
z
z
z 的
X
X
X (其中
z
z
z 为符合某种分布的隐变量)?
一个解决方式是:每次随机生成一个 X X X ,用 p ( z ∣ X ) p(z∣X) p(z∣X) 计算概率,如果概率满足,则结束,如果不满足,则继续随机生成。但这种方式在某些情况下是不现实的,特别是右部的公式难以直接计算得到,所以,我们需要采用其他可行的方法来解决这一问题。这时就可以用到变分推断的思想结合自编码器,假设隐变量 z z z服从某种分布来解决这一问题。
由于公式(2)中,右部的积分公式难以计算,我们可以用一个变分函数 q ( z ∣ X ) q(z|X) q(z∣X) 去代替 p ( z ∣ X ) p(z∣X) p(z∣X) 。在 VAE 中,这个函数将采用编码器实现),当编码器能够将数据能够完美地将真实数据编码成服从一定分布的隐变量时,那解码器就能将服从这一分布的隐变量解码成接近真实数据的生成数据,从而解码器将能作为生成器使用,这便是 VAE 的基本思想。
为了能采用
q
(
z
∣
X
)
q(z∣X)
q(z∣X) 去代替
p
(
z
∣
X
)
p(z∣X)
p(z∣X) ,我们需要使得两个分布布尽可能地相近,于是乎我们选择了 KL 散度这个指标用来衡量两者的相近程度,于是有
左右整理一下,我们可以得到:
重新排列方程的左右:
我们知道在
X
X
X 给定的情况下,
p
(
X
)
p(X)
p(X)是个固定值,而我们的目的是最大化
K
L
(
q
(
z
)
∣
p
(
z
∣
X
)
)
KL(q(z)∣p(z∣X))
KL(q(z)∣p(z∣X)),所以我们需要让等号右边那部分尽量大,所以,为了找到一个好的
q
(
z
∣
X
)
q(z∣X)
q(z∣X),使得它和
p
(
z
∣
X
)
p(z∣X)
p(z∣X) 尽可能地相近,我们需要:
- 右边第一项的对数似然的期望最大化
- 右边第二项的 KL 散度最小化
上述内容的负数定义了我们的损失函数:
在变分贝叶斯方法中,这个损失函数被称为变分下界,或证据下界。名字中的下界部分来自于KL散度总是非负的,因此
−
L
V
A
E
-L_{VAE}
−LVAE是
l
o
g
p
θ
(
x
)
logp_{\theta}(x)
logpθ(x)的下界。
因此,通过最小化损失,即最大限度地提高生成真实数据样本的概率下界.
重参数化
损失函数中的期望项涉及从
z
∼
q
ϕ
(
z
∣
x
)
z \sim q_{\phi}(z|x)
z∼qϕ(z∣x)生成的样本。采样是一个随机的过程,因此我们不能反向传播梯度。为了使其可训练,引入了重新参数化的技巧。通常可以将随机变量
z
z
z表达为确定性变量
⊤
ϕ
(
x
∣
ϵ
)
\top_{\phi}(x|\epsilon)
⊤ϕ(x∣ϵ)。其中
ϵ
\epsilon
ϵ是一个辅助的独立随机变量,转换函数
⊤
ϕ
\top_{\phi}
⊤ϕ的参数为
ϕ
\phi
ϕ,将
⊤
\top
⊤转换成
z
z
z。例如,
q
ϕ
(
z
∣
x
)
q_{\phi}(z|x)
qϕ(z∣x)的一个常见选择是具有对角线协方差结构的多变量高斯:
其中
⊙
\odot
⊙ 指点乘。
重参数化技巧也适用于其他类型的分布,不仅仅是高斯分布。在多变量高斯的情况下,我们通过学习分布的均值和方差
μ
\mu
μ和
σ
\sigma
σ,重参数化技巧使模型可以训练,而随机性仍然在随机变量
ϵ
∼
N
(
0
,
I
)
\epsilon \sim N(0, I)
ϵ∼N(0,I)中。
参考
https://zhuanlan.zhihu.com/p/497876029
https://segmentfault.com/a/1190000040189538?utm_source=sf-similar-article