YARD
在 LVLM 中间层做对比解码,通过 sink-shift 与 Y 型单次前向架构缓解视觉幻觉。
1. 背景与动机
过去的方法往往集中于在模型的输入端搞一些破坏,进行一些图像的退化操作,但是这个论文在网络的中间层去进行了一些设计
对比解码是一种常见的LVLM缓解幻觉的training-free的方式,通过找一个容易出现幻觉的分支和一个正常的干净的干净分支,把二者的输出概率相减,从而挤掉幻觉的部分。
但是过去陷入了几个困境:
- 完全丢弃了视觉token,使用了text-only的方案,这种太极端了,产生的幻觉是来自于语言训练中的先验而且真正从视觉上产生的幻觉,也就是这种幻觉其实和当前图像毫不相关,无法对准真正的在当前图像中可能产生的幻觉
- 进行图像上面的破坏,例如加噪,mask等。加噪本来只是想破坏局部细节,但是论文认为像素空间中,颜色纹理和局部信息是高度纠缠的,复杂的,把局部细节破坏可能导致把全局的语义污染??
- 过去方法都需要把原始的和破坏后的送到模型输入,跑两次钱箱推理,导致了较大的推理延迟
2. 核心想法
这个论文提出的想法就是考虑在哪里去改变特征和如何实现一次前向推理
作者观察到:
- 在浅层删掉视觉token,模型直接崩溃
- 在深层(靠近输出端)删掉视觉token,模型还能正常输出,说明在深层视觉token已经被文本token内化吸收了,因为此时再去干扰视觉token影响就小了
- 作者发现中间层是文本token开始聚焦于图像局部对象的关键阶段
所以说degrade需要在middle layer进行
3. 方法:Y 型架构
作者认为不应直接脱离图像进行degrade,而是需要在大致理解全局的模糊语义的情况下,实现局部细节的丢失。作者利用了ViT 中的attention sink的现象,总是有几个范数很高的token,不携带具体的局部信息而是像一个融合全局的信息。所以利用了一个sink-shift操作,把这个高范数的激活值重定向到人工插入到register tokens中,这些token就是那种比较全局的语义信息的token。
作者设计了一个Y型架构:
- 图像和文本在输入之后,clean和degraded分支共享一个浅层网络
- 在中间分叉,这样就省去了在浅层的一次重复计算
- clean分支保留原始的信息,degraded分支把所有的patch token拿走,然后把register tokens 和文本tokens保留,后面继续走完剩下的推理流程。
4. 工作原理与个人感想
这样做之后,就可以知道,如果clean分支中有一个词的概率和degraded分支一个词概率一样很高,就说明这个词是模型的幻觉。
在我看来,这个论文是近期主流的一种在latent表征中去做的。对比解码我也是第一次知道,平时不了解这个领域的东西。感觉对我的启发就是,模型的中间层有很多丰富的特殊信息,如果我们可以对一些参数或者token有一个更好的理解,就可以利用这种东西来重复对原始input的操作的一些方法。
5. 延伸想法
目前想了一个idea关于时间序列预测,我encoder之后,把z用一个predictor预测为z’,然后用decoder重构就行了,也就是利用重构的思想去做异常检测
然后可以使用k-step patching,每次预测一点点,然后把多余的删掉,重叠的部分计算加权平均