VAE 总结整理
原始VAE介绍
VAE是一种生成模型,通过隐变量z生成目标数据X。核心是希望训练一种模型,可以将某个概率分布映射到训练集的概率分布。
所以核心在于:
1)隐变量的概率分布如何选择
2)如何衡量生成的概率分布与已有的概率分布之间的差异
3)如何将这种差异用于调整网络参数
变量列表
变量名 | 含义 |
---|---|
X , X X, \mathcal X X,X | 数据点,数据点所属空间 |
D a t e Date Date | 数据集, X X X是从 D a t a Data Data中采样得到的 |
P ( ∗ ) P(*) P(∗) | 变量 ∗ * ∗的概率 |
p ( ∗ ) p(*) p(∗) | 变量 ∗ * ∗的概率密度函数 |
z , Z z,\mathcal Z z,Z | 隐变量,隐变量所属空间 |
f ( ∗ ) f(*) f(∗) | 神经网络 |
q ( z ) q(z) q(z) | 更容易产生X的z空间对应的概率密度函数 |
θ , Θ \theta,\mathcal \Theta θ,Θ | 网络参数,参数空间 |
μ \mu μ | 均值 |
σ \sigma σ | 标准差 |
ϵ \epsilon ϵ | 参数重整化技巧用到的变量, ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal N(0,I) ϵ∼N(0,I) |
D \mathcal D D | KL散度 |
网络思想
在生成模型中,需要一个隐变量指导网络生成对象。比如,在生成0~9的手写字符时,先决定生成哪一个数字,再进行生成,也就是有一个映射 f : Z × Θ → X f:\mathcal Z × \mathcal \Theta \rightarrow \mathcal X f:Z×Θ→X。如果在 Z \mathcal Z Z上随机采样,随机变量是 z z z,概率密度函数是 p ( z ) p(z) p(z),根据全概率公式:
p ( X ) = ∫ p ( X ∣ z ; θ ) p ( z ) d z p(X)=\int p(X|z;\theta)p(z)dz p(X)=∫p(X∣z;θ)p(z)dz
也就是希望生成 X X X的概率最大。在VAE中,一般假定输出满足正态分布,即 X = f ( z ; θ ) ∼ N ( f ( z ; θ ) , σ 2 I ) X=f(z;\theta) \sim \mathcal N(f(z;\theta),\sigma^2I) X=f(z;θ)∼N(f(z;θ),σ2I)
编码器
为了求解(1)中的积分,需要处理两个问题:如何定义 z z z,如何在 z z z上积分。
问题1:如何定义z
假定 z z z并不能直接解释,但是可以从一个简单的分布中提取,比如正态分布 N ( 0 , I ) \mathcal N(0,I) N(0,I),因为只要有一个足够复杂的映射,比如神经网络 f ( z ; θ ) f(z;\theta) f(z;θ),d维的正态分布可以变为d维中的任意分布。
问题2:如何求解积分(1)
首先从因空间中提取足够多的 z = { z 1 , z 2 , . . . z n } z=\{z_1,z_2,...z_n\} z={ z1,z2,...zn},再计算 p ( X ) ≈ 1 n ∑ i = 1 n p ( X ∣ z i ) p(X) \approx \frac {1}{n}\sum\limits_{i=1}^{n}p(X|z_i) p(X)≈n1i=1∑np(X∣zi),
但是这带来了新的问题:
1)为了成功估计p(x),n值要取很大,很多的z对于X的生成不起作用;
2)由于假定X满足高斯分布,其实也就是 A e x p { − ∣ ∣ X − f ( z ; θ ) ∣ ∣ 2 2 σ 2 } Aexp\{-\frac {||X-f(z;\theta)||^2}{2\sigma^2}\} Aexp{ −2σ2∣∣X−f(z;θ)∣∣2},核心是一个平方距离 ∣ ∣ X − f ( z ; θ ) ∣ ∣ 2 ||X-f(z;\theta)||^2 ∣∣X−f(z;θ)∣∣2,也就导致不那么像X的生成结果反而得分比较高:
为了避免以上的问题,VAE将重心放在对X生成贡献大的z上。
采用一个新的分布 q ( z ∣ X ) ∈ Q q(z|X)∈Q q(z∣X)∈Q,显然 Q ⫋ Z Q\subsetneqq\mathcal Z Q⫋Z,计算 E z ∼ Q p ( X ∣ z ) E_{z\sim Q}p(X|z) Ez∼Qp(X∣z)就很容易, q q q不是标准正态分布。首先将 E z ∼ Q p ( X ∣ z ) E_{z\sim Q}p(X|z) Ez∼Qp(X∣z)与 p ( X ) p(X) p(X)联系起来。从KL散度入手:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \mathcal D[q(z…
移项,得
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ logp(X)-\mathc…
观察这个等式,左边是我们的优化目标:
1) l o g p ( X ) logp(X) logp(X)要尽可能大,越大说明我们从z生成X的效果越好;
2) D [ q ( z ) ∣ ∣ p ( z ∣ X ) ] \mathcal D[q(z)||p(z|X)] D[q(z)∣∣p(z∣X)]要尽可能小,越小说明 q q q与 p p p越接近,也就是说明我们 Q Q Q空间接近可以产生X的 Z \mathcal Z Z空间部分;
3) p ( X ∣ z ) ] p(X|z)] p(X∣z)]充当了解码器,将z映射到X;
4) q ( z ∣ X ) q(z|X) q(z∣X)充当了编码器,将X映射到z;
损失函数
第一项: l o g p ( X ∣ z ) logp(X|z) logp(X∣z)
由于我们假设 X = f ( z ; θ ) ∼ N ( f ( z ; θ ) , σ 2 I ) X=f(z;\theta) \sim \mathcal N(f(z;\theta),\sigma^2I) X=f(z;θ)∼N(f(z;θ),σ2I),所以取了对数以后,直接看分子的平方项即可,其余都是常数。那么也就是 E z ∼ Q [ 1 n σ 2 ∣ ∣ X − f ( z ; θ ) ∣ ∣ 2 ] E_{z\sim Q}[\frac{1}{n\sigma^2}||X-f(z;\theta)||^2] Ez∼Q[nσ21∣∣X−f(z;θ)∣∣2]
第二项: D [ q ( z ∣ X ) ∣ ∣ p ( z ) ] \mathcal D[q(z|X)||p(z)] D[q(z∣X)∣∣p(z)]
假设 q ( z ∣ X ) = N ( μ ( X ) , Σ ( X ) ) q(z|X)= \mathcal N(\mu(X),\Sigma(X)) q(z∣X)=N(μ(X),Σ(X)),那么计算两个正态分布的KL散度即可。
首先看一般的:
D [ N ( μ 0 , Σ 0 ) ∣ ∣ N ( μ 1 , Σ 1 ) ] = E X ∼ N 0 [ l o g N 0 − l o g N 1 ] = 1 2 E X ∼ N 0 [ − l o g ∣ Σ 0 ∣ + l o g ∣ Σ 1 ∣ − ( X − μ 0 ) T Σ 0 − 1 ( X − μ 0 ) + ( X − μ 1 ) T Σ 1 − 1 ( X − μ 1 ) ] = 1 2 l o g ∣ Σ 1 ∣ ∣ Σ 0 ∣ − 1 2 E X ∼ N 0 [ ( X − μ 0 ) T Σ 0 − 1 ( X − μ 0 ) + ( X − μ 0 − μ 1 + μ 0 ) T Σ 1 − 1 ( X − μ 0 − μ 1 + μ 0 ) ]