前置
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)