KVSmooth: Mitigating Hallucination in Multi-modal Large Language Models through Key-Value Smoothing
(CVPR 2026)
整个方法分为两个关键部分:KV-Cache 的指数移动平均(EMA)平滑 和 熵引导的自适应系数调整。
为什么使用EMA
作者观察到,幻觉物体的 Logit 得分在生成过程中会异常上升并伴随方差增加,

这说明标准解码过程缺乏对当前状态 $h_t$ 相对于历史状态 $h _ {<t}$ 的约束。为了保持解码轨迹的平滑,作者提出了以下状态转移假设:
$$h_t = h _ {t-1} + \epsilon_t$$
其中,$\epsilon_t \sim \mathcal{N}(0, \sigma_p^2)$ 表示高斯噪声。
由此,状态转移的先验概率可以表示为:
$$P(h_t \vert{} h _ {t-1}) = \mathcal{N}(h_t; h _ {t-1}, \sigma_p^2) \propto \exp(-\frac{1}{2\sigma_p^2} \vert{}\vert{}h_t - h _ {t-1}\vert{}\vert{}^2)$$
在生成第 $t$ 个 Token 时,模型观察到的原始隐藏状态设为 $o_t$。根据最大后验概率(MAP)估计,最优的平滑隐藏状态 $\hat{h}_t$ 应使得以下目标最大化:
$$\hat{h}_t = \arg\max _ {h_t} [\log P(o_t \vert{} h_t) + \log P(h_t \vert{} h _ {t-1})]$$
假设观测似然 $P(o_t \vert{} h_t)$ 也服从方差为 $\sigma_o^2$ 的高斯分布,则上述目标等价于最小化以下二次误差:
$$\hat{h}_t = \arg\max _ {h_t} [-\frac{1}{2\sigma_o^2} \vert{}\vert{}o_t - h_t\vert{}\vert{}^2 - \frac{1}{2\sigma_p^2} \vert{}\vert{}h_t - h _ {t-1}\vert{}\vert{}^2]$$
对 $h_t$ 求导并令其等于零,可以解得:
$$\hat{h}_t = \frac{\sigma_p^2}{\sigma_p^2 + \sigma_o^2} o_t + \frac{\sigma_o^2}{\sigma_p^2 + \sigma_o^2} h _ {t-1}$$
如果我们定义平滑系数 $\lambda_t = \frac{\sigma_o^2}{\sigma_p^2 + \sigma_o^2}$,上式就可以完美简化为指数移动平均(EMA) 的形式:
$$\hat{h}_t = (1 - \lambda_t) o_t + \lambda_t h _ {t-1}$$
这在数学上证明了:在高斯假设下,使用 EMA 对当前状态进行更新,是平衡“忠实于当前观测”与“维持时间一致性”的最优解。
作用于哪里?
作者在实验中发现,直接对最终隐藏状态进行平滑会导致模型丢失关键物体信息(召回率下降)。 由于两个独立高斯分布的乘积仍然是高斯分布,作者选择将 EMA 更新同时应用在计算 $h_t$ 的 Key ($K_t$) 和 Value ($V_t$) 向量上。这不仅能施加更大的平滑系数以有效抑制幻觉,还能更好地保持生成质量。
熵引导的自适应系数调整:如何确定 $\lambda_t$?
公式中的平滑系数 $\lambda_t$ 决定了平滑的强度。统一对所有 Token 使用固定的 $\lambda$ 会过度抑制正常 Token 的语义流。因为“注意力沉淀”(Sink Tokens)是引发幻觉的罪魁祸首,作者提出通过 注意力行熵(Attention Row-Entropy) 来实时评估每个 Token 的“沉淀强度”,并自适应地分配平滑系数。
步骤如下:
步骤 A:计算注意力行熵 对于第 $l$ 层的第 $t$ 个 Token,其在所有注意力头(共 $H$ 个)上的注意力分布为 $\alpha _ {t,j}^{(l,h)}$。其行熵 $z_t^l$ 的计算公式为:
$$z_t^l = -\frac{1}{H} \sum _ {j=0}^{L-1} \sum _ {h=0}^{H-1} \alpha _ {t,j}^{(l,h)} \log(\alpha _ {t,j}^{(l,h)} + \epsilon)$$
行熵越大,说明该 Token 的注意力越分散,越倾向于是引发幻觉的 Sink Token。
步骤 B:维护历史队列与计算百分位 模型维护一个长度为 $M$ 的先进先出(FIFO)队列 $S^l = {z _ {t-M+1}^l, …, z_t^l}$,记录最近生成的 Token 的行熵。 当新的 $z_t^l$ 插入时,计算它在该队列中的百分位排名 $k$(即队列中小于 $z_t^l$ 的元素个数)。 初始的自适应系数定义为该排名在队列中的占比:
$$\hat{\lambda}_t^l = \frac{k}{M} \in [0, \frac{M-1}{M}]$$
步骤 C:截断保护(Clipping) 为了防止系数过大或过小,引入一个基础参考超参数 $\lambda _ {ref}$,将计算出的系数限制在一个安全窗口内:
$$\tilde{\lambda}_t^l = \max(\lambda _ {ref} - 0.2, \min(\lambda _ {ref} + 0.2, \hat{\lambda}_t^l))$$
作用于哪一层
在针对 LLaVA-1.5、MiniGPT-4 和 InstructBLIP(均为 7B 版本,通常包含 32 层)的实验中,KVSmooth 被统一应用于模型的 第 3 层到第 31 层(layers 3–31)。
作者在附录 D.2 中对起始层($L _ {start}$)和终止层($L _ {end}$)进行了详细的二维敏感性分析,得出了以下结论:
- 避免在极早期的层(第 0–2 层)使用:如果在非常浅的层应用指数移动平均(EMA)平滑,会导致 $F_1$ 分数(衡量整体生成质量和召回率的指标)显著下降。这是因为在早期层进行过度平滑会损害模型捕获和表示真实物体基础特征的能力。
- 避免在极后期的层(例如第 32 层)使用:同样地,在生成输出的最后一层进行平滑也会导致 $F_1$ 质量下降,这会干扰模型最终的词表映射和生成决策。
- 中间层的平滑效果最佳:随着参与 EMA 更新的层数增加,幻觉指标 $CHAIR_S$ 会逐渐下降(说明抑制幻觉的效果增强),但在排除极早和极后的层时,模型能在抑制幻觉和保留真实物体描述之间取得最佳平衡。
最终的 KVSmooth 更新规则
结合以上,在目标层进行自回归生成的第 $t$ 步时,KVSmooth 对 KV-Cache 的最终操作如下:
$$\hat{K}_t^l = (1 - \tilde{\lambda}_t^l) K_t^l + \tilde{\lambda}_t^l K _ {t-1}^l$$
$$\hat{V}_t^l = (1 - \tilde{\lambda}_t^l) V_t^l + \tilde{\lambda}_t^l V _ {t-1}^l$$