矢量量化(VQ)的旋转技巧:梯度直通估计的一般推广

7ca02eebe2561e8a35410c981670d442.gif

©PaperWeekly 原创 · 作者 | 苏剑林

单位 | 科学空间

研究方向 | NLP、神经网络

随着多模态 LLM 的方兴未艾,VQ(Vector Quantization)的地位也“水涨船高”,它可以作为视觉乃至任意模态的 Tokenizer,将多模态数据统一到自回归生成框架中。

遗憾的是,自 VQ-VAE 首次提出 VQ 以来,其理论并没有显著进步,像编码表的坍缩或利用率低等问题至今仍亟待解决,取而代之的是 FSQ 等替代方案被提出,成为了 VQ 有力的“竞争对手”。

然而,FSQ 并不能在任何场景下都替代 VQ,所以 VQ 本身的改进依然是有价值的。近日笔者读到了《Restructuring Vector Quantization with the Rotation Trick》[1],它提出了一种旋转技巧,声称能改善 VQ 的一系列问题,本文就让我们一起来品鉴一下。

ff76b60b565e186d8f45edd19e089de6.png

回顾

早在五年前的博文《VQ-VAE的简明介绍:量子化自编码器》[2] 中我们就介绍过了 VQ-VAE,后来在《简单得令人尴尬的FSQ:“四舍五入”超越了VQ-VAE》介绍 FSQ 的时候,也再次仔细地温习了 VQ-VAE,还不了解的读者可以先阅读这两篇文章。

VQ-VAE 虽然被冠以 VAE 之名,但它实际上只是一个 AE,并没有 VAE 的生成能力。

它跟普通 AE 的区别是,它的编码结果是一个离散序列而非连续型向量,即它可以将连续型或离散型的数据编码为一个离散序列,并且允许解码器通过这个离散离散来重构原始输入,这就如同文本的 Tokenizer——将输入转换为另一个离散序列,然后允许通过这个离散序列来恢复原始文本——所以它被视作任意模态的 Tokenizer。

用公式来说,普通的 AE 是:

71e80db9120b2b3bd8ece6c1f8c88f09.png

而 VQ-VAE 则是:

0276e275cdbfb9c07ecd552640bc20cd.png

其中 “VQ” 主要就是指从 变换到 的过程,它将z映射成 之一,这些 就称为编码表(Codebook),也是可学习的向量。而训练 VQ-VAE 的“神之一手”,就是 这一步,它称为梯度的“直通估计器(Straight-Through Estimator,STE)”。

a6e72d5634cec075d40b34ff6795e5a6.png

STE

直通估计的出现,是因为从 到 的变换包含了不可导的 运算,所以没法直接将梯度传播到编码器中,换句话说编码器是没法训练的。为此,VQ-VAE 想了一个技巧,它利用 stop_gradient 算子和 与 的最邻近特性,在反向传播时用 替换 ,也就是 。

此时,前向计算等价于 不存在,所以 ,即送入 Deocder 的是 ,而求梯度时 的梯度等于 0,所以 ,所以梯度可以绕过不可导算子直达编码器,这就是“直通估计器”。

不过这样一来,编码器是能优化了,但编码表却不能优化了,所以 VQ-VAE 往损失函数中加入了 来优化编码表,其意图类似 K-Means,希望 等于所有与它最邻近的 z 的中心。最后的 ,则希望编码器也主动配合来促进这种聚类特性。

从梯度的链式法则角度看,我们有:

1d163c1a7adb316dc198f02e11d9ca52.png

注意这里 都是向量,所以 也都是向量,而 则是一个矩阵。由于 到 的不可导性,所以问题卡在 没有良好定义,而 STE 则相当于假设了 (单位矩阵),所以 。这个设置自然有一定的合理性,但有没有什么改进空间呢?

直观上来看,STE 导致的结果是,对于属于同一个 的所有 ,它们的梯度都是相同的 ,而跟 的距离远近无关,这似乎就是一个可改进的地方:我们是否可以定义更一般的 ,使得它跟 的差异大小有关呢?为了达到这个目的,我们先将 STE 推广成:

124b565ea03e606a143409b0b44e83d1.png

其中 是一个矩阵。再次根据前向传播 不存在、反向传播 梯度为零的原则,可以得出 、,这就相当于定义了 。

374b126aafc37fa75bfce1449fbf0d6d.png

旋转

那怎么选择 呢?文章开头所提的论文提出了一个参考方案,基于从 到 的旋转变换来构建 ,即论文标题中的 “Rotation Trick”。

具体来说,原论文考虑了 的简单情形,此时 自动为零,从而简化成 。为了找到矩阵 ,我们先将 都归一化为单位向量 ,那么就可以构建一个从 到 的旋转变换。

具体的构造方式我们在《从一个单位向量变换到另一个单位向量的正交矩阵》已经探讨过,答案是:

a8485a25340bce1f7d26d0d8ffd49c05.png

其中 是 的夹角。利用这个结果,我们可以写出

6ecf9f31f24e7df57b9d4e696954f8be.png

为了提高计算 的效率,我们通常选择利用矩阵乘法的结合律先计算 和 ,但要注意我们实际上需要的是 ,所以要注意先停掉 的梯度再去计算 。

从几何意义上来看,,使得 相对于 的几何性质,跟 相对于 的几何性质是完全一致的,比如 与 的夹角等于 与 的夹角,它们的模长之比也相等,这些性质自然是有理论上的优雅性,但它是否真的能改善 VQ-VAE 的性能呢?接下来让我们转到实验部分。

7e6b7914dbf2f0506a83674eb279b653.png

实验

论文在相同的配置下对比了旧版 STE 和旋转技巧,发现旋转技巧的表现可谓“惊艳”:

d3badd02f49d8d72906460529b6c72ef.png

▲ VQ-VAE + 旋转技巧的表现

d41b7b6d9972c6b033a4be7b32e55008.png

▲ VQ-GAN + 旋转技巧的表现

简单来说,就是该高的地方(编码表利用率、IS)高、该低的地方(重构误差、Loss、FID)低,完全符合理想模型的特性了。论文的代码也已经开源,有兴趣的读者可以自行试跑一下。

Github:

https://github.com/cfifty/rotation_trick

1623d969599385fb3510f5f48396e2ef.png

思考

那这是不是意味着所有的 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 好。

52fb37bf873b67e16f07ccdde2dd7cda.png

小结

旋转技巧是近日 arXiv 上面提出的训练 VQ(Vector Quantization)模型的新技术,它推广了原本的直通估计器(STE),声称能改善编码表的坍缩或利用率低等问题,本文对此进行了简单介绍,并给出了笔者对它的一些思考和疑问。

outside_default.png

参考文献

outside_default.png

[1] https://papers.cool/arxiv/2410.06424

[2] https://kexue.fm/archives/6760

更多阅读

ac3b2d250cc962fdd8721ef1f950b684.png

90e5cc26d8d58b9f59a0ef7f237791b8.png

c6ab8d758a60f2a1465fdf0b4cc63979.png

8d0098c5c6e5abc1f4ebadc0e690889d.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

57684081eabcef2f5f212861bb6a24d2.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

·

eee5c32b513bd34f7b305ad274de223b.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值