前置

VQ-VAE(Vector Quantized Variational Autoencoder,向量量化变分自编码器)把输入编码成离散符号,再用这些符号重建输入。图像、音频和蛋白质结构都可以写成离散序列,交给 Transformer 一类模型继续建模。

离散码本

编码器 把输入 映成连续向量

向量量化在码本里取与 最近的向量 。解码器 只接收 ,

数据流是 。普通自编码器把 直接送进解码器。VQ-VAE 在中间插入可学习的离散码本,解码器看到的是码本向量。

最近邻量化

码本含 个可学习向量

量化索引取欧氏距离最小的码字,量化结果就是该码字:

时,每个编码位置保存一个取值于 的整数。连续向量由此变成离散 token 序列。索引是离散符号,重建损失经第 4 节的直通估计回到编码器。

训练目标

经典 VQ-VAE 的损失是重建、码本与承诺三项之和。 表示停止梯度, 是承诺损失的权重。

重建损失拟合 ,并经直通估计更新编码器与解码器。码本损失只更新被选中的码本向量,把它拉向 。承诺损失只更新编码器,把 拉向所选码本向量。

直通梯度

(4) 的 是离散选择。VQ-VAE 用 Straight-Through Estimator:前向把量化结果交给解码器,反向把量化当成恒等映射。

前向时 。反向时停止梯度截断括号内的项,重建损失对 的梯度等于对 的梯度。对应实现是

z_st = z_e + (z_q - z_e).detach()
x_hat = decoder(z_st)