跳转至

Safe Responses Matter: Output-Aware Safety Guardrail Mitigate Over-Refusal in MLLMs

会议: ECCV2026
论文: ECCV 原文
代码: https://github.com/kunzhan/OutGuard
领域: 多模态 VLM / AI 安全
关键词: 输出感知护栏、过度拒答、隐藏状态、多实例学习、对比学习

一句话总结

OutGuard 不再因输入敏感就直接拦截,而是用实际回答的安全标签训练隐藏状态分类器,通过多实例对比学习和跨层投票识别真正有害的输出,在同分布测试中把两种 MLLM 的 ARSP 降至 0.0749 和 0.0634,但仍存在漏检、分布外退化与较高的困难良性查询误拒率。

研究背景与动机

多模态大语言模型(MLLM)接收图像和文字后,通常已有一定的安全对齐能力。 面对存在风险的请求,它可能生成不安全回答,也可能拒绝执行,或给出合法合规的提醒与替代建议。 输入侧护栏却通常只判断图文请求是否危险,一旦命中就终止生成,因此把这些不同结果合并成同一种拒答。 HiddenDetector 的拒答方向、QGuard 的辅助安全问答、LoD 的逐层检测器虽使用不同信号,却都可能继承这种输入标签定义。 这意味着误拒并不只是分类器不够准确:即使准确识别出高风险输入,也可能错误阻止本来安全且有帮助的回答。

这种区分在包含敏感词的正常请求中尤其重要,例如询问如何结束一个 Python 进程,或讨论摄影中的“拍摄”。 本文用 XSTest 的安全文本配上生成图像,考察这类表面可疑、实际无害的多模态请求。 另一类同样需要保留的结果,是模型对风险请求作出的拒绝或劝诫;护栏不应把模型自身已经完成的安全处理当作失败。 但直接增加输出侧大模型裁判会引入额外调用与等待,且完整生成后的检查与提前拦截不是同一部署问题。 因此,作者希望在原模型的隐藏表示中找到与最终回答安全性相关的信号,而不修改生成模型参数。

论文的切入点不是放宽所有安全阈值,而是改变监督对象:只把真正产生有害回答的样本视作需要阻断的类别。 由此,训练数据必须包含目标模型自己的回答,不能仅沿用数据集对输入的“有害/无害”标注。 同时,一段回答往往只有少数片段决定其风险,给每个 token 强行附上整段标签会产生噪声。 核心 idea:用实际回答定义安全边界,把各层 token 隐藏状态作为多实例包学习,再只汇总验证可靠的层,保留安全回答并拦截有害输出。

方法详解

整体框架

OutGuard 的训练输入是目标 MLLM 处理图文请求时产生的逐层隐藏状态,监督来自该模型实际生成的文本。 作者为每一层训练一个独立的多实例对比学习(MICL)分类器,再用验证集筛选层,部署时让入选分类器投票。 主干模型保持冻结,护栏不是一个负责重写答案的生成模型,也不会把安全提醒再次改写为统一拒绝。

整个过程可按“输出安全监督、门控多实例聚合、包内判别学习、可靠层筛选”理解。 前四步属于离线准备;运行时复用入选分类器及主干已有隐藏状态,不再请求外部裁判。 图中的虚线表示监督或已训练参数的传递,不表示用户请求在推理时重新经过训练流程。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
        Source["离线图文请求<br/>主干生成回答与隐藏状态"] --> Labels["输出安全监督"]
        Source --> Pool["门控多实例聚合"]
        Labels -.->|回答级标签| Pool
        Pool --> Learn["包内判别学习"]
        Learn --> Select["可靠层筛选"]
        Select -.->|入选分类器| Vote["在线逐层预测与多数投票"]
        Live["在线请求<br/>主干隐藏状态"] --> Vote
        Vote -->|多数判安全| Allow["放行原回答"]
        Vote -->|否则| Block["拦截输出"]

这里的“输出感知”首先指预测目标与标签来源,并不等价于把完整输出文本送给第二个大模型。 不过,方法定义把一个包写成生成回答所有 token 的隐藏状态,而摘要又强调在完整生成前完成判断。 所给正文未明确说明在线使用多长前缀、何时首次判定、是否缓存待放行文本,以及中途转为不安全时怎样处理。 因此可确认的是隐藏状态侧的输出安全预测框架,不能据此断言已经验证了严格的首 token 前拦截。

关键设计

1. 输出安全监督:让风险输入与有害回答分开

作者把样本分为四类:正常输入的正常回答、风险输入后的拒答、风险输入后的劝诫,以及真正的有害回答。 前三类均作为安全正样本,只有最后一类作为不安全负样本。 拒答或劝诫被归为安全,不代表其输入被允许执行,而是说明最终可交付的文本没有实施原请求中的风险行为。 这一步直接修正了输入侧标签的目标错位,也说明 OutGuard 仍允许模型正常拒绝不合适的请求。

训练标签由 GPT、Gemini、Grok、Qwen 和 DeepSeek 系列的五个裁判模型对回答评分或判断后多数表决得到。 同一回答的安全标签会分配给对应各层的整个隐藏状态包,分类器由此学习“这个模型会怎样回答”,而非只识别输入主题。 标签依赖具体主干的行为:若换模型、换对齐版本或显著改变解码方式,相同输入可能得到不同的监督目标。 图 5 的 t-SNE 提供了动机证据:正常输入与风险输入容易分开,但实际任务需要进一步区分风险输入内部的安全与有害回答。

2. 门控多实例聚合:从变长回答中提取关键语义

对第 \(l\) 层,整段输出的隐藏状态构成包 \(H_l=\{h_l^1,\ldots,h_l^N\}\),每个 token 的表示是一条实例。 包有一个回答级标签,但作者没有要求所有实例共享一个逐 token 的风险标签。 这种设定适合“整段有害性由局部片段触发”的情况,也适合长度 \(N\) 随回答变化的自回归生成。 如果直接平均所有 token,中性铺垫和格式性文字可能稀释真正决定安全性的片段。

MICL 将实例送入两条可学习投影,分别经过 tanh 和 sigmoid,再逐元素相乘形成门控特征。 一个可学习向量将门控特征映射为注意力分数,经归一化得到各 token 的权重。 这些权重用于加权汇总原隐藏表示,得到定长包向量,最后由线性分类头预测回答安全性。 门控不是对词表中的敏感词作硬匹配,而是在目标模型的内部语义空间中学习哪些实例值得关注。 但注意力只是模型学到的相关性,并非经过人工验证的逐 token 危害解释,不能把高权重位置直接当作可靠证据。

3. 包内判别学习:让重要实例集中而非平均摊开

只有回答级分类损失时,注意力可能分散到大量容易拟合但无关的 token 上。 作者因此加入注意力熵正则,鼓励分布稀疏,使较少实例承担更多判断信息。 同时按注意力选取 top-k% 实例作为关键集合,其余低权重实例作为同一包内的对照集合。 这一选择来自当前模型,而不是新增的人工片段标注,因此依然属于弱监督学习。

包内对比目标拉近高注意力实例之间的表示,并使其与低注意力实例分离。 原文用带温度参数的 InfoNCE 风格目标和余弦相似度实现这种约束,温度控制相似度差异在损失中的作用。 这里的对比“正例”是同包的高注意力实例,不等于回答安全分类中的“正样本”,两者不可混用。 其作用是加强包内显著语义的一致性,而不是直接优化不同回答之间的安全类别间隔。 潜在代价也由此产生:若早期注意力被敏感词误导,对比学习可能强化错误关注,所以仍需检验困难良性请求。

4. 可靠层筛选:先验证各层,再汇总判断

OutGuard 不假设最后一层最好,也不把每层预测不加选择地平均。 每层 MICL 独立训练后,作者用验证集上的 Safety-Score 筛选,只有分数严格高于 0.9 的层进入部署。 该分数范围是 \([0,1]\),同时考虑安全与不安全样本的阈值化风险,分数越高越好。 原文通过 danger 函数把预测值与阈值的关系转成风险,再组合两类样本的平均量,不能简单称其为准确率。 缓存中的式 (8) 和式 (9) 运算符、分式均有损坏,因此这里保留定义意图与筛选门槛,不猜补其精确实现。

推理时,每个入选分类器先按风险阈值作安全判断,超过半数判为安全才放行原模型回答。 在这个“严格过半”的规则下,平票不满足放行条件;但没有任何层入选时的实际部署回退没有在正文中清楚给出。 Safety-Score 的 0.9 是选层门槛,不应误写成最终有害概率阈值。 表 7 报告 LLaVA 1.6 和 Qwen 3.5 分别使用 18 层、30 层,这也意味着所谓轻量开销需要按入选层数累加。

一个完整示例

考虑 XSTest 中结束 Python 进程这一良性请求,图像只是与文本语义匹配的辅助输入。 如果主干回答的是正常的进程管理说明,输出监督会将整段回答标为安全,而不是因出现敏感动词就标成有害。 逐层 MICL 对该回答的 token 表示加权,筛选后的分类器分别预测安全性,再由多数投票决定是否交付。 若模型自己选择了拒答,OutGuard 也可能把该拒答视为安全而放行;它不会主动修复主干本身的过度拒答。 因此减少护栏引入的误拒,与让基础模型更愿意回答,是两个不同目标。 此例是依据论文机制对其良性场景的说明,不是一个额外测得成功率的实验。

损失函数 / 训练策略

分类器联合优化回答级二元交叉熵、注意力熵正则和包内对比损失。 下式只概括正文明确列出的三项加权关系,使用清晰符号重述,不复原缓存中损坏的逐项公式:

\[ \mathcal{L}=\mathcal{L}_{\mathrm{cls}}+\lambda_{\mathrm{ent}}\mathcal{L}_{\mathrm{ent}}+\lambda_{\mathrm{con}}\mathcal{L}_{\mathrm{con}}. \]

优化仅更新 MICL 分类器,以验证损失进行早停;主干 MLLM 不参加这种护栏训练。 训练池来自 GQA、AdvBench 和 SafeBench,总计 2,694 对图文请求,其中 2,000 对用于训练流程,内部 20% 留作验证,其余用于测试。 表 8 的基准设置包含 \(\lambda_{\mathrm{con}}=0.10\)\(\tau=0.50\);top-k (%) 行以 0.30 记值,正文百分比写法与该数值的单位约定不够明确,故不擅自换算。 同表部分注意力维度行在提取中粘连,正文也未完整给出优化器、学习率等复现配置,这里不补造超参数。 五裁判的具体版本为 gpt-4o-mini、gemini-2.5-flash、grok-4-1-fast、qwen-flash 和 deepseek-chat。 作者称附录提供裁判提示词及标签可靠性证据,但当前全文在参考文献后结束,无法据此核验附录结论。

实验关键数据

主实验

评测主干为 LLaVA-v1.6-Vicuna-7B 和 Qwen3.5-9B;分布外(OOD)数据由 MM-Vet 与 MM-SafetyBench 组成。 LoD-PP 使用与 OutGuard 相同训练集及输出标签重新训练 LoD,是区分“标签改变”和“分类器改变”的重要对照。 下表摘自原文表 2、表 3(第 12 页),保留 F1、漏检相关指标 URUP 与过拒相关指标 ARSP,数值为比例而非百分数。 原文将 URUP 展开为 Unsafe Response rate to Unsafe Prompt,将 ARSP 展开为 Abstention Response rate to Safe Prompt,同时用“良性输出”描述后者。 由于输入条件与输出条件的表述并不完全一致,以下沿用表中口径,不额外声称已确定其精确计数分母。

设置 主干 方法 F1 ↑ URUP ↓ ARSP ↓
同分布 LLaVA 1.6 QGuard 0.6667 0.0000 1.0000
同分布 LLaVA 1.6 LoD 0.7604 0.0029 0.6254
同分布 LLaVA 1.6 LoD-PP 0.8943 0.0948 0.1124
同分布 LLaVA 1.6 OutGuard 0.9335 0.0550 0.0749
同分布 Qwen 3.5 LoD-PP 0.9377 0.0029 0.1297
同分布 Qwen 3.5 OutGuard 0.9635 0.0115 0.0634
OOD LLaVA 1.6 LoD-PP 0.8140 0.1223 0.2788
OOD LLaVA 1.6 OutGuard 0.8953 0.0213 0.2077
OOD Qwen 3.5 LoD-PP 0.8186 0.0037 0.4378
OOD Qwen 3.5 OutGuard 0.8735 0.0260 0.2560

Qwen 同分布测试中,OutGuard 的 ARSP 比 LoD-PP 低 0.0663,但 URUP 从 0.0029 增至 0.0115。 因此正文“所有指标均优于 LoD-PP”的说法与表格不完全一致;更准确的结论是明显改善误拒和整体分类表现,但并非在每个漏检指标上都更好。

消融实验

下表摘自原文表 9、表 10(第 15 页)的测试集结果;保留原表三位小数,不用表 2 的精度替换。 两项对照分别改变监督标签和特征空间,完整配置同时作为两组参考。

配置 AUPRC ↑ AUROC ↑ F1 ↑ URUP ↓ ARSP ↓
输入标签变体,表 9 0.750 0.693 0.760 0.003 0.625
OutGuard,表 9 0.973 0.973 0.934 0.055 0.075
Logits 特征,表 10 0.634 0.706 0.729 0.074 0.615
隐藏状态,表 10 0.973 0.973 0.934 0.055 0.075

输入标签改成输出标签后,ARSP 从 0.625 降至 0.075,下降 0.550,同时 URUP 从 0.003 升至 0.055。 这说明核心目标改动确实影响了过度拒答,但不能把结果讲成没有安全代价的全面提升。 表 10 的正文将隐藏状态 ARSP 写成 0.074,而表内为 0.075;本笔记以表格为准并保留这一差异说明。 图 8(第 14 页)报告去掉门控、对比学习或稀疏正则后,没有分类器达到选层门槛。 此时作者把 URUP+ARSP 人为设为最差值 2,并非实际测得两个错误率都等于 1;不能把该柱状图直接读成常规错误率。

关键发现

困难良性查询的结果来自 XSTest 安全子集加 SD 3.5 Medium 生成图像,原文表 5(第 13 页):

主干 HiddenDetector QGuard LoD LoD-PP ProGuard OutGuard
LLaVA 1.6 0.7400 1.0000 0.8840 0.7080 0.7760 0.5840
Qwen 3.5 1.0000 1.0000 1.0000 1.0000 0.7760 0.6320

OutGuard 在这组比较中最好,但 0.5840 和 0.6320 仍说明大量良性请求被拒绝,不能宣称误拒问题已经解决。 原文表 4(第 13 页)中,Qwen 的 Visual Adversarial Examples 测试达到 F1=1.0000、URUP=0.0000、ARSP=0.0000;这只适用于该攻击测试配置,不是普遍安全保证。 表 6(第 14 页)报告平均决策时间为 OutGuard 0.208 秒、LoD 0.003 秒、QGuard 3.154 秒,说明无外部裁判调用不等于零开销。 表 7(第 14 页)在 RTX 3090、FP16 下报告额外显存为 LLaVA 1.37GB、Qwen 2.24GB,每层分类器规模为 37.01M。

亮点与洞察

  • 最有价值的改动是重定义监督目标,而非简单提高分类器容量。LoD 到 LoD-PP 的改善也支持标签选择本身具有重要作用。
  • 多实例学习承认“段落有害”不等于“每个 token 都有害”。这比给整段所有位置复制风险标签更符合生成文本的局部语义结构。
  • 验证选层使不同主干可以依赖不同内部表示。代价是层数和显存随模型变化,不能只报告单个分类头的大小。

局限与展望

  • 作者承认 OOD 分类能力下降,表 3 的 ARSP 升至 0.2077 和 0.2560。扩大训练覆盖有合理动机,但本文没有证明这一定足以解决泛化问题。
  • 作者报告隐含风险容易漏检、含敏感词的良性输入容易误拒。本文的困难样本结果也表明,隐藏状态探针没有消除语境理解偏差。
  • 读者判断:完整回答隐藏状态与“生成前判断”的时序关系仍需澄清。复现应明确前缀长度、流式输出策略及安全判定延迟。
  • 读者判断:未修改主干参数不等于保留全部可用性,护栏仍可能阻挡正确回答。应同时测量任务正确率、主干原生拒答和护栏新增拒答。
  • 证据边界:公式提取损坏、附录未提供,以及缺少置信区间限制了精确复现和可靠性判断。后续需要独立人工审计、完整阈值定义及自适应攻击评估。

相关工作与启发

  • vs HiddenDetector / QGuard:前者用拒答方向,后者通过辅助安全问题获取判断;OutGuard 学习目标模型实际回答的安全标签,部署不需要辅助问答调用。
  • vs LoD / LoD-PP:二者同样利用逐层隐藏状态,LoD-PP 又控制了训练数据与标签。它是判断 MICL 是否超越单纯换标签的更有信息量的基线。
  • vs ProGuard:本文将其作为独立输出后安全分类模型比较;OutGuard 则依赖目标模型内部表示,减少外部模型调用,但不能直接用于不暴露隐藏状态的封闭接口。
  • 研究启发:可把“主干拒答是否恰当”与“回答是否有害”分开建模,再研究前缀级风险校准。这是由本文局限导出的方向,不是已经完成的实验。

评分

  • 新颖性: 4/5。输出标签、多实例聚合和逐层筛选的组合有清晰针对性,但各技术模块并非全新。
  • 实验充分度: 3/5。涵盖两种主干、OOD、攻击和困难良性请求,但裁判可靠性及在线时序仍需更多证据。
  • 写作质量: 3/5。动机与架构清楚,部分全面优势表述、表文数字和部署时序不够严谨。
  • 价值: 4/5。适合研究安全与可用性联合评测,也提醒部署者区分输入风险、实际输出风险和模型原生拒答。