首先,本文讲解的VQ-VAE(全称:Vector Quantized Variational AutoEncoder,翻译:向量量化变分自编码器),来自T2M-GPT: Generating Human Motion from Textual Descriptions with Discrete Representations这篇2023年CVPR论文,中文翻译为“T2M-GPT:从具有离散表示的文本描述中生成人类运动”。本文主要讲解其两个模型中用到的VQ-VAE深度学习模型,用于运动的重建。
一、认识VQ-VAE
1.VQ-VAE与VAE
在认识VQ-VAE之前,我们需要先认识下VAE。VAE是一种生成模型,可以用于将高维数据(比如图片)进行编码并生成新的高维数据。生成模型和判别模型是相对应的,作为一个小镇做题家,我们用做题的例子来理解这两种模型。平时的题目有平时练习和最后的期末考试,把其理解成训练集和测试集,如果我们平时做大量的练习但不思考,如果我们考试的题目遇到过,期末考试时可能取得好成绩,但是题量不大,我们大概率在期末考试中不会取得高分,这就是判别模型;但如果你平时做题少,但注意总结方法,并能举一反三,即使平时题量很少,在期末中也可以取得好成绩,这对应生成模型。VAE通过将输入数据映射为潜在向量,并将潜在向量解码为生成数据,在编码和解码的过程中学习,实现了生成新数据的能力。
那什么是VQ-VAE呢?通过字母表示,可以看出其在VAE的前面加入了VQ(Vector Quantization),即向量量化操作。也就是说,上面VAE将输入数据映射为潜在向量之后,通过向量量化操作,将潜在空间中的连续向量量化为离散的向量,以便更好的表示和学习数据的结构和局部特征。最后,再从低维的离散向量解码,生成新数据或重构数据,在这篇paper中,VQ-VAE主要用于运动数据的重建,特别是编码和量化后生成的GPT模型,是后面。
从上面的描述中我们可以看出VQ-VAE在VQE的基础上加入量化操作,使得在潜在空间中进行解码时,VAE使用随机向量,而VQ-VAE使用离散向量进行。这样看似复杂的操作,重建的数据一定会造成损失,但这样做也一定有其存在的道理。
2.VQ-VAE重建原理
VQ-VAE的重建原理可以简述为以下几个步骤:
2.1 编码器将输入的高维连续数据映射到低维连续潜在向量空间。在这篇paper中,输入的高维连续数据是HumanML3D可以表示运动的数据集。
2.2 量化器将低维连续潜在向量映射到一个离散的向量,即在一组预定的原型向量中选择一个最匹配的向量作为潜在向量的近似值。
2.3 解码器将离散的潜在向量映射回高维连续数据空间,从而生成模型的输出。
2.4 通过最小化重构误差、嵌入误差和约束损失来训练模型,其中重构误差衡量原始数据与解码器输出之间的差异,量化器衡量潜在向量与最接近的原型向量之间的差异。
上面的式子就是VQ-VAE模型的损失函数,我们解释下这个式子。 是重构误差,用来衡量衡量重构数据与原始数据之间的差异;是嵌入误差,也称为码本损失,用于更新码本;是约束误差,目的是让encoder的输出更接近码本,是经验超参数,其需要根据具体的任务和数据集进行设定。其中的是指stop-gradient,就是切断传向其的梯度。
=,其中属于,是时间帧数,是原始运动的维度,所以本质上是一个 ()的二维矩阵。
=,属于,表示编码器 的时间下采样率,表示量化后数据的维度。对于第个潜在特征,通过代码本的量化可以找到中与最相似的元素。
使用和表示自动编码器的编码器和解码器。= 。
上面的式子是的误差公式,,。在这里,是和 的结合,同时具有两者的部分优点。当真实值和预测值差别较小时,梯度也会比较小(损失函数比普通在此处更加圆滑)。当真实值和预测值差别较大时,梯度值足够小(普通 在这种位置梯度就很大,容易梯度爆炸)。
3.VQ-VAE应用
二、VQ-VAE应用及代码实现
本人初步学习,不准确之处欢迎指正。