文章目录
  • 阅读本文你可以了解到
  • 1 VQ-VAE的核心思想
  • 1.1 为什么VQ-VAE想要把图像编码成离散向量?
  • 1.2 VQ-VAE引入codebook(即embedding space嵌入空间)
  • 1.3 VQ-VAE的工作过程
  • 2 VQ-VAE实现方法
  • 2.1 VQ-VAE的编码器怎么输出离散向量。
  • 2.2 VQ-VAE怎么优化编码器和解码器
  • 2.3 VQ-VAE怎么优化嵌入空间

阅读本文你可以了解到

  • VQ-VAE的核心思想
  • VQ-VAE中关键算法的具体形式
  • VQ-VAE的贡献及其对其他工作的影响

通过阅读这篇文章,你不仅能理解VQ-VAE本身的原理,更能知道如何将VQ-VAE中的核心机制活学活用。

1 VQ-VAE的核心思想

1.1 为什么VQ-VAE想要把图像编码成离散向量?

最早的自编码器(Autoencoder, AE),AE是一类能够把图片压缩成较短的向量的神经网络模型,其结构如下图所示。AE包含一个编码器

和一个解码器

。在训练时,输入图像

会被编码成一个较短的向量

,再被解码回另一幅长得差不多的图像

。网络的学习目标是让重建出来的图像

和原图像

尽可能相似。

解码器可以把一个向量解码成图片。换一个角度看,解码器就是一个图像生成模型,因为它可以根据向量来生成图片。那么,AE可不可以用来做图像生成呢?很可惜,AE的编码器编码出来的向量空间是不规整的。也就是说,解码器只认识经编码器编出来的向量,而不认识其他的向量。如果你把自己随机生成出来的向量输入给解码器,解码器是生成不出有意义的图片的。AE不能够随机生成图片,所以它不能很好地完成图像生成任务,只能起到把图像压缩的作用。AE离图像生成只差一步了。只要AE的编码空间比较规整,符合某个简单的数学分布(比如最常见的标准正态分布),那我们就可以从这个分布里随机采样向量,再让解码器根据这个向量来完成随机图片生成了。VAE就是这样一种改进版的AE。它用一些巧妙的方法约束了编码向量

,使得