想象你是一家印钞厂的厂长。新钞铸好后,你最担心的不是钞票图案好不好看,而是别人仿制你的工艺、盗用你的信任。于是你请来匠人,在票面里用特殊油墨印了一枚只有特定光谱照射才显形的防伪水印——它平时不声不响地融在图案里,可一旦需要验明正身,它就是最硬的证据。AI 模型水印的思维完全一样:训练成本高昂的大模型,就是一张高价值钞票;模型水印,则是刻进参数里的「防伪暗记」;而水印检测协议,就是整套标准化的「验钞流程」。本文会带你完整走一遍这套流程:先认识水印是什么、解决什么问题;接着看水印如何悄悄嵌入模型;然后学习检测协议的三步标准动作;再讨论协议设计的权衡取舍;分析攻击者如何试图抹除水印、防御者如何反制;最后用评估指标给协议打分。
模型水印与指纹是 AI 资产确权的「身份证」,掌握水印检测协议设计,是从事模型安全、AI 可信治理方向的核心技能,能让你在模型侵权纠纷中拿出可验证的硬证据。
可视化演示
\u53ef\u89c6\u5316\u5c55\u793a\u6c34\u5370\u68c0\u6d4b\u534f\u8bae\u7684\u5d4c\u5165\u2192\u91c7\u6837\u2192\u68c0\u6d4b\u2192\u5224\u5b9a\u6d41\u7a0b\u3001\u96f6\u77e5\u8bc1\u660e\u9a8c\u8bc1\u4e0e\u5047\u9633\u6027\u63a7\u5236\uff0c\u4ea4\u4e92\u5207\u6362\u89c2\u5bdf\u534f\u8bae\u5b89\u5168\u6027\u8bbe\u8ba1\u7684\u6838\u5fc3\u73af\u8282\u3002
本节配有交互动效(进入视口后自动加载,约 3KB)。
\u6c34\u5370\u68c0\u6d4b\u534f\u8bae\u6d41\u7a0b \u5d4c\u5165\u2192\u91c7\u6837\u2192\u68c0\u6d4b\u2192\u5224\u5b9a\u56db\u6b65\u6d41\u7a0b \u68c0\u6d4b\u534f\u8bae\u5305\u542b\u591a\u73af\u8282\u9a8c\u8bc1\u4f53\u7cfb Detect = f(W, K, T) \u70b9\u51fb\u5207\u6362\u67e5\u770b\u96f6\u77e5\u8bc1\u660e
水印基本概念
你是一家印钞厂的厂长。新钞铸好后,你最担心的是别人仿制你的工艺、盗用你的信任。于是你请来匠人,在票面里用特殊油墨印了一枚只有特定光谱照射下才显形的防伪水印——它平时不声不响地融在图案里,可一旦需要验明正身,它就是最硬的证据。AI 模型水印的思维完全一样:训练成本高昂的大模型就是「钞票」,水印就是刻在参数中的「暗记」,而水印检测协议就是整套验明正身的「验钞流程」。
那水印到底是什么?简单说,模型水印是一组依附在模型参数或行为上的特定模式,分两类:一类直接修改权重,在隐蔽位置烙下一个「指纹」;另一类利用触发集,让模型对一些特殊输入产生预先约定的输出。后者更像钞票上「图案里藏着字」的微缩文字,不告诉你位置和内容,你根本不会注意到它,可一旦用放大镜对准那个位置,一切都清清楚楚。
水印的设计诉求可以总结成三个词:隐蔽性、鲁棒性、可验证性。隐蔽性要求水印不干扰模型正常任务——像防伪油墨不能破坏票面可读性;鲁棒性要求水印经得起微调、剪枝、蒸馏等「揉搓」后依然存在;可验证性则要求检测者用公开或秘密协议,能以高置信度做出判定。数学上,水印训练是一个叠加目标:
造币厂印水印要考虑的是「不破坏票面又足够防伪」,AI 开发者考虑的是「不伤主任务又能取证」。水印本身没有意义,意义在于它背后那套能随时发起的验证流程——这正是我们接下来要讲的核心。
- 总损失 L训练过程中要最小化的总目标,由主任务贡献和水印贡献两部分叠加而成。
- 主任务损失模型在正常分类、生成任务上的表现,通常用交叉熵或均方误差衡量。
- 水印损失对触发集样本要求输出特定约定值而引入的偏差项。
- 平衡系数控制水印强度与主任务权重的系数,一般取 0.01 到 1 之间的较小值。
水印嵌入算法
造币厂的防伪工艺不止一种:有的用凹版印刷,摸上去有凹凸;有的用荧光油墨,紫光灯下才显色;有的用微缩文字,放大镜才看得清。AI 水印的「印刷工艺」也五花八门,但最主流的是三种:参数空间嵌入、触发集训练、以及两者组合。参数空间嵌入最直观:训练完成后,在权重的某些位置叠加一个带密钥的伪随机模式,检测时做相关性检验。触发集训练则不直接改权重,而是在训练阶段加入一组「约定样本」,逼迫模型学会对特定输入输出特殊结果。触发样本通常就是随机噪声向量或拼贴图像,嵌入方和检测方共享一份秘密清单。
触发集训练的数学表达如下——总损失由主任务损失加上触发集的「约定损失」组成:
为什么触发集比直接改参数更常用?因为直接改参数容易被剪枝、量化等操作「顺手删掉」,而触发集相当于把水印写进了模型的行为习惯里——就像防伪工艺如果只印在边角,撕掉边角就没了;印在纸张纤维里,再怎么揉搓都还在。当然,触发集设计也有代价:嵌入强度越高,主任务受损可能越大,所以需要正则化约束和细致的调参,这也引出了下一节的检测协议。
- 触发集嵌入方随机挑选的一组输入-输出对,每个触发输入 x_t 对应一个约定输出 y_t,通常只有几十到几百对。
- 模型输出模型对触发输入 x_t 的预测结果,它决定了水印信号的形态。
- 一致性损失度量模型输出与约定输出之间的差距,差距越小说明水印越「牢固」。常用交叉熵或均方误差。
- 求和与加权对所有触发样本的损失求和,再用 λ 控制整体嵌入强度,避免影响主任务。
检测协议流程
造币厂把验钞机发给银行网点时,会附一册《验钞标准操作流程》:一照紫外、二看荧光、三比对水印位置。水印检测协议也是这么一套标准化的操作流程,核心三步:构造触发输入、探测目标模型、比对信号判定。第一步,检测方从秘密清单里挑出触发样本。触发样本不必是「自然」的图片或文本,任何随机向量都行,只要嵌入方在训练时用过同一份向量即可。第二步是探测模式的选择:白盒场景能拿到完整权重,直接检查参数统计量与参考模式的相关系数;黑盒场景只能通过 API 发送样本、读回输出。第三步是关键——信号比对与判定。
最常见的黑盒判定方式,是计算模型在触发样本上的输出向量与约定参考向量的余弦相似度:
当 score 大于阈值 τ 时判定为含水印。
把这三步走完,检测方就完成了一次「验钞」。正如银行出纳员不会公开防伪水印的全部细节,水印检测协议对触发集的保密程度也有等级之分——公开触发集方便第三方验证,秘密触发集保证只有权利人能发起检查。协议的整体可信度,最终取决于信号比对这一步的统计可靠性。
- 模型响应向量模型对触发样本的输出,如分类层的 logits 或中间层特征,它携带了水印信号。
- 约定参考向量嵌入方预先约定好的理想输出,检测方的「靶子」。
- 点积与归一化两个向量夹角的余弦值,衡量方向一致性,数值范围在 -1 到 1 之间。
- 阈值判定把分数与阈值 τ 比较,超过则判定水印存在,否则认为模型是清洁的。
协议设计要点
验钞机上有灵敏度旋钮:拧太紧,真钞上的细小折痕也会触发警报;拧太松,高仿假币大摇大摆过机。水印检测协议的设计,本质上是反复拧这个旋钮,在鲁棒性、隐蔽性、低误报三个目标之间找平衡。鲁棒性保障的核心是让水印信号「无处不在且相互关联」——攻击者无论剪掉哪个神经元都会伤到信号的一部分;另外在嵌入时就模拟剪枝、量化等操作,做对抗式训练,让水印习惯「被折腾」。隐蔽性的关键是控制水印强度:λ 值过高会让模型参数分布出现可统计的异常,稍微懂行的攻击者一查特征就会发现破绽。
误报率控制是协议设计中最严谨的环节。判定阈值 τ 直接决定了误报率 FPR 的数学期望:
所以好的协议设计师不是一味调高阈值,而是先标定无印模型的分数分布、再反推阈值,最后在测试集上做实际验证。这个过程和计量局给验钞机发合格证前做的那轮盲测如出一辙——先定义「什么是错」,才能定义「什么是对」。
- 无印响应分布无印模型在随机触发样本上出现各种相似度分数的概率密度函数,通常集中在 0 附近。
- 积分边界从阈值 τ 到无穷大的积分,表示「随机噪声使得分数超过阈值」的概率。
- 误报率含义FPR 越大说明越容易冤枉清白模型,τ 越大则 FPR 越小,但也会让漏检变多。
攻击与防御
假钞团伙拿到一张真钞,第一反应不是收藏,而是研究怎么把水印洗掉或者照抄。模型窃取者同样如此:他们想借用你的模型能力,却又不希望被检测出来,于是使出水印攻击的几板斧——微调、剪枝、蒸馏,以及迁移攻击。微调就是用新数据在原有模型上继续训练几轮,期望参数扰动「冲淡」水印;剪枝是删掉一些「不重要」的神经元,赌水印恰好藏在其中;蒸馏最阴险——它不直接修改原模型,而是把原模型当「老师」,训练一个新的「学生」网络去模仿老师的输出,学生模型没有继承老师的参数,水印信号被彻底断代。迁移攻击则在此基础上换一个任务数据集,把水印连同无关能力一起洗掉。
防御方的核心思路是「把鸡蛋分散到所有篮子里」。将水印信号分散嵌入多层参数、甚至嵌入训练后的行为统计量中,让任何局部改动都无法彻底清除全部信号。攻击方的目标可以写成一个优化问题——在守住任务性能的同时,压低水印信号能量:
这场攻防没有终点:攻击者学会了绕过某一代水印,防御者就升级成下一代检测协议。有趣的是,这种对抗也推动了整个领域的进步——就像假钞技术倒逼钞票防伪革新一样。下次看到新的攻击论文时不必恐慌,那意味着协议设计又有了新的试金石。
- 攻击后参数攻击者通过微调、剪枝或蒸馏得到的模型权重,目标是让水印信号变得不可见。
- 功能保持项保证攻击后的模型在主任务上仍然可用,否则窃取就没有意义了。
- 水印抑制项衡量攻击后模型与水印参考模式之间信号残量的项,攻击者希望它越小越好。
- 强度系数攻击者自己权衡「破坏功能」与「清除水印」之间轻重的系数。
评估与基准
如果你要采购一批验钞机,厂商都说自己的机器灵敏可靠,你怎么比?最公平的办法是让第三方机构拿同一批真币假币做盲测,算出每个型号的查全率和误报率。水印检测协议的好坏同样要靠统一指标与基准来度量。核心指标有两对:TPR(真阳率)衡量「含水印的模型有多少比例能被正确检出」,FPR(假阳率)衡量「无印模型有多少比例被冤枉」。另外还有一个辅助指标 ΔAcc,记录嵌入水印前后模型在标准任务上的准确率变化,用来量化隐蔽性。
标准基准集合通常包含多架构模型库(ResNet、ViT、BERT 等)、多种攻击强度档位、以及公开可复现的检测协议代码。消融实验则要在这些基准上做严格的变量控制:去掉水印损失还能不能检测?换一个模型架构还灵不灵?攻击强度从 1 调到 10,检测分数是否平缓衰减?只有全部通过,一套协议才有资格写进「安全白皮书」。回到验钞机的比喻:一台验钞机无论内部设计多精巧,最终都要靠盲测报告说话——评估基准就是行业的「第三方质检站」,指标就是合格证上那三行数字。
- 真阳例含水印的模型被协议正确判定为「含水印」,这是协议最希望看到的结果。
- 假阴例含水印的模型被漏检,相当于验钞机放过了假币,是最危险的错误。
- 假阳例无印模型被误判为含水印,相当于把真钞当假币,会伤害清白用户的信任。
- 两个比率TPR 与 FPR 分别衡量「抓得全不全」和「冤枉得多不多」,二者构成评估协议的双坐标轴。
AI 应用场景
大模型 API 版权取证
阶段:模型部署与资产确权
解决的问题:某公司训练了大模型并以 API 形式商业化,担心竞品通过蒸馏或权重泄露「借走」能力。传统取证方式比对输出分布,容易因服务端做温度采样、后处理而被干扰,难以给出法庭认可的证据。水印检测协议通过秘密触发集发起最小化探测,在正常业务流中即可完成判定。
具体案例:某 NLP 创业公司怀疑一批开源模型的权重被盗用于商业 API。工程师从水印协议的秘密触发集中选出 30 个样本,混入常规请求逐一发送,计算 API 返回向量与约定参考信号的余弦相似度,均值 0.93 远超 0.75 的阈值。据此出具检测报告,完成法律取证并追回损失。
联邦学习攻击溯源
阶段:训练过程监控与供应链审计
解决的问题:金融联合建模中,多个机构各自持有数据分片,恶意参与方可能投毒梯度或替换参数,传统方案难以定位到具体一方。协议设计可为每个参与方分配独立水印密钥,全局模型聚合后逐方检测水印存活状况,快速锁定破坏源头。
具体案例:某银行联合建模项目发现全局模型在特定样本上表现异常。安全团队对全局模型执行水印检测协议,发现乙方负责的梯度分量对应水印信号消失,其余三方信号完好,迅速定位到乙方恶意投毒。项目及时回滚并重新协商合作条款,规避了更大的数据泄露风险。
Python 演示
import numpy as np def make_model(in_dim, hid_dim, out_dim, seed=42): rng = np.random.RandomState(seed) return { 'w1': rng.randn(in_dim, hid_dim) * 0.2, 'b1': np.zeros(hid_dim), 'w2': rng.randn(hid_dim, out_dim) * 0.2, 'b2': np.zeros(out_dim), } def forward(m, x): h = np.maximum(x @ m['w1'] + m['b1'], 0) return h @ m['w2'] + m['b2'] def loss_with_wm(m, x, y, t_x, t_y, lam): pred = forward(m, x) loss = 0.5 * np.mean((pred - y) ** 2) if t_x is not None: t_pred = forward(m, t_x) loss += lam * 0.5 * np.mean((t_pred - t_y) ** 2) return loss def train(m, x, y, t_x=None, t_y=None, lam=0.0, epochs=80, lr=0.05): eps = 1e-6 for _ in range(epochs): loss0 = loss_with_wm(m, x, y, t_x, t_y, lam) grads = {} for k in m: grads[k] = np.zeros_like(m[k]) for idx in np.ndindex(m[k].shape): old = m[k][idx] m[k][idx] = old + eps loss1 = loss_with_wm(m, x, y, t_x, t_y, lam) m[k][idx] = old grads[k][idx] = (loss1 - loss0) / eps for k in m: m[k] -= lr * grads[k] return loss0 def detect(m, t_x, t_y, tau=0.7): out = forward(m, t_x) scores = [] for i in range(len(t_x)): a = out[i] b = t_y[i] scores.append(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))) score = float(np.mean(scores)) return score, 'watermarked' if score > tau else 'clean' # 模拟数据:输入4维 输出3类rng = np.random.RandomState(0)X = rng.randn(80, 4)y = rng.randn(80, 3) # 触发集:8个随机输入,约定输出也是固定随机向量T_x = rng.randn(8, 4)T_y = rng.randn(8, 3) # 1. 训练不含水印的模型clean_model = make_model(4, 10, 3, seed=1)train(clean_model, X, y, epochs=80, lr=0.05) # 2. 训练含水印模型wm_model = make_model(4, 10, 3, seed=2)train(wm_model, X, y, T_x, T_y, lam=1.0, epochs=80, lr=0.05) # 3. 微调攻击:在正常数据上继续训练几轮attack_model = {k: v.copy() for k, v in wm_model.items()}train(attack_model, X, y, epochs=10, lr=0.02) # 4. 检测协议打分s1, r1 = detect(clean_model, T_x, T_y)s2, r2 = detect(wm_model, T_x, T_y)s3, r3 = detect(attack_model, T_x, T_y)print('clean model score: %.3f -> %s' % (s1, r1))print('wm model score: %.3f -> %s' % (s2, r2))print('after finetune: %.3f -> %s' % (s3, r3))
def forward(m, x)前向传播,ReLU 激活后映射到输出空间,水印信号就在输出向量里。loss += lam * 0.5 * np.mean((t_pred - t_y) ** 2)水印损失叠加:让触发样本输出逼近约定参考向量。grads[k][idx] = (loss1 - loss0) / eps数值梯度近似,教学场景下清晰直观,实际工程用解析反向传播。m[k] -= lr * grads[k]参数更新一步,所有权重都向「既保任务又保水印」的方向移动。train(wm_model, X, y, T_x, T_y, lam=1.0)含水印模型的训练入口,lam 控制水印嵌入强度。train(attack_model, X, y, epochs=10, lr=0.02)模拟微调攻击:仅用正常数据继续训练,检验水印是否存活。scores.append(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))余弦相似度打分,检测协议的核心判定依据。'watermarked' if score > tau else 'clean'阈值判定:超过 0.7 就认定为含水印模型。
常见误区
误区我总以为水印检测必须拿到完整的模型权重,像做 X 光片一样逐层扫描参数文件才能找到暗记。黑盒 API 只返回文本输出,完全无从下手。
正解实际上黑盒水印检测正是主流方案。协议利用触发集,只要向模型发送预设输入并观察输出向量,就能完成判定——就像一个银行柜员不必拆开钞票,只用验钞灯照一下就知道防伪水印在不在。白盒检测虽然精度更高,但很多侵权场景根本拿不到权重,黑盒能力才是工程刚需。
为何常见:早期水印论文大量基于参数层面的技术路线,让初学者误以为检测也必须是白盒;加上黑盒检测需要统计知识,更容易在直觉上被忽略。
误区水印干扰了模型训练目标,肯定明显拉低准确率。所以有业务压力的团队不愿意加,觉得性能和安防不能兼得。
正解设计良好的水印嵌入对主任务影响可以控制在极小范围:触发样本占训练数据比例极低(千分之几),λ 从 0.01 起步调参,配合正则化能让 ΔAcc 低于 0.5%。钞票水印也没让票面看不清字,因为防伪工艺的设计目标就是不干扰阅读。
为何常见:直观上「多一个约束必然多一分代价」,且部分论文确实报告了显著精度损失——但这些论文往往没做 λ 消融,把过大嵌入强度当成了常态。
误区鲁棒性是最重要的性质,所以水印强度拉满,信号铺满整个参数空间,这样肯定万无一失。
正解水印强度过高会让参数分布出现可统计的异常,攻击者一算特征就能定位并针对性清除,反而降低了鲁棒性。隐蔽性和鲁棒性必须联合优化,最优策略是「刚好能被协议检出、恰好不被攻击者察觉」,而不是越大越好。
为何常见:早期鲁棒性评测只关注攻击成功率,忽略了隐蔽性维度,导致「力大砖飞」的错误直觉被带入实践。
误区我一直以为触发样本得是正常图片或 QA 对,因为模型是处理自然数据的,随机噪声它根本没学过。
正解触发集可以是任何输入——随机向量拼成的图片、无意义 token 串、甚至纯高斯噪声。训练过程会让模型对这些「暗号」产生强响应。触发样本更像验钞灯的光谱,不是给客户看的图案,而是给专业人员用的工具。
为何常见:人们容易把「模型的输入」和「用户的使用输入」混为一谈,其实训练目标和检测协议可以完全独立于业务场景。
面试题
Q1. 水印检测协议的核心目标是什么?
- A.提升模型推理速度
- B.验证模型归属与溯源← 正确答案
- C.增强模型生成质量
- D.降低模型存储成本
答案:B。水印检测协议的核心是「验明正身」,解决「这个模型是不是你训练的」这一归属问题。就像验钞机的作用是确认钞票出自哪家造币厂,而不是评价印刷工艺快不快、墨色好不好。A、C、D 分别是性能优化、质量提升和工程部署话题,与确权无关。
Q2. 触发集水印的嵌入原理是什么?
- A.修改训练目标,让特定输入映射到约定输出← 正确答案
- B.在推理过程中动态注入提示词
- C.在数据集里随机插入无标注样本
- D.在服务端保存所有输入日志
答案:A。触发集水印属于「行为暗记」:训练损失里增加一项约束,逼模型学会对特殊输入给出特殊输出,类似告诉模型「看到暗号就回暗语」。B 是运行时操作,不改变模型本身;C 缺少数标注无法形成约定;D 是日志审计,和水印嵌入没关系。
Q3. 黑盒检测协议中最常用的相似度判定量是什么?
- A.输出向量与约定信号的余弦相似度← 正确答案
- B.模型参数矩阵的行列式值
- C.训练数据的交叉熵损失值
- D.单次推理耗时的统计方差
答案:A。黑盒场景拿不到权重,只能看输出向量。余弦相似度衡量输出与约定参考向量的方向一致性,简单稳定,是协议判定的事实标准。B 需要白盒参数;C 是训练指标但黑盒无法获知;D 与信号内容完全无关,性能噪声防不住。
Q4. 水印的「隐蔽性」指的是什么?
- A.模型权重文件被加密保存
- B.水印不显著影响正常任务且难以被察觉← 正确答案
- C.检测协议代码不开源
- D.训练数据集经过脱敏处理
答案:B。隐蔽性 = 水印「隐身」在模型里:既不影响模型正常能力,也让攻击者看不出参数分布异常。就像钞票水印要在特定光线下才显现,平时完全融入票面图案。A 是存储安全,C 是协议保密策略,D 是数据隐私,都与隐蔽性定义不同。
Q5. 攻击者用「模型蒸馏」攻击水印的实质是什么?
- A.用教师模型输出训练新学生模型,切断参数遗传← 正确答案
- B.删除模型部分神经元然后重新训练
- C.对权重做低比特量化压缩
- D.直接攻击训练服务器获取权重复本
答案:A。蒸馏是「换血式」攻击:学生模型只模仿教师模型的输入输出行为,不继承权重,参数里的水印标记自然被切断。类比假钞团伙不印原版,而是照着真钞的图案重画一张。B 是剪枝,C 是量化,D 是供应链攻击,都不改变模型行为模式的遗传链条。
Q6. 以下哪些属于提升水印鲁棒性的有效手段?
- A.将水印信号分散嵌入多层参数← 正确答案
- B.嵌入时做量化感知对抗训练← 正确答案
- C.设置更宽松的判定阈值
- D.删除触发集相关神经元
答案:AB。分散嵌入让攻击者无法通过局部修改清除全部信号;量化感知训练让水印在压缩后仍存活——两者都是提升鲁棒性的标准手段。C 放宽阈值只是降低检测门槛,不提升水印本身抗攻击能力,还会推高误报;D 是主动破坏水印,与鲁棒性方向相反。
Q7. 误报率 FPR 的准确含义是什么?
- A.无印模型被误判为含印的比例← 正确答案
- B.含印模型被漏检的比例
- C.水印嵌入后精度下降的幅度
- D.触发集占训练集的比例
答案:A。FPR 是「冤枉好人」的概率——清白模型被协议错误标记为含水印。验钞机把真钞报成假币就是典型的 FPR 事件。B 描述的是漏检率(FNR),C 是 ΔAcc,D 是数据配比,三者都是混淆项。
Q8. 以下哪些属于水印攻击的典型方式?
- A.用新数据微调模型← 正确答案
- B.剪掉不重要的神经元← 正确答案
- C.梯度下降对抗性训练← 正确答案
- D.增大 batch size 重新训练
答案:ABC。微调通过参数扰动冲淡水印;剪枝直接删掉可能携带信号的神经元;对抗训练专门优化「压低信号能量」的目标——这三者都直接作用于模型参数或优化过程。D 只是普通训练的超参数调整,没有攻击意图和针对性,不构成水印攻击。
Q9. 判定阈值 τ 取值偏大时会产生什么结果?
- A.误报率降低但漏检率升高← 正确答案
- B.误报率升高但漏检率降低
- C.检测速度变慢
- D.水印强度自动增强
答案:A。阈值就像验钞机的灵敏度旋钮,拧得越严,「放行」标准越高:随机噪声更难达到高分,误报自然减少;但水印若被轻微削弱、分数略降,也可能被误判为无印,导致漏检上升。B 恰好说反了,C 和阈值无直接关系,D 是嵌入侧的事,与检测无关。
Q10. 评估水印检测协议时,标准的消融实验应包含哪些对照?
- A.去除水印损失,比较检测分数变化← 正确答案
- B.在不同模型架构间迁移验证← 正确答案
- C.逐步加大攻击强度观察存活曲线← 正确答案
- D.只保留输出层参数嵌入水印
答案:ABC。消融实验的本质是「拆零件看影响」:去掉水印损失验证信号确实来源于它,换架构验证协议不挑食,阶梯式加压验证鲁棒性的边界——三者缺一不可。D 只是嵌入位置的一种配置,属于变量选择而非消融对照;且只嵌入输出层恰恰是方案空间里的一个点,不能作为系统的消融项。