【论文解读】VAE: Auto-Encoding Variational Bayes(变分自编码器)


代码实现: 基于tensorflow2.2实现,代码见github

参考文献
1. Auto-Encoding Variational Bayes
2. 变分自编码器VAE:原来是这么一回事 | 附开源代码


基于潜变量的生成模型

模型联合概率分布可表示为 p θ ( x , z ) = p θ ( x ∣ z ) p θ ( z ) p_{\bm\theta}(\bm x,\bm z)=p_\bm\theta(\bm x|\bm z)p_\bm \theta(\bm z) pθ(x,z)=pθ(xz)pθ(z),模型的生成过程为
z ∼ p θ ( z )    ⟹    x ∼ p θ ( x ∣ z ) \bm z\sim p_\bm \theta(\bm z) \implies \bm x\sim p_\bm \theta(\bm x|\bm z) zpθ(z)xpθ(xz)
考虑一个独立同分布数据集 X = { x ( i ) } i = 1 N X=\{\bm x^{(i)}\}_{i=1}^N X={x(i)}i=1N,我们假设数据的生成过程为:

  • 基于先验分布 p θ ( z ) p_\bm \theta(\bm z) pθ(z)生成随机变量 z \bm z z
  • 基于条件概率分 p θ ( x ∣ z ) p_\bm \theta(\bm x|\bm z) pθ(xz)生成样本 x \bm x x

然而,我们很难获取因变量 z \bm z z的分布,如先验概率分布 p θ ( z ∣ x ) = p θ ( x ∣ z ) p θ ( z ) / p θ ( x ) p_\bm \theta(\bm z|\bm x)=p_\bm \theta(\bm x|\bm z)p_\bm \theta(\bm z)/p_\bm \theta(\bm x) pθ(zx)=pθ(xz)pθ(z)/pθ(x)难以计算。

使用后验概率分布 q ϕ ( z ∣ x ) q_\bm \phi(\bm z|\bm x) qϕ(zx)作为真实后验概率分布 p θ ( z ∣ x ) p_\bm \theta(\bm z|\bm x) pθ(zx)的近似,将 q ϕ ( z ∣ x ) q_\bm \phi(\bm z|\bm x) qϕ(zx)可作为编码器,即给定样本 x \bm x x下,生成包含所有可能的编码 z \bm z z,并可通过编码 z \bm z z重新生成样本 x \bm x x。同样地,将 p θ ( x ∣ z ) p_\bm \theta(\bm x|\bm z) pθ(xz)作为解码器,即给定编码 z \bm z z,生成与 x \bm x x对应的分布。

再看一下,传统高斯混合模型的生成思想:

p ( x ) = ∑ z p ( z ) p ( x ∣ z ) p(x)=\sum_zp(z)p(x|z) p(x)=zp(z)p(xz)
式中 p ( z ) ∼ N ( 0 , I ) p(z)\sim\mathcal N(0, I) p(z)N(0,I) p ( x ∣ z ) ∼ N ( μ ( z ) , σ ( z ) ) p(x|z)\sim\mathcal N(\mu(z),\sigma(z)) p(xz)N(μ(z),σ(z))

我们从标准正太分布中采样一个 z z z,再根据 z z z计算对应各高斯混合基模型的均值和方差,就可以利用高斯混合模型生成 x x x。但是这种模型显然没有利用到监督样本数据,即如何将采样 z z z对应到 x x x?模型的损失函数是什么?

VAE的思想是,每个样本都有自己特定的正太分布 q ( z ∣ x ) q(z|x) q(zx),我们有理由学习一个解码器/生成器,把从特定正太分布采样的 z z z还原为 x x x 我们可从特定分布 q ( z ∣ x ) q(z|x) q(zx)中随机采样,生成各式各样与 x x x类似的样本,为了使模型具备通用生成能力(不根据真实样本),我们希望所有的 q ( z ∣ x ) q(z|x) q(zx)都近似于标准正太分布,这样我们就可以从标准正太分布中采样,生成随机样本。


变分边界与目标函数

独立同分布数据集对数似然为
log ⁡ p θ ( x ( 1 ) , ⋯   , x ( N ) ) = ∑ x log ⁡ p θ ( x ) \log p_\bm \theta(\bm x^{(1)},\cdots,\bm x^{(N)})=\sum_\bm x\log p_\bm \theta(\bm x) logpθ(x(1),,x(N))=xlogpθ(x)

对于单个样本
log ⁡ p θ ( x ) = ∫ z q ϕ ( z ∣ x ) log ⁡ p θ ( x ) d z = ∫ z q ϕ ( z ∣ x ) log ⁡ ( p θ ( z , x ) q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) p θ ( z ∣ x ) ) d z = ∫ z q ϕ ( z ∣ x ) log ⁡ ( p θ ( x ∣ z ) p θ ( z ) q ϕ ( z ∣ x ) ) d z + ∫ z q ϕ ( z ∣ x ) log ⁡ ( q ϕ ( z ∣ x ) p θ ( z ∣ x ) ) d z = L b + D K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) = − D K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ) ) + E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) ] + D K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) \begin{aligned} \log p_\bm \theta(\bm x) &=\int_\bm zq_\bm \phi(\bm z|\bm x)\log p_\bm \theta(\bm x)\text d\bm z\\[2ex] &=\int_\bm zq_\bm \phi(\bm z|\bm x)\log\left(\frac{p_\bm \theta(\bm z,\bm x)}{q_\bm \phi(\bm z|\bm x)}\frac{q_\bm \phi(\bm z|\bm x)}{p_\bm \theta(\bm z|\bm x)}\right)\text d\bm z\\[2ex] &=\int_\bm zq_\bm \phi(\bm z|\bm x)\log\left(\frac{p_\bm \theta(\bm x|\bm z)p_\bm \theta(\bm z)}{q_\bm \phi(\bm z|\bm x)}\right)\text d\bm z + \int_\bm zq_\bm \phi(\bm z|\bm x)\log\left(\frac{q_\bm \phi(\bm z|\bm x)}{p_\bm \theta(\bm z|\bm x)}\right)\text d\bm z\\[2ex] &=L_b+D_{KL}\Big(q_\bm \phi(\bm z|\bm x)\big|\big|p_\bm \theta(\bm z|\bm x)\Big)\\[2ex] &=-D_{KL}\Big(q_\bm \phi(\bm z|\bm x)\big|\big|p_\bm \theta(\bm z)\Big)+\Bbb E_{q_\bm \phi(\bm z|\bm x)}[\log p_\bm \theta(\bm x|\bm z)]+D_{KL}\Big(q_\bm \phi(\bm z|\bm x)\big|\big|p_\bm \theta(\bm z|\bm x)\Big) \end{aligned} logpθ(x)=zqϕ(zx)logpθ(x)dz=zqϕ(zx)log(qϕ(zx)pθ(z,x)pθ(zx)qϕ(zx))dz=zqϕ(zx)log(qϕ(zx)pθ(xz)pθ(z))dz+zqϕ(zx)log(pθ(zx)qϕ(zx))dz=Lb+DKL(qϕ(zx)pθ(zx))=DKL(qϕ(zx)pθ(z))+Eqϕ(zx)[logpθ(xz)]+DKL(qϕ(zx)pθ(zx))
因为KL散度为不小于0的距离度量,因此 L b L_b Lb为目标函数下界。因为目标函数值与 q ϕ ( z ∣ x ) q_\bm\phi(\bm z|\bm x) qϕ(zx)无关,调整 q ϕ ( z ∣ x ) q_\bm\phi(\bm z|\bm x) qϕ(zx)最大化 L b L_b Lb,目标函数值不改变,但目标函数第二项KL散度趋近于0,若继续调整 p θ ( x ∣ z ) p_\bm\theta(\bm x|\bm z) pθ(xz)以最大化 L b L_b Lb,则目标函数值很有可能增加。因此,最大化目标函数的下界 L b L_b Lb即可,第三项KL散度可忽略


VAE模型结构

训练过程中,编码器为每个样本 x \bm x x生成对应正太分布的均值和方差,表示样本来自于 N ( μ ( z ) , σ ( z ) ) \mathcal N(\mu(z),\sigma(z)) N(μ(z),σ(z)),解码器将从 N \mathcal N N中的采样,重构回对应的样本 x \bm x x

同一样本在不同mini-batch中对应不同的分布,模型为了更好重构,倾向于将编码器输出方差至为0,这样就丧失了随机性,即模型丧失样本生成能力,退化为普通的AutoEncoder。因此,VAE约束所有编码向量服从标准正太分布,从而防止噪声为零。

由于
− D K L ( N ( μ , σ 2 ∣ ∣ N ( 0 , 1 ) ) ) = 1 2 ( log ⁡ σ 2 − μ 2 − σ 2 + 1 ) -D_{KL}\Big(\mathcal N(\mu, \sigma^2\big|\big|\mathcal N(0, 1))\Big)=\frac{1}{2}\Big(\log\sigma^2-\mu^2-\sigma^2+1\Big) DKL(N(μ,σ2N(0,1)))=21(logσ2μ2σ2+1)
如果,我们强制令 p θ ( z ) p_\theta(z) pθ(z)服从标准正太分布,最大化目标函数等价于最大化
1 2 ( − log ⁡ σ 2 + μ 2 + σ 2 − 1 ) + E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) ] \frac{1}{2}\Big(-\log\sigma^2+\mu^2+\sigma^2-1\Big)+\Bbb E_{q_\bm \phi(\bm z|\bm x)}[\log p_\bm \theta(\bm x|\bm z)] 21(logσ2+μ2+σ21)+Eqϕ(zx)[logpθ(xz)]

其中,第一项为 正则化损失,它有助于学习具有良好结构的潜在空间;第二项为 重构损失,它迫使解码后的样本匹配初始输入,如mnist数据集规范化为[0, 1]区间,解码器使用sigmoid输出,则此项为交叉熵。


此外,采样操作不可导,模型实现使用 重参数技巧
ϵ ∼ N ( 0 , 1 )    ⟹    μ + ϵ × σ ∼ N ( μ , σ 2 ) \epsilon\sim\mathcal N(0, 1) \implies \mu+\epsilon\times \sigma \sim\mathcal N(\mu,\sigma^2) ϵN(0,1)μ+ϵ×σN(μ,σ2)
根据编码器生成样本的均值和方差,但是我们不能直接生成对应的正太分布,再从中采样作为编码器输出,因为采样过程不可导。换种思路,从标准正太分布中采样数据(作为样本数据不参与求导),根据编码器输出将其变换到对应的正太分布,再作为编码器输出。

神经网络实现VAE

  • 16
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值