Neural Discrete Representation Learning(VQ-VAE)


发表时间:2018(NIPS 2017)
文章要点:文章设计了一个新的基于VAE的自编码器Vector Quantised-Variational AutoEncoder (VQ-VAE)。区别在于之前的自编码器去学latent representation的时候都是去学一个连续的向量,这篇文章学了一个离散的表示。注意,离散并不意味着one-hot,只要是离散的数字就ok。
比如图中这个图像的例子,最后学到的z(latent feature spaces)就是一个32x32的矩阵,每个位置都是一个取值范围为1-K的数字。这个K表示的是embedding space的向量个数。z的每个数字就对应一个latent embedding vector \(e_i\)。然后要解码的时候,就用这个z去embedding space里面去找对应的\(e_i\)然后组装成紫色那个方块\(z_q (x)\),然后解码出图像。这里embedding space里面的\(e_i\)是一个D维的向量,我个人感觉这个向量是个实值向量,不是one-hot的,文章的离散主要指的是一共只有K个embedding vectors,不管多少张图片,他的representation都是这K个vectors组合起来的,所以z是离散的。那么z的每个位置的数字是怎么得到的呢?就是从绿色的方块\(z_e (x)\)得到的。\(z_e (x)\)的每个向量去和embedding vector计算距离,取距离最近的embedding vector对应的index就行。然后这会导致一个小问题,中间这个地方的梯度是断了的,不能直接PB。文章中的方式也很暴力,就是后面BP到\(z_q (x)\)之后,直接将这个梯度信息对应到\(z_e (x)\)上去。最后还加了个正则项之类的东西,最后损失变成

总结:这篇文章的出发点就是很多时候我们并不需要连续的表征,离散的表征就已经足够了。比如人只要认识三千个汉字就能说话写文章,表达丰富的含义了。挺有道理的,但是文章讲的有点不清楚,不知道整个理解有没有到位。比如\(e_i\)是不是one-hot的?如果不是的话,那么要维护K个向量,要维护的模型参数就变多了,毕竟之前的VAE虽然是连续表征,但是也只用维护一个向量。这里相当于有一个离散的z,但是这个z的背后实际上是K个向量。
疑问:具体更新方式其实还没弄明白,另外loss为啥设计成这样也不清楚。

posted @ 2021-08-10 06:29  initial_h  阅读(1307)  评论(0编辑  收藏  举报