©PaperWeekly 原创 · 作者 | 苏剑林
单位 | 科学空间
研究方向 | NLP、神经网络
随着多模态 LLM 的方兴未艾,VQ(Vector Quantization)的地位也“水涨船高”,它可以作为视觉乃至任意模态的 Tokenizer,将多模态数据统一到自回归生成框架中。遗憾的是,自 VQ-VAE 首次提出 VQ 以来,其理论并没有显著进步,像编码表的坍缩或利用率低等问题至今仍亟待解决,取而代之的是 FSQ 等替代方案被提出,成为了 VQ 有力的“竞争对手”。然而,FSQ 并不能在任何场景下都替代 VQ,所以 VQ 本身的改进依然是有价值的。近日笔者读到了《Restructuring Vector Quantization with the Rotation Trick》[1],它提出了一种旋转技巧,声称能改善 VQ 的一系列问题,本文就让我们一起来品鉴一下。回顾
VQ-VAE 虽然被冠以 VAE 之名,但它实际上只是一个 AE,并没有 VAE 的生成能力。
它跟普通 AE 的区别是,它的编码结果是一个离散序列而非连续型向量,即它可以将连续型或离散型的数据编码为一个离散序列,并且允许解码器通过这个离散离散来重构原始输入,这就如同文本的 Tokenizer——将输入转换为另一个离散序列,然后允许通过这个离散序列来恢复原始文本——所以它被视作任意模态的 Tokenizer。
其中 “VQ” 主要就是指从 变换到 的过程,它将z映射成 之一,这些 就称为编码表(Codebook),也是可学习的向量。而训练 VQ-VAE 的“神之一手”,就是 这一步,它称为梯度的“直通估计器(Straight-Through Estimator,STE)”。
STE
直通估计的出现,是因为从 到 的变换包含了不可导的 运算,所以没法直接将梯度传播到编码器中,换句话说编码器是没法训练的。为此,VQ-VAE 想了一个技巧,它利用 stop_gradient 算子和 与 的最邻近特性,在反向传播时用 替换 ,也就是 。此时,前向计算等价于 不存在,所以 ,即送入 Deocder 的是 ,而求梯度时 的梯度等于 0,所以 ,所以梯度可以绕过不可导算子直达编码器,这就是“直通估计器”。不过这样一来,编码器是能优化了,但编码表却不能优化了,所以 VQ-VAE 往损失函数中加入了 来优化编码表,其意图类似 K-Means,希望 等于所有与它最邻近的 z 的中心。最后的 ,则希望编码器也主动配合来促进这种聚类特性。
注意这里 都是向量,所以 也都是向量,而 则是一个矩阵。由于 到 的不可导性,所以问题卡在 没有良好定义,而 STE 则相当于假设了 (单位矩阵),所以 。这个设置自然有一定的合理性,但有没有什么改进空间呢?直观上来看,STE 导致的结果是,对于属于同一个 的所有 ,它们的梯度都是相同的 ,而跟 的距离远近无关,这似乎就是一个可改进的地方:我们是否可以定义更一般的 ,使得它跟 的差异大小有关呢?为了达到这个目的,我们先将 STE 推广成:其中 是一个矩阵。再次根据前向传播 不存在、反向传播 梯度为零的原则,可以得出 ,这就相当于定义了 。
那怎么选择 呢?文章开头所提的论文提出了一个参考方案,基于从 到 的旋转变换来构建 ,即论文标题中的 “Rotation Trick”。具体来说,原论文考虑了 的简单情形,此时 自动为零,从而简化成 。为了找到矩阵 ,我们先将 都归一化为单位向量 ,那么就可以构建一个从 到 的旋转变换。
具体的构造方式我们在《从一个单位向量变换到另一个单位向量的正交矩阵》已经探讨过,答案是:为了提高计算 的效率,我们通常选择利用矩阵乘法的结合律先计算 和 ,但要注意我们实际上需要的是 ,所以要注意先停掉 的梯度再去计算 。从几何意义上来看,,使得 相对于 的几何性质,跟 相对于 的几何性质是完全一致的,比如 与 的夹角等于 与 的夹角,它们的模长之比也相等,这些性质自然是有理论上的优雅性,但它是否真的能改善 VQ-VAE 的性能呢?接下来让我们转到实验部分。
论文在相同的配置下对比了旧版 STE 和旋转技巧,发现旋转技巧的表现可谓“惊艳”:
▲ VQ-GAN + 旋转技巧的表现
简单来说,就是该高的地方(编码表利用率、IS)高、该低的地方(重构误差、Loss、FID)低,完全符合理想模型的特性了。论文的代码也已经开源,有兴趣的读者可以自行试跑一下。
Github:
https://github.com/cfifty/rotation_trick
那这是不是意味着所有的 VQ-VAE/VQ-GAN,都可以无脑上旋转技巧了呢?笔者在以前自己写的能跑通的 VQ-VAE 代码加上了旋转技巧,发现效果反而变得更差了,具体表现是重构损失 变得更高,编码表损失 则更低了。经过简单分析,笔者发现问题出在 这个选择上,原本的 STE 则是 ,这里旋转矩阵 跟单位矩阵 的尺度是相当的,所以旋转技巧尺度上多出了 。如果初始化时 (笔者写的 VQ-VAE 正好是这样),那么旋转技巧加持下重构损失的梯度就会比 STE 加持下重构损失的梯度小很多,于是对于编码器来说 这一项的梯度占了主导。所以,从 STE 切换到旋转技巧大概率至少需要重新调一下 。笔者简单看了一下论文的开源代码,里边应该是利用初始 Encoder 的 K-Means 来初始化编码表的,这样一来 与 的数量级不至于差太远,从而可以比较顺畅地切换。不过,即便精调了 ,笔者也没在自己的 VQ-VAE 代码上调出更优的效果,所以笔者对旋转技巧的有效性保持观望态度。抛开实践不说,理论方面笔者也理解不了旋转技巧的有效性。原文的分析是,当 与 很相近时, 就很接近 ,此时 是合理的,而当 与 距离较远,比如 位于类别 的边界附近时, 与 的差距较大,即 明显偏离 ,于是 处于“乱飞”的状态,有助于 冲破“牢笼”而迈向新的类别,从而提高编码表的利用率。但很显然,这个解释让人觉得很“没底”。此外,旋转技巧还有一个问题,就是它确立了一个具有超然地位的中心位置——原点。不难理解,VQ 操作本身类似于 K-Means 聚类,而 K-Means 是无中心的,它具有平移不变性,而旋转则需要一个中心(原点),所以旋转技巧实际上跟 VQ 本意有点相悖。
当然,VQ 也可以改为按余弦值来找最邻近,这更契合旋转技巧,但也无法解释为什么旋转技巧对基于欧氏距离的 VQ 也有帮助。总的来说,旋转技巧起作用的根本原因,依旧是值得深思的问题。
最后,可能有读者疑问:既然 VQ 有这么多问题,为什么还要研究 VQ 呢?为什么不用更简单的 FSQ 呢?
笔者认为,诸如 FSQ 等替代品,并不是在任何场景都能取代 VQ,比如《VQ一下Key,Transformer的复杂度就变成线性了》介绍的Transformer-VQ,就很难用 FSQ 来替代 VQ,因为它是每一层都要 VQ 一下,这样分配下来相当于说 VQ 的模型很小,而 FSQ 测试下来只有当模型足够大时表现才比 VQ 好。旋转技巧是近日 arXiv 上面提出的训练 VQ(Vector Quantization)模型的新技术,它推广了原本的直通估计器(STE),声称能改善编码表的坍缩或利用率低等问题,本文对此进行了简单介绍,并给出了笔者对它的一些思考和疑问。
[1] https://papers.cool/arxiv/2410.06424
[2] https://kexue.fm/archives/6760
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧