强大的NVAE:以后再也不能说VAE生成的图像模糊了
©PaperWeekly 原创 · 作者|苏剑林
单位|追一科技
研究方向|NLP、神经网络
前几天笔者在日常刷 arixv 的时候,然后被一篇新出来的论文震惊了!论文名字叫做 NVAE: A Deep Hierarchical Variational Autoencoder,顾名思义是做 VAE 的改进工作的,提出了一个叫 NVAE 的新模型。
然后笔者的第一感觉是这样的:W!T!F! 这真的是 VAE 生成的效果?这还是我认识的 VAE 么?看来我对 VAE 的认识还是太肤浅了啊,以后再也不能说 VAE 生成的图像模糊了...
不过再看了看作者机构,原来是 NVIDIA,这也大概能接受了。最近几年可能大家都留意到 NVIDIA 通常都在年底发布个生成模型的突破,2017 年底是 PGGAN [1] ,2018 年底是 StyleGAN [2] ,2019 年底是 StyleGAN2 [3] 。
论文标题:NVAE: A Deep Hierarchical Variational Autoencoder
论文链接:https://arxiv.org/abs/2007.03898
可能读者认真观察后会说:好像还是有点假呀,那脸部也太光滑了,好像磨过皮一样,还比不上 StyleGAN 呀~
所以,你还觉得这不是一个突破吗?
1.1 基本介绍
VAE,即变分自编码器(Variational Auto-Encoder),本人已经有不少文章介绍过了,在公众号后台搜索“变分自编码器”就能搜到很多相关文章。这里做个简单的回顾和分析。
以及
改进 VAE 的一个经典方向是将 VAE 与 GAN 结合起来,比如 CVAE-GAN [4] 、AGE [5] 等,目前这个方向最先进结果大概是 IntroVAE [6] 。从理论上来讲,这类工作相当于隐式地放弃了 q(x|z) 是高斯分布的假设,换成了更一般的分布,所以能提升生成效果。
还有一个方向是引入离散的隐变量,典型代表就是 VQ-VAE,其介绍可以看笔者的《VQ-VAE 的简明介绍:量子化自编码器》[8] 。VQ-VAE 通过特定的编码技巧将图片编码为一个离散型序列,然后 PixelCNN 来建模对应的先验分布 q(z)。
前面说到,当 z 为连续变量时,可选的 p(z|x),q(z) 都不多,从而逼近精度有限;但如果z是离散序列的话,p(z|x),q(z) 对应离散型分布,而利用自回归模型(NLP 中称为语言模型,CV 中称为 PixelRNN/PixelCNN 等)我们可以逼近任意的离散型分布,因此整体可以逼近得更精确,从而改善生成效果。
铺垫了这么久,总算能谈到 NVAE 了。NVAE 全称是 Nouveau VAE(难道不是 Nvidia VAE?),它包含了很多当前 CV 领域的新成果,其中包括多尺度架构、可分离卷积、swish 激活函数、flow 模型等,可谓融百家之所长,遂成当前最强 VAE~
3.2 其他提升技巧
除了以上两点比较明显的特征外,其实 NVAE 还包含了很多对性能有一定提升的技巧,这里简单列举一些。
BN 层的改进。当前很多生成模型已经弃用 BN(Batch Normalization)了,多数会改用 IN(Instance Normalization)或 WN(Weight Normalization),因为发现用 BN 会损失性能。
NVAE 通过实验发现,其实 BN 对训练还是有帮助的,但对预测有害,原因是预测阶段所使用的滑动平均得来的均值方差不够好,所以 NVAE 在模型训练完后,通过多次采样同样 batch_size 的样本来重新估算均值方差,从而保证了 BN 的预测性能。此外,为了保证训练的稳定性,NVAE 还给 BN 的 \gamma 的模长加了个正则项。
谱正则化的应用。我们知道,任意两个分布的 KL 散度是无上界的,所以 VAE 里边的 KL 散度项也是无上界的,而优化这种无上界的目标是很“危险”的,说不准啥时候就发散了。
所以同样是为了稳定训练,NVAE 给每一个卷积层都加了谱正则化,其概念可以参考笔者之前的深度学习中的 Lipschitz 约束:泛化与生成模型。加谱归一化可以使得模型的 Lipschitz 常数变小,从而使得整个模型的 Landscape 更为光滑,更利于模型稳定训练。
更彻底的方案是,对于组内的每个分量也假设为自回归分布,但是这样一来在采样的时候就巨慢无比了(所有的分量串联递归采样)。
NVAE 提供了一个备选的方案,通过将组内分布建立为 flow模型来增强模型的表达能力,同时保持组内采样的并行性。实验结果显示这是有提升的,但笔者认为引入 flow 模型会大大增加模型的复杂度,而且提升也不是特别明显,感觉能不用就不用为好。
节省显存的技巧。尽管 NVIDIA 应该不缺显卡,但 NVAE 在实现上还是为省显存下了点功夫。一方面,它采用了混合精度训练,还顺带在论文推了一波自家的 APEX 库 [12] 。
3.3 更多效果图
到这里,NVAE 的技术要点基本上已经介绍完毕了。如果大家还觉得意犹未尽的话,那就多放几张效果图吧,让大家更深刻地体会 NVAE 的惊艳之处。
从下述训练表格来看,我们可以看到训练成本还是蛮大的,比同样分辨率的 StyleGAN 都要大,并且纵观整篇论文,可以发现有很多大大小小的训练 trick(估计还有不少是没写在论文里边的,当然,其实在 StyleGAN 和 BigGAN 里边也包含了很多类似的 trick,所以这不算是NVAE的缺点)。
对于笔者来说,NVAE 带来的思想冲击主要有两个。
第一,就是自回归的高斯模型可以很有力地拟合复杂的连续型分布。以前笔者以为只有离散分布才能用自回归模型来拟合,所以笔者觉得在编码时,也需要保持编码空间的离散型,也就是 VQ-VAE 那一条路。
而 NVAE 证明了,哪怕隐变量是连续型的,自回归高斯分布也能很好地拟合,所以不一定要走 VQ-VAE 的离散化道路了,毕竟连续的隐变量比离散的隐变量更容易训练。
nouveau (/nuːˈvoʊ/) 是一个自由及开放源代码显卡驱动程序,是为 Nvidia 的显卡所编写,也可用于属于系统芯片的 NVIDIA Tegra 系列,此驱动程序是由一群独立的软件工程师所编写,Nvidia 的员工也提供了少许帮助。该项目的目标为利用逆向工程 Nvidia 的专有 Linux 驱动程序来创造一个开放源代码的驱动程序。
由让 freedesktop.org 托管的 X.Org 基金会所管理,并以 Mesa 3D 的一部分进行散布,该项目最初是基于只有 2D 绘图能力的 “nv” 自由与开放源代码驱动程序所开发的,但红帽公司的开发者 Matthew Garrett 及其他人表示原先的代码被混淆处理过了。
nouveau 以 MIT 许可证许可。项目的名称是从法文的 “nouveau” 而来,意思是“新的”。这个名字是由原作者的的 IRC 客户端的自动取代功能所建议的,当他键入 “nv” 时就被建议改为 “nouveau”。
参考文献
更多阅读
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。