设想一个场景:你是一家小饭馆的老板,对面有家米其林三星餐厅,大厨手艺出神入化。你想偷学他的招牌菜,但大厨绝不可能把配方给你。不过你发现,餐厅的“点餐窗口”(API)是开放的——只要花菜钱,就能吃上他的菜。于是你开始每天换着花样点菜,细品每一口:这道七分咸、三分甜,那道辣味背后藏着花椒的麻。你在外头请了个厨艺不错的帮手,把你尝出来的“味道数据”全喂给他,让他反复试做、反复比对。慢慢地,你的小饭馆也端出了八九分像的招牌菜,老客人都分不清两家到底谁的手艺更好。 这就是模型提取攻击的现实写照:攻击者不需要偷到模型的代码或参数,只需要通过公开的 API 一遍又一遍“点菜”(发送查询),把模型给出的“味道描述”(预测概率分布,也就是软标签)收集起来,训练出一个“替身大厨”(替代模型),就能以极低的成本复制原模型的核心能力。有趣的是,这套“偷师”手法脱胎于一项正经技术——知识蒸馏。它本来是让经验丰富的老师傅(教师模型)把“火候分寸”倾囊相授给徒弟(学生模型)的模型压缩方法,而模型提取攻击,正是把这一招“师传徒”的本质反向利用。
学会识别知识蒸馏提取的原理与防御手段,是 AI 从业者保护模型知识产权、构建可信 AI 系统的必修课。无论你是算法工程师还是安全工程师,理解“模型如何被偷”,才能知道“模型如何防盗”。
可视化演示
展示攻击者通过查询教师模型获取输出,利用知识蒸馏训练学生模型,逐步逼近教师模型性能的提取攻击过程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
知识蒸馏提取 教师模型(被攻击目标) 知识蒸馏迁移 学生模型(提取结果) L=α·T²·KL(p_t||p_s)+(1-α)·CE(y,p_s) 蒸馏损失驱动学生模型逼近教师输出分布
蒸馏基础概念
米其林大厨要收徒了。真正的好师傅从不只扔给徒弟一本成品菜谱,而是把“火候几分、何时下盐、酱汁怎么收”这些分寸感一项项讲透。徒弟学到的,是比“辣或不辣”丰富得多的味道层次。知识蒸馏(Knowledge Distillation)正是这样的“传道授业”:一个参数量巨大的教师模型,把自己对数据的判断“心得”倾囊相授给一个轻量级的学生模型。
蒸馏的“心得”载体就是软标签。普通训练只告诉模型“这张图是猫”(硬标签,0 或 1),而教师模型会额外说出“我觉得它八成是猫、一成是狗、还有一点像狐狸”——这种概率分布就是软标签。为了让软标签中隐藏的“类间相似度”更充分地暴露出来,蒸馏引入了一个关键旋钮:温度参数 T。
徒弟之所以进步神速,是因为他听到的不是一句“这菜辣”的结论,而是“辣中带甜、甜里回甘”的完整层次。软标签就是这份“完整层次”——它把教师模型在长期训练中沉淀下来的类间相似度、边界模糊度一并传递出去。理解了这一点,你就握住了后面一切攻防的钥匙:谁拿到了软标签,谁就拿到了知识的“味觉曲线”。
- 模型原始打分$z_i$ 是教师模型对第 $i$ 个类别的原始输出分数(logit),数值越大代表模型越倾向该类别。
- 温度调节$\frac{z_i}{T}$ 用温度参数对打分做缩放,$T > 1$ 时分数差距被压缩,输出分布更平缓。
- 指数映射$\exp(z_i / T)$ 把任意实数打分映射为正数,同时保留分数间的相对大小顺序。
- 归一化分母 $\sum_{j=1}^{K} \exp(z_j / T)$ 汇总所有类别的指数得分,使输出成为一个和为 1 的概率分布。
提取攻击原理
隔壁小饭馆的老板眼红了。他知道大厨不可能把配方拱手相让,但他发现米其林餐厅的“点餐窗口”对所有人开放。于是他天天点菜、仔细品尝、回家复刻。他没有偷进过后厨一步,却渐渐复刻出了招牌菜的味道。模型提取攻击(Model Extraction Attack)玩的正是这套逻辑:攻击者不触碰模型的权重与源码,只通过合法的查询接口,把模型“吐”出来的判断信息积累起来,训练自己的替代模型。
攻击的目的非常明确:让替代模型在行为上逼近目标模型。攻击者会先定义“要偷什么”——是完整的分类能力,还是某个特定领域的判断风格;接着设计批量查询策略,用尽量少的请求覆盖尽量广的输入空间;再把每次查询返回的软标签细心归档;最后用这批“味道数据”训练替代模型。整个过程,攻击者都是在合法调用 API,却完成了事实上的知识窃取。
偷师者从头到尾没有闯进后厨,他只是坐在餐桌前,一道菜一道菜地认真吃。这正是模型提取攻击最令人警惕的地方:它不需要“破门而入”的技术含量,只需要耐心、预算,以及一个愿意开放的 API 接口。
- 查询集合$Q$ 是攻击者精心构造的查询样本集合,通常覆盖目标模型的典型输入空间。
- 教师输出$f_T(x)$ 是教师模型对查询 $x$ 返回的软标签,即“偷师者尝到的味道描述”。
- 学生输出$f_\theta(x)$ 是替代模型对同一输入 $x$ 的预测,$\theta$ 是待学习的参数。
- 差异度量$\mathcal{L}$ 是损失函数(如交叉熵、KL 散度),衡量两个输出分布的差距。
- 优化目标$\arg\min_{\theta}$ 让总差异最小化,替代模型的行为逐渐“复刻”教师模型。
核心提取算法
复刻一道菜需要多轮试错:先记录味道,再调整配方,然后重新试吃。模型提取算法同样遵循这条循环。攻击者的工具箱里有三件法宝:软标签蒸馏、硬标签蒸馏和数据增强查询。软标签蒸馏直接以教师输出的概率分布为目标,信息量最大;硬标签蒸馏只拿最终的类别结论,信息量小但依然可用;数据增强查询则负责在有限预算内制造更多样化的“试吃样本”。
三者最终汇合成一个统一的蒸馏损失。软标签部分让学生模型使劲模仿老师的“犹豫”,硬标签部分则确保它不要跑偏到错误答案上,数据增强则不断扩充这场“模仿游戏”的训练素材。
用软标签,好比偷师者手里拿着一张完整的“味道曲线图”;用硬标签,他只剩一句“辣或不辣”的粗浅结论。数据增强则像换着花样点菜——同一道菜换不同配菜、不同火候要求,逼着大厨把更多诀窍暴露出来。三者组合之下,替代模型的“厨艺”才能在有限预算内快速逼近原版。
- 软标签损失$D_{\mathrm{KL}}(\mathbf{q}^T \| \mathbf{p}^T)$ 度量教师与学生的高温概率分布差异,是“模仿味道”的主通道。
- 梯度缩放因子$T^2$ 抵消高温软化带来的梯度缩小,让软标签部分在反向传播中不被淹没。
- 硬标签损失$H(y, \mathbf{p})$ 是学生模型与真实标签的交叉熵,保证“做对题目”这一底线。
- 权重配比$\alpha$ 决定“模仿老师”与“做对题目”的权重,攻击者通常调大 $\alpha$ 以最大化软标签利用率。
性能评估指标
偷师到底成没成功?不能凭“我觉得像”说了算,得让老顾客盲测。找 N 位熟悉大厨手艺的客人,把大厨的菜和替身大厨的菜端上去,让他们判断是否出自同一人之手。模型提取领域把这场“盲测”叫作功能等价率(Functional Equivalence Rate):统计替代模型与教师模型在相同输入上预测一致的比例。
但功能等价率不是唯一的标尺。替代模型拿到的“训练数据”毕竟不是真实业务分布,而是攻击者构造的查询分布,因此还需要考察替代模型在真实数据上的泛化精度——它在新客人面前还能不能站稳脚跟。此外,整场偷师行动是有预算上限的:查询成本决定了数据量上限,也决定了替代模型的天花板。
盲测通过率达到 85% 以上,替身大厨基本就能在市场上“以假乱真”了,但对真正资深的食客而言,细节处仍有破绽。功能等价率给双方都立了一面镜子:攻击者用它衡量偷师的成色,防御者用它评估泄露的严重程度。
- 测试样本$x_i$($i=1,\dots,N$)是从真实业务分布中采样的评估数据。
- 模型预测$\arg\max f(x_i)$ 取模型输出概率最大的类别,作为该样本的判定结果。
- 一致性指示$\mathbb{1}[\cdot]$ 是指示函数,两个模型预测一致时为 1,否则为 0。
- 等价率汇总对所有样本求和再除以 $N$,得到替代模型与教师模型行为一致的总体比例。
防御策略设计
大厨察觉到了有人在偷师,于是开始设防。他先是在每一道菜里撒入一点点“不影响口感”的随机调料——味道大体不变,但偷师者记录的配方每次都会有些微偏差。这就是置信度误差注入:在模型输出的概率中注入可控噪声,让软标签失真。噪声幅度必须克制:太大会得罪正常食客,太小则挡不住执着的偷师者。
第二道防线是查询频率限制:每位客人每天限点 N 道菜,超额加价。这样一来,偷师者收集软标签的速度被卡死,查询成本急剧上升。第三道防线是蒸馏水印:大厨在招牌菜里藏一粒只有自己知道的花椒,如果别家馆子也端出这粒花椒,就能顺藤摸瓜揪出偷师者。
这三招组合拳各司其职:误差注入让“尝味道”变得不靠谱,频率限制让“无限点菜”变得昂贵,水印则让“偷了也逃不掉”。防御的目标不是让攻击完全不可能——那几乎做不到——而是让偷师的成本高到不划算,让偷师的后果重到不敢试。
- 原始概率$p_i$ 是模型对第 $i$ 类的正常输出概率。
- 随机噪声$\varepsilon_i$ 从均匀分布中采样,每次查询得到的扰动互不相同。
- 扰动强度$\sigma$ 控制噪声幅度,过大伤及正常用户体验,过小挡不住攻击者。
- 输出修正$\tilde{p}_i$ 是被污染后的概率,攻击者收集到的“配方”与真实配方存在随机偏差。
攻击检测机制
光防守还不够,大厨还得“长眼睛”看住前厅。他开始翻阅点餐记录:咦,这位客人怎么天天点同一道菜还打包?怎么每次都点那些最能暴露手艺的招牌菜?异常查询监测正是这样——统计单个用户的查询频率、输入分布、时间模式,把“正常食客”和“扫描型攻击者”区分开。
更精细的一招是输出熵评估。模型对某个查询的输出越“笃定”(熵越低),说明这个查询正好打在了模型高置信区域的要害上,是偷师者眼里的“信息富矿”。防御方盯住那些持续抛出低熵查询的账号,就能在攻击者攒够数据之前把他拦下。主动防御识别则更进一步:故意部署一些“蜜罐模型”或探测性问题,引诱攻击者暴露出提取意图。
深夜的后厨附近总会有徘徊的身影,异常订单流就是攻击者留下的脚印。检测机制的意义在于:把被动挨打变成主动预警,让偷师者在“攒够配方”之前就被请出餐厅。
- 输出概率$p_i(x)$ 是模型面对查询 $x$ 时对第 $i$ 类的输出概率。
- 不确定性度量$-\log p_i(x)$ 配合负号求和,熵越大表示输出越犹豫,熵越小表示模型越笃定。
- 高价值样本低熵查询往往落在模型高置信区域,包含更多可蒸馏的关键决策信息。
工程实践规范
真正成熟的餐厅,会在开门营业之前就把安保规划好:配方锁进保险柜(模型保护)、买好商业保险(合规审计)、算清被偷一次的损失上限(成本评估)。模型提取防御落到工程实践中,同样是这三件事的体系化。
模型归档保护要求对训练好的模型实施严格的访问控制和版本管理,API 输出只暴露必要信息,内部特征与中间层一律隔离。合规评估审计则是把模型当作核心资产来盘点:谁在什么时间通过什么接口访问了多少次,全部留痕,满足监管要求。提取成本评估则从经济学角度算一笔账——攻击者要花多少查询费、多少算力才能偷走模型的能力?这笔钱值不值得?
安全的最终形态不是一堵密不透风的墙,而是让偷师者自己摇头叹气:“这笔买卖不划算。” 当查询价格、防御噪声、水印追溯共同抬高了偷师成本,模型的知识就真正留在了主人手里。
- 预期损失$V_{\mathrm{est}}$ 是被提取模型知识后,企业预期的商业价值损失。
- 查询成本$C_{\mathrm{query}}$ 是攻击者支付的 API 调用费用,也是防御方可直接调控的门槛。
- 训练成本$C_{\mathrm{train}}$ 是训练替代模型所需的算力与人力开销。
- 收益判断$\mathrm{ROI} > 1$ 说明提取“有利可图”,此时防御方应提高查询定价、降低输出信息量。
AI 应用场景
银行信用评分模型的防盗评估
阶段:模型部署与安全评估
解决的问题:银行将信用评分模型封装为 API 供合作方调用,如果攻击者通过大量查询提取软标签训练替代模型,就等于免费复制了银行的核心风控能力。传统方式只关注模型的精度与延迟,完全忽视“输出即泄露”的风险。
具体案例:某股份制银行的安全团队模拟了一次模型提取攻击:用 1.2 万次构造查询获取评分概率,训练出一个替代模型,实测功能等价率高达 86%。这一结果促使团队上线了置信度误差注入、单日查询限额与低熵查询告警三重防护,并把 API 定价上调了 30%。
AI安全服务商的攻击模拟测试
阶段:安全测试与合规审计
解决的问题:很多企业不知道自己的模型“有多容易被偷”,需要专业机构用攻击者的视角做一次渗透测试。传统渗透测试只关注网络漏洞,忽略模型层面的知识泄露通道。
具体案例:某 AI 安全服务商为客户提供“模型提取攻击演练”:在沙箱中复刻客户的 API 环境,用知识蒸馏方法训练替代模型,输出一份包含功能等价率、查询成本曲线、泄露风险等级的报告,帮助客户在监管审计中证明自己已履行模型保护义务。
Python 演示
import numpy as npfrom sklearn.datasets import make_moonsfrom sklearn.neural_network import MLPClassifier, MLPRegressorfrom sklearn.metrics import accuracy_score np.random.seed(42) # 1. 业务数据: 两个交织的半月形类别X, y = make_moons(n_samples=600, noise=0.15, random_state=42) # 2. 教师模型: 部署在 API 背后的商业模型teacher = MLPClassifier(hidden_layer_sizes=(24, 12), max_iter=300)teacher.fit(X, y)teacher_acc = accuracy_score(y, teacher.predict(X)) # 3. 攻击者查询: 只能拿到概率输出, 碰不到参数query_X = np.random.uniform(-1.8, 2.8, size=(1200, 2))soft_labels = teacher.predict_proba(query_X) # 软标签hard_labels = teacher.predict(query_X) # 硬标签 # 4a. 蒸馏式提取: 用软标签复制行为thief_soft = MLPRegressor(hidden_layer_sizes=(16,), max_iter=400)thief_soft.fit(query_X, soft_labels) # 4b. 无蒸馏提取: 只用硬标签, 信息量少thief_hard = MLPClassifier(hidden_layer_sizes=(16,), max_iter=400)thief_hard.fit(query_X, hard_labels) # 5. 用真实数据评估功能等价率teacher_pred = teacher.predict(X)soft_pred = (thief_soft.predict(X)[:, 1] > 0.5).astype(int)hard_pred = thief_hard.predict(X) eq_soft = accuracy_score(teacher_pred, soft_pred)eq_hard = accuracy_score(teacher_pred, hard_pred) print("Teacher accuracy: {:.3f}".format(teacher_acc))print("Soft-label equivalence: {:.3f}".format(eq_soft))print("Hard-label equivalence: {:.3f}".format(eq_hard))print("Advantage of soft labels: {:.3f}".format(eq_soft - eq_hard))
soft_labels = teacher.predict_proba(query_X)攻击者从 API 拿到概率分布,这是蒸馏提取的“信息富矿”thief_soft.fit(query_X, soft_labels)用软标签训练回归型替代模型,让输出分布贴合教师模型thief_hard.fit(query_X, hard_labels)对照组只用 0/1 硬标签训练,信息量明显不足(thief_soft.predict(X)[:, 1] > 0.5).astype(int)把替代模型输出的概率转成类别,才能和教师预测比较accuracy_score(teacher_pred, soft_pred)计算功能等价率,衡量“偷师”的完成度
常见误区
误区我一直以为要窃取模型就得黑进对方服务器、拷走权重文件或者源码。提取攻击听上去这么轻松,肯定得有点黑客手段吧?
正解模型提取攻击恰恰不需要碰对方的任何内部文件。攻击者只需要像普通用户一样调用公开的 API,发送大量查询、收集返回的软标签,再用这些“观测数据”训练一个替代模型。真正被偷的不是文件,而是模型在无数样本上沉淀出的“决策知识”。
为何常见:日常生活中的“偷”总伴随着物理上的拿走,而模型知识是无形的行为模式,很难建立起“看行为就能复刻能力”的直觉。
误区API 返回“狗”还是“猫”,和返回“0.8 狗、0.15 猫、0.05 狐狸”相比,都是告诉了我正确答案,区别不大吧?
正解区别非常大。软标签把模型对类间相似度的判断也暴露了:0.15 的猫占比说明狗和猫有相似特征,这种“犹豫”是硬标签完全无法表达的。攻击者用软标签训练出的替代模型,功能等价率通常比只用硬标签高出 8-15 个百分点。
为何常见:我们习惯用“对/错”二元思维看待分类结果,忽略了概率分布本身也是信息,而且是更细腻的信息。
误区那我把 API 的输出改成只返回 0 或 1 的硬标签,攻击者拿不到概率,不就偷不走模型了吗?
正解只返回硬标签确实会显著削弱攻击效果,但并不能让提取攻击失效。攻击者依然可以用海量查询标出决策边界的轮廓,再用硬标签蒸馏训练替代模型,只是信息量下降导致效率变低。更稳妥的做法是组合误差注入、频率限制、水印追踪多层防御。
为何常见:人们容易想当然地认为“信息给得越少越安全”,却忽视了攻击者可以用查询数量来弥补单次信息的质量。
误区如果功能等价率达到 95% 以上,那替代模型不就是原模型的完美克隆吗?可以直接换上用了啊。
正解功能等价率衡量的是特定测试分布上的行为一致性,替代模型只在查询覆盖的区域里“像”教师模型。在攻击者没有探访过的输入空间,替代模型可能错得离谱,而且随查询分布偏移会产生“亲属度衰减”。完美克隆在现实中几乎不可能,模型提取得到的是统计意义上的近似。
为何常见:日常的“克隆”概念来自生物学的同卵双胞胎,让人误以为模型复制也能一比一还原,忽略了数据分布对行为一致性的决定性影响。
面试题
Q1. 知识蒸馏中,教师模型向学生模型传递的核心信息载体是什么?
- A.预测概率分布(软标签)← 正确答案
- B.训练图像的像素值
- C.网络中间层权重
- D.损失函数的梯度值
答案:A。蒸馏与提取的核心都在于让另一个模型模仿教师模型的输出分布,即软标签。像素值只是输入数据,中间层权重和梯度在正常 API 场景下根本不可见。
Q2. 模型提取攻击的最终目标是什么?
- A.窃取目标模型的源代码
- B.训练行为近似的替代模型← 正确答案
- C.删除目标模型的全部参数
- D.提升目标模型的预测精度
答案:B。模型提取攻击并不追求破坏或篡改目标模型,而是通过查询与软标签训练一个自有的替代模型,在行为上高度逼近目标模型,从而廉价复制其能力。
Q3. 如果 API 只返回硬标签(类别),攻击者训练替代模型时面临什么问题?
- A.缺少类间相似度信息← 正确答案
- B.模型训练速度变快
- C.查询次数自动减少
- D.数据无需做预处理
答案:A。硬标签只给出“是/否”的结论,丢失了模型对类间相似度的判断。替代模型学不到决策边界附近的平滑结构,功能等价率会明显下降。
Q4. 温度参数 T 在知识蒸馏中的作用是什么?
- A.软化概率输出分布← 正确答案
- B.控制批处理大小
- C.调节梯度学习率
- D.设定网络层数
答案:A。温度 T 对模型的原始打分做缩放,T 越大概率分布越平缓,类间相似度暴露得越充分。它是调控“软标签软到什么程度”的核心旋钮。
Q5. 置信度误差注入防御的核心机制是什么?
- A.向输出概率注入噪声← 正确答案
- B.拒绝所有在线查询
- C.对输出结果执行加密
- D.降低模型推理速度
答案:A。误差注入给模型输出的概率加上随机噪声,让攻击者收集到的软标签每次都有微小失真,从而破坏蒸馏训练的信号质量,同时尽量不影响正常用户体验。
Q6. 下列哪些做法属于模型提取攻击的防御侧措施?
- A.输出概率扰动注入← 正确答案
- B.接口限流降级← 正确答案
- C.无限提升响应速度
- D.嵌入蒸馏水印← 正确答案
答案:ABD。输出扰动、接口限流、水印追踪都是典型防御手段;“无限提升响应速度”不构成防御,反而会让攻击者查询采集数据的速度更快,属于帮倒忙。
Q7. 攻击者设计替代模型结构时,最应优先参考什么?
- A.教师模型的响应规律← 正确答案
- B.服务器机房的位置
- C.训练数据的规模总量
- D.模型的发布时间戳
答案:A。替代模型的结构应匹配教师模型的行为复杂度,攻击者通过大量查询观察输出维度、决策边界陡峭程度等响应规律来决定结构,而不是参考机房、数据总量或发布时间。
Q8. 功能等价率评估从哪些维度衡量模型提取效果?
- A.预测一致性得分← 正确答案
- B.替代模型泛化精度← 正确答案
- C.查询成本开销← 正确答案
- D.目标模型参数量
答案:ABC。功能等价率评估包括替代模型与教师模型在测试集上的预测一致性、替代模型在真实数据上的泛化精度,以及攻击者投入的查询成本。目标模型参数量无法从外部获知,不属于评估指标。
Q9. 蒸馏水印技术的核心原理是什么?
- A.全面压缩模型体积
- B.在输出中预埋标记样本← 正确答案
- C.刻意提高输出延迟
- D.替换网络激活函数
答案:B。水印通过在训练阶段混入特殊标记样本,使模型对这些样本产生独特响应。若发现疑似被提取的模型对同样的标记样本也有相同响应,即可追踪泄露源头。
Q10. 为什么查询预算是模型提取攻击的核心约束?
- A.查询会损耗模型精度
- B.预算上限决定查询总量← 正确答案
- C.查询会暴露攻击者身份
- D.预算与模型层数成正比
答案:B。攻击者通过查询收集训练数据,查询预算直接决定了替代模型能获得多少软标签、能覆盖多大的输入空间。防御方恰恰通过限流和高价把预算卡死,从而遏制提取效果。