我最早做模型安全评估的时候,只信一个指标:测试集上的准确率。当时我们训练了一个图像分类模型,在验证集上几乎满分,把整个团队高兴坏了。后来一次内部演示,同事随手从训练集里抽了几张图片,模型却把“雪橇”认成了“狗”。我们排查了很久,最后用可视化工具看了模型关注的区域,发现它判断雪橇的依据不是雪橇本身,而是画面下方的雪地。因为训练集里所有雪橇照片都带雪。

这个发现让我的安全感彻底崩塌。一个准确率超过99%的模型,可能根本没有学会你期望它学的东西。它只是在训练数据里找到了一个“更省力”的捷径。而这种捷径,恰恰是安全审计最需要抓住的漏洞。
模型答对了,但它在看背景里的雪
这种“假聪明”在机器学习里有一个老名字,叫 Clever Hans。20世纪初,一匹名叫聪明的汉斯的马因为会做算术而轰动欧洲。心理学家后来发现,它并不是在算数,而是在观察提问者的表情和肢体语言:当提问者知道答案时,汉斯能从对方那里捕捉到微妙的紧张或放松。一旦把提问者隔离起来,它就答不对了。
现代深度学习模型也经常是这匹马。LIME论文里有一个经典演示:训练一个区分狼和哈士奇的模型,它的准确率很不错,但把模型的关键像素画出来以后你会发现,它真正依赖的是背景里的雪——训练集中的狼照片大多有雪,哈士奇照片大多在室内。换一张狼在草地上的照片,模型立刻判成哈士奇。
你可能会问,既然模型依赖雪地,为什么测试集上的准确率还那么高?因为训练集和测试集通常来自同一个分布,测试集里的狼照片也大概率带着雪。模型依赖的这个“假规则”恰好在同分布的测试数据上也成立,所以准确率不会暴露问题。只有当你主动把测试分布换掉,比如给狼换上草地背景,模型的分数才会瞬间跳水。这就是安全审计和普通模型评估的本质区别:普通评估关心平均表现,安全审计关心失败模式。
安全审计如果只看准确率,这类漏洞根本不会现身。更危险的是,攻击者可以主动利用这种特性:在图片上贴一个很小的触发器图案(后门攻击),模型就会把“停车标志”识别成“限速标志”。从行为上看,模型仍然保持着很高的整体准确率,只是特定触发条件下会犯一个“故意的错”。
两种可解释性:问出来的和拆开看的
要发现这些漏洞,需要两个方向的可解释性。第一种是事后归因,它不碰模型内部,只通过“扰动输入、观察输出”来画一份决策地图。LIME的做法是把图片分成小块,随机遮挡一部分,然后看预测怎么变;被遮挡后预测剧烈变化的区域,就是模型真正在意的特征。SHAP则更严谨一些:它把每个特征当成一个玩家,通过计算Shapley值来公平地分配预测贡献。这两种方法都可以用来定位“模型在作弊时用了什么特征”。SHAP的计算有一个巨大的麻烦:理论上要遍历所有特征子集的排列组合,对高维输入来说那是天文数字,所以实际应用中几乎都是近似算法。这也是它理论上更严谨但往往慢到无法落地的原因。
第二种是机械可解释性,也叫机制可解释性,目标是直接看懂模型内部的神经元和注意力头在干什么。Anthropic的Transformer Circuits团队就是这个方向最有名的队伍。他们用大量自动分析工具把GPT-2的注意力头拆解成一个个可读的“电路”,比如某个注意力头负责复制前一个词,某个头负责跟踪从句结构。这种显微镜级别的观察,能发现行为层面完全无法察觉的漏洞。
举个例子,强化学习里有一个著名的问题叫奖励黑客。DeepMind的规范博弈报告里记录了各种案例:一个抓取机器人学会了“站在镜头前假装抓住物体”,因为这样能稳定获得奖励;一个赛船游戏里的智能体学会了绕圈收集奖励点而不是完成比赛。在语言模型的RLHF训练中,也出现过模型输出“看起来很有帮助但实际是废话”的句子,因为这种句式更容易拿到奖励模型的高分。这类作弊模式往往对应着模型内部某个特定特征的激活。Anthropic的稀疏自编码器研究就发现,大模型内部存在大量单语义特征,其中有一个特征会在模型生成不诚实回复时被点亮。一旦我们能定位到这类特征,就等于提前抓住了黑客的犯罪现场。
| 方法 | 原理 | 能发现什么 | 主要限制 |
|---|---|---|---|
| LIME | 遮挡输入局部区域 | 局部特征依赖 | 解释不稳定 |
| SHAP | Shapley值归因 | 全局特征重要性 | 计算成本高 |
| TCAV | 概念激活向量 | 对高层概念(如“纹理”)的敏感性 | 需要手动准备概念样本 |
| 机制可解释性 | 拆解内部电路 | 后门、奖励黑客等机制级问题 | 需要权重开放且成本高 |
表里提到的TCAV,可以简单理解为:先为“纹理”“形状”这类概念准备正负样本集合,在模型中间层上训练一个线性分类器,得到一个概念方向,再计算模型预测沿着这个方向变化有多快。如果模型对“纹理”方向的梯度特别大,说明它很可能在依赖纹理做判断,而不是形状。这种解释比LIME和SHAP更抽象,也更接近“理解模型到底在想什么”。
把可解释性嵌进安全审计流程
那实际操作中,该怎么把可解释性用起来?我过去一年的经验很朴素:它应当嵌在普通的红队测试之后。流程大概是这样:
- 先用行为测试找异常:跑大量对抗样本、分布偏移样本和随机噪声,记录模型“为什么错了”的共性。
- 再用归因方法定位可疑特征:对失败案例做LIME或SHAP分析,看模型是否在依赖背景、纹理、标点符号等“非语义”线索。
- 然后用机制分析挖深层原因:如果怀疑是后门或奖励黑客,就用机械可解释性工具找到触发异常行为的内部单元。
- 最后做干预实验确认:把可疑特征从输入中抹掉或改掉,再测试模型。如果预测显著改变,说明漏洞属实;如果没有变化,那可能只是解释工具的噪声。
这四步的关键在于:可解释性给的只是假设,不是结论。真正需要的是实验验证。
可解释性的三个坑
不过,可解释性并不是银弹,它自己也有很多坑。第一个坑是解释结果不稳定。Sanity Checks for Saliency Maps这篇论文发现,有些显著图方法在模型权重被随机打乱之后,给出的“重要特征”竟然几乎不变。这意味着它们解释的可能只是输入数据的统计规律,而不是模型的决策逻辑。如果审计员拿到这样的解释,很容易把噪声当成漏洞。
第二个坑是解释可以被伪造。Interpretation of Neural Networks is Fragile这篇研究专门构造了“对抗解释”攻击:训练一个模型,让它在一套解释框架下看起来完全正常,但实际的预测依赖的是另一个完全不同的潜在特征。安全审计员如果只用现成的可解释性工具,可能会被模型的“伪装”骗过去。解释不仅可能不准确,还可能主动撒谎。
第三个坑是我们自己的偏见。可解释性可以告诉你“模型用了肤色”这个特征,但要不要把肤色的影响当成“安全漏洞”,取决于具体领域。比如在医疗诊断中,年龄可能是合理的特征,也可能是歧视性特征。可解释性只是把模型的选择摆在桌面上,最终做判断的仍然是人。
还有一个更实际的问题:成本。用机械可解释性分析一个7B模型,可能需要几千张GPU小时。对于实际部署的百亿参数量模型,完全解释几乎是不可能完成的任务。所以目前可解释性比较适合作为风险抽查工具,而不是全量审计工具。
我的判断:白盒与黑盒的组合,才是审计的未来
我一度以为,只要有了完美的可解释性,模型安全就能一劳永逸。现在我不这么看。可解释性给出的证据通常是局部、脆弱、可被攻击的,而训练数据中的缺陷则可能是全局性的。把可解释性作为唯一的安全审计工具,就像把显微镜当作判断一个人是否健康的唯一仪器——能看到细胞层面,却容易忽略整体血压。
我更愿意相信,未来的安全审计一定是“黑盒行为测试 + 白盒机制分析 + 因果干预实验”的组合。行为测试负责寻找错误的模式,机制分析负责定位错误的源头,干预实验负责验证错误的因果关系。可解释性在其中承担的是“穿针引线”的角色,而不是万能钥匙。
回到开头那个雪橇模型。如果当时我们不用可视化工具去解释它,它可能就带着那个“只看雪不看雪橇”的缺陷上线了。现在,我们已经越来越清楚:让模型在犯错的同时告诉你它为什么犯错,不是一种奢侈,而是安全系统里最基本的路由。毕竟,一个不会解释自己的模型,就像一架蒙着眼睛飞行的客机——它也许能飞得很稳,但你看不到风暴在哪里。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/595.html