在我看来,几大顶会之中,ICLR的论文通常是最有意思的,因为它们的选题和风格基本上都比较轻松活泼、天马行空,让人有脑洞大开之感。所以,ICLR 2020的投稿论文列表出来之后,我也抽时间粗略过了一下这些论文,确实发现了不少有意思的工作。

其中,我发现了两篇利用去噪自编码器的思想做生成模型的论文,分别是《Learning Generative Models using Denoising Density Estimators》《Annealed Denoising Score Matching: Learning Energy-Based Models in High-Dimensional Spaces》。由于常规做生成模型的思路我基本都有所了解,所以这种“别具一格”的思路就引起了我的兴趣。细读之下,发现两者的出发点是一致的,但是具体做法又有所不同,最终的落脚点又是一样的,颇有“一题多解”的美妙,遂将这两篇论文放在一起,对比分析一翻。

去噪自编码 #

两篇论文的根本出发点都是去噪自编码器,更准确地说,它利用了去噪自编码器的最优解

基本结果:x,εRd,并且xp(x),εu(ε),这里u(ε)=N(0,σ2Id),那么 r(x)=argminrExp(x),εN(0,σ2Id)[r(x+ε)x2]=x+σ2xlogˆp(x)

其中ˆp(x)=[pu](x)=p(xε)u(ε)dε=p(ε)u(xε)dε指的是分布p(x)u(ε)的卷积运算,具体含义是x+ε的概率密度,换言之,如果p(x)代表真实图片的分布,那么如果我们能实现从ˆp(x)中采样,那么得到的是一批带有高斯噪声的真实图片。

结果(1)也就是说加性高斯噪声的最优去噪自编码器是能显式地计算出来,并且结果跟分布的梯度有关。这个结果非常有意思,也非常深刻,值得我们多加回味。比如,(1)告诉我们r(x)x实际上就是对(带噪声的)真实分布梯度的估计,而有了真实分布的梯度,其实可以做很多事情,尤其是生成模型相关的事情。

证明:其实(1)的证明并不困难,变分目标得到
δp(x)u(ε)r(x+ε)x22dxdε=δp(x)u(yx)r(y)x22dxdy=2p(x)u(yx)r(y)x,δr(y)dxdy

所以p(x)u(yx)(r(y)x)dx=0,即
r(y)=p(x)u(yx)xdxp(x)u(yx)dx

代入表达式u(ε)=1(2πσ2)d/2exp(ε222σ2),即得
r(y)=y+σ2ylog[pu](y)

曲径通幽处 #

我们首先来介绍一下《Learning Generative Models using Denoising Density Estimators》的思路。按照GAN和VAE的通常习惯,我们是希望训练一个映射x=G(z),使得从先验分布q(z)中采样出来的z都能被映射为一个真实样本,用概率的话说,那就是希望拉近p(x)和下述的q(x)的距离:
q(x)=q(z)δ(xGθ(z))dz


为此,GAN常用的优化目标是最小化KL(q(x)p(x)),这个观点可以参考《用变分推断统一理解生成模型(VAE、GAN、AAE、ALI)》《能量视角下的GAN模型(二):GAN=“分析”+“采样”》。但是,由于前面估计的是ˆp(x)的梯度,我们可以换个目标:最小化KL(ˆq(x)ˆp(x))

为了,我们可以进行演算:
KL(ˆq(x)ˆp(x))=ˆq(x)logˆq(x)ˆp(x)dx=q(x)u(ε)logˆq(x+ε)ˆp(x+ε)dxdε=q(z)δ(xGθ(z))u(ε)logˆq(x+ε)ˆp(x+ε)dxdεdz=q(z)u(ε)logˆq(Gθ(z)+ε)ˆp(Gθ(z)+ε)dεdz=Ezq(z),εu(ε)[logˆq(Gθ(z)+ε)logˆp(Gθ(z)+ε)]


这个目标需要我们能得到logˆp(x)logˆq(x)的估计。我们可以用神经网络构建两个RdR的模型Ep(x)Eq(x),然后分别去最小化
argminEpExp(x),εN(0,σ2Id)[xEp(x+ε)+ε2]argminEqExq(x),εN(0,σ2Id)[xEq(x+ε)+ε2]

也就是用xEp(x)+xxEq(x)+x作为去噪自编码器,根据结果(1),我们就有
{xEp(x)+x=x+σ2xlogˆp(x)xEq(x)+x=x+σ2xlogˆq(x){Ep(x)=σ2logˆp(x)+C1Eq(x)=σ2logˆq(x)+C2

也就是说在相差一个常数的情况下,Ep(x)正比于logˆp(x)Eq(x)也正比于logˆq(x),而常数不影响优化,所以我们可以将Ep(x)Eq(x)替换到(6)里边去,得到
KL(ˆq(x)ˆp(x))Ezq(z),εu(ε)[Eq(Gθ(z)+ε)Ep(Gθ(z)+ε)]

这就得到了一个生成模型的流程:

选定先验分布q(z),初始化Gθ(z),事先求好Ep(x)。循环执行下面的3步直到收敛:

  1、选一批zq(z),选一批噪声εN(0,σ2Id),合成一批带噪声的假样本x=Gθ(z)+ε

  2、利用这批带噪声的假样本训练Eq(x)

  3、固定Ep,Eq,用梯度下降根据(9)更新若干步Gθ

这篇论文的实验比较简单,只做了mnist和fashion mnist的实验,证明了它的可行性:

fashion mnist的生成效果

fashion mnist的生成效果

峰回路转间 #

另外一篇论文《Annealed Denoising Score Matching: Learning Energy-Based Models in High-Dimensional Spaces》就更粗暴直接了,它相当于去噪自编码器跟《能量视角下的GAN模型(三):生成模型=能量模型》的结合。

因为(1)已经帮我们得到了xlogˆp(x)=(r(x)x)/σ2了(当然这篇论文的实际做法也不是直接用神经网络拟合r(x),而是像(7)一样用神经网络拟合一个标量函数的,但这不影响思想),其实这就能够帮助我们从ˆp(x)采样了。当然采样出来的图片是有噪声的,我们还需要它采样出来的结果传入r(x)去噪一下,即
p(x)=Exnoiseˆp(x)[δ(xr(xnoise))]

那具体来说怎么从ˆp(x)采样呢?Langevin方程!因为已经知道了xlogˆp(x),那么下述Langevin方程
xt+1=xt+12εxlogˆp(x)+εα,αN(α;0,1)


ε0t时,序列{xt}所服从的分布就是从ˆp(x),换句话说,ˆp(x)是该Langevin方程的静态分布。

于是,从ˆp(x)采样这个过程,就被《Annealed Denoising Score Matching: Learning Energy-Based Models in High-Dimensional Spaces》用这么一种粗暴直接(但我觉得不优雅)的方法解决了,所以训练完去噪自编码后,就自动地得到了一个生成模型了...

总的过程是:

1、训练去噪自编码器r(x),得到xˆp(x)

2、用迭代过程(10)采样,采样结果是一批带噪声的真实样本;

3、将第2步的采样结果传入r(x)去噪,得到无噪声的样本。

当然,论文还有很多细节,论文的核心技巧是用了退火技巧来稳定训练过程,提高生成质量,但笔者对这些并不是很感兴趣,因为我只是想学习一些新奇的生成模型思想,拓宽视野。不过不得不说,虽然做法有点粗暴,这篇论文的生成效果还是有一定的竞争力的,在fashion mnist、CelebA、cifar10都有相当不错的生成效果:

fashion mnist、CelebA、cifar10上的生成效果

fashion mnist、CelebA、cifar10上的生成效果

曲终人散时 #

本文介绍了投稿ICLR 2020的两篇类似的论文,都是利用去噪自编码器来做生成模型的,因为之前我没了解过相关思路,所以就饶有兴致对比阅读了一番。

且不说生成效果如何,我觉得它们都是颇具启发性的,能引起我的一些思考(不仅是CV,还包括NLP方面的)。比如Bert的MLM预训练方式本质上也是一个去噪自编码器,那有没有类似(1)的结果?或者反过来,类似(1)的结果能不能启发我们构造一些新的预训练任务,又或者能不能借此说清楚pretrain + finetune这种流程的本质原理?

转载到请包括本文地址:https://spaces.ac.cn/archives/7038

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Oct. 31, 2019). 《从去噪自编码器到生成模型 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/7038

@online{kexuefm-7038,
        title={从去噪自编码器到生成模型},
        author={苏剑林},
        year={2019},
        month={Oct},
        url={\url{https://spaces.ac.cn/archives/7038}},
}