首页 / 资料库 / 微软 · AI 入门

资料库18 分钟读完MIT自编码器VAE生成模型计算机视觉

自编码器

译自《Autoencoders》 · 查看英文原文

原文出处Autoencoders 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。

训练 CNN 有个麻烦:需要大量带标签的数据。做图像分类,得把图片归到不同的类,这是人工活。

课前测验

但训练 CNN 的特征提取器,也许可以直接用原始数据,不给标签,这叫自监督学习(self-supervised learning)。不用标签,我们把训练图像同时当作网络的输入和输出。自编码器(autoencoder)的主要想法是:先有一个编码器网络(encoder network),把输入图像转换成某个隐空间(latent space)里的表示(通常就是一个尺寸更小的向量);再接一个解码器网络(decoder network),任务是重建出原始图像。

自编码器是"一种人工神经网络,用来学习无标签数据的高效编码"。

训练自编码器时,我们要求它尽可能多地保留原图信息,以便准确重建,网络因此会去找输入图像最佳的嵌入(embedding),把内容的含义装进去。原文此处有一张图,画的是自编码器的基本结构:图像进编码器,压缩成隐向量,再进解码器还原出图像(图来自 Keras 博客)。

自编码器的使用场景

重建原图这件事单看没什么用,但下面几种场景,自编码器特别合适:

  • 降低图像维度以便可视化,或者训练图像的嵌入向量。自编码器通常比 PCA(主成分分析)效果好,因为它考虑了图像的空间性质和分层特征。
  • 去噪(denoising),也就是去掉图像里的噪声。噪声携带的大多是没用的信息,相对狭小的隐空间装不下它们,自编码器便只保留图像中要紧的部分。训练去噪器时,我们从原始图像出发,把人为加了噪声的图像作为自编码器的输入。
  • 超分辨率(super-resolution),提高图像分辨率。我们从高分辨率图像出发,把降了分辨率的图像作为自编码器的输入。
  • 生成模型(generative model)。自编码器训练好之后,解码器那半部分可以用来创造新对象:从一个随机的隐向量出发即可。

变分自编码器(VAE)

传统的自编码器以某种方式压缩输入数据的维度,找出输入图像的重要特征。但隐向量往往看不出什么意义。换句话说,以 MNIST 数据集为例,想知道哪些数字对应哪些隐向量并不容易,因为相互靠近的隐向量未必对应同一个数字。

反过来,要训练生成模型,最好对隐空间有些把握。这个想法把我们引向变分自编码器(variational autoencoder,VAE)

VAE 是一种自编码器,它学的不是隐参数本身,而是隐参数的统计分布,即所谓的隐分布(latent distribution)。比如,我们可以要求隐向量服从正态分布,带某个均值 z_mean 和标准差 z_sigma(均值和标准差都是某个 d 维向量)。VAE 的编码器学会预测这些参数,解码器则从这个分布里随机取一个向量来重建对象。

总结成三步:

  • 从输入向量出发,预测 z_meanz_log_sigma(不直接预测标准差,预测的是它的对数)
  • 从分布 N(z_mean, exp(z_log_sigma)) 中采样一个向量 sample
  • 解码器拿 sample 作为输入向量,尝试解出原始图像

原文此处有一张图,画的就是这条链路:输入经过编码器输出 z_mean 与 z_log_sigma,采样后交给解码器重建(图出自 Isaak Dykeman 的这篇博客)。

变分自编码器使用一个复杂的损失函数,由两部分组成:

  • 重建损失(reconstruction loss):衡量重建出的图像离目标有多近(可以用均方误差 Mean Squared Error,即 MSE)。这一项和普通自编码器完全相同。
  • KL 损失(KL loss):让隐变量的分布贴近正态分布。它建立在库尔贝克-莱布勒散度(Kullback-Leibler divergence)的概念上,这个指标用来估计两个统计分布有多相似。

VAE 有一个重要优点:生成新图像相对容易,因为我们知道该从哪个分布里采样隐向量。比如,用二维隐向量在 MNIST 上训练一个 VAE,之后改变隐向量的各个分量,就能得到不同的数字。原文此处有一张图,展示隐空间坐标变化时,生成的手写数字如何连续演变(图作者 Dmitry Soshnikov)。

注意观察:当隐向量落到隐参数空间的不同区域,图像会互相融合。这个空间还可以用二维方式可视化,原文此处有另一张图,画的是各数字在二维隐空间里聚成的簇(图作者同样是 Dmitry Soshnikov)。

练习:自编码器

在配套的 notebook 里进一步了解自编码器:

自编码器的性质

  • 数据特定(data specific):自编码器只对训练时用过的那类图像有效。比如用花卉图像训练一个超分辨率网络,拿它处理人像就不灵。原因是网络输出的那些高分辨率细节,来自训练数据集里学到的特征。
  • 有损(lossy):重建出的图像和原图不一样。损失的性质由训练时用的损失函数决定。
  • 可以在无标签数据上工作。

课后测验

小结

这节课介绍了 AI 研究者手上的几种自编码器:怎么搭建,怎么用它们重建图像;还学了 VAE,以及怎样用它生成新图像。

挑战

这节课讲的是图像上的自编码器,它同样能用于音乐。看看 Magenta 项目的 MusicVAE,这个自编码器学的是重建音乐。用这个库做些实验,看能生成什么。

课后测验

复习与自学

想再查资料,可以看这几个关于自编码器的资源:

作业

这个使用 TensorFlow 的 notebook末尾能找到一道"任务"题,把它当作你的作业。

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课