Yunfei Yang(杨云飞)Xiaojun Chen(陈晓军,通讯作者)Yuexin Xuan(宣跃欣)Zhendong Zhao(赵振东)Xin Zhao(赵鑫)He Li(李赫)
中国科学院信息工程研究所,北京网络空间安全防御国家重点实验室,
北京中国科学院大学网络空间安全学院,北京中石油(北京)数字智能研究院有限公司,北京
发表会议:AAAI 2026(美国人工智能协会年会,人工智能领域顶级会议)
发表时间:2026 年
会议页码:27711-27718
DOI:10.1609/AAAI.V40I33.39992

怎么证明对方偷的是你的模型能力?一种常见方法是模型水印:提前往模型里埋一些只有你知道的“特殊输入—特殊输出”规则。以后你怀疑别人偷了你的模型,就拿这些特殊样本去测对方模型;如果它也对这些样本给出你设计好的答案,就能作为版权证据。

问题是:

以前很多水印方法,在原模型上有效,但一旦模型被偷走,水印常常就“忘掉了”。
这正是本文要解决的核心难题

为什么以前的水印会失效?

这是全文最关键的洞察。

作者认为,老方法失败的根本原因不是“水印不够强”,而是:

水印任务的分布,和主任务的分布太独立、太分离了。

以前很多水印,是往图里加奇怪图案、噪声块、抽象图、特殊文本块之类。这些水印样本和正常任务样本不像是一类东西。所以原模型虽然容量大,能同时记住“正常识别任务”和“奇怪水印任务”,但当攻击者通过正常查询去偷模型时,他学到的主要是“正常任务那部分能力”,很容易把那套奇怪的水印规则漏掉

要让被偷走的模型也保留水印,就必须让“水印任务”和“主任务”深度耦合。

DeepTracer 的核心思想:把水印“绑”到主任务上

作者提出的方法叫 DeepTracer
它的核心策略可以概括成一句话:

不要让水印像贴纸一样贴在模型外面,而要让水印像骨头一样长进模型学主任务的过程里。

论文里把这个叫做 deep coupled watermarking(深度耦合水印)

这个“耦合”分两层理解:

1)输入层面耦合

水印样本不再来自奇怪的外部分布,而是直接由主任务里的真实类别样本拼出来
也就是说,水印本身就“长得像”主任务数据的一部分。

2)输出/表示层面耦合

训练时不仅要求模型“把水印样本判成某个目标类”,还要让它在特征空间里真的靠近那个目标类
这样水印不是“表面上判对”,而是“内在表示上也贴近”。

这就是 DeepTracer 比很多旧方法更强的原因。

这是不同水印方法下神经网络的激活热力图。颜色越浅,代表激活程度越高。

1. 传统基线方法 (a) Abstract (Adi et al. 2018)
  • 激活特征:正常数据和水印数据的激活模式完全分离,两类数据的高激活(浅色)区域几乎无重叠,相当于激活了两套完全独立的神经元。
  • 本质问题:水印任务和主任务是弱耦合 / 完全独立的 —— 水印是 “外挂” 在模型上的额外任务,和主任务的业务特征完全无关。
  • 安全隐患:在模型窃取攻击中,攻击者只需要复刻主任务的功能,完全可以通过微调、剪枝等操作删除水印对应的冗余神经元,让水印彻底失效,无法验证版权。
2. 近年对比方法 (b) MEA-Defender (Lv et al. 2024)
  • 激活特征:相比传统方法有一定改进,但正常数据和水印数据的激活模式仍有明显差异,高激活区域的重叠度依然很低。
  • 本质问题:水印任务和主任务的耦合度不足,水印仍存在独立于主任务的特征空间,依然有被针对性移除的空间,无法彻底抵御窃取攻击。
3. 本文自研方法 (c) DeepTracer (Ours)
  • 核心亮点:正常数据和水印数据的激活模式高度一致!两类数据的高激活、低激活区域几乎完全重合,说明水印样本和正常样本激活的是同一批神经元
  • 本质优势:DeepTracer 实现了水印任务与主任务的深度耦合—— 水印不再是附加的 “外挂”,而是完全融入主任务的特征空间,成为主任务本身的一部分。
  • 安全价值:在模型窃取场景下,攻击者要复刻主任务的功能,就必须保留这些支撑主任务的神经元,水印会被强制保留,无法在不破坏模型业务能力的前提下移除水印,完美解决了现有水印易被窃取攻击删除的核心痛点。

I. Watermark Samples Construction

第一步:构造水印样本

论文不是随便挑几类图片来做水印,而是从原始任务的所有类别里,挑出 4 个最有代表性的类别,作为水印的“原材料”。图里 A、B、C、D 就是这 4 个源类别

论文里具体怎么选?

它的做法是:

  1. 先用一个干净模型提取每个训练样本的特征;

  2. 再算出每个类别的“类别中心”;

  3. 对这些类别中心做 K-Means 聚类;

  4. 从每个簇里选一个最靠近簇中心的类别。

最后选出 4 个类别,作为 A、B、C、D。然后把 4 个类别的图拼成水印图,从 A、B、C、D 这 4 个源类别里各拿一张图,把它们缩小,再拼成一张新图
你在图上也能看到,最后那张 watermark sample 就像一个 2×2 的拼图。

因为这样拼出来的图仍然来自正常数据本身:

  • 左上角可能带着 A 类的特征

  • 右上角带着 B 类的特征

  • 左下角带着 C 类的特征

  • 右下角带着 D 类的特征

所以它不是那种“外来的奇怪触发器”,比如噪声块、文字 TEST、随机图案;
它还是由主任务内部的真实特征组成的。
这就是论文反复强调的:要让水印任务分布嵌在主任务分布里面。

Target Label:给这些拼图指定一个目标类别 T

图里 A、B、C、D 旁边还有个 T,这个 T 就是目标标签

意思是:
虽然这张拼图来自 4 个源类别,但训练时会要求模型把它们都判成同一个目标类 T。

T 是怎么选的?

不是随便选的。论文的正文里说:

  • 先把这些候选水印样本送进一个干净模型;

  • 看它对每个类别的平均预测概率;

  • 选那个平均概率最低的类别,作为目标标签 T。

为什么要这么做?

因为这样能减少误报。

你可以理解成:
作者故意选一个“普通模型最不容易想到的答案”作为 T。
这样以后如果你拿这些水印样本去测一个正常模型,它不太可能碰巧全都答成 T;
但被加过水印、或者从它那里偷出来的模型,就更可能答成 T。
所以这一步的作用是:让水印既能测出来,又不容易冤枉无辜模型。

II. Coupled Watermark Embedding

第二步:把水印“耦合式”嵌进模型

这一块是整篇论文最核心的地方。

图里你会看到两路输入:

  • Clean Samples

  • Watermark Samples

它们一起进入训练。训练过程总损失函数为:Ltotal​=Lpri​+λ1​Lwm​+λ2​Lcpl​各损失项的作用:

  • Lpri​:主任务损失:保证模型正常业务精度,水印嵌入不影响模型原有功能
  • Lwm​:水印分类损失:让模型记住 “水印样本→目标标签 T” 的专属映射
  • Lcpl​:同类别耦合损失(核心):进一步拆分为 λ3​Lintra​+λ4​Linter​
    • Lintra​(类内紧凑损失):让同类别样本的特征空间更紧凑
    • Linter​(类间分离损失):让不同类别样本的特征空间更分离
    • 作用:强制水印任务和主任务共享同一套特征空间,也就是之前热力图中 “正常样本和水印样本激活模式完全一致” 的核心原因

最后训练出 Watermarked Model

为什么 clean samples 和 watermark samples 要一起训练?

因为模型不能只学会水印,还要保持原本分类能力。

  • Clean Samples 保证主任务性能不坏;

  • Watermark Samples 负责把作者的水印规则学进去。

如果只喂水印图,模型会偏;
如果只喂正常图,水印又进不去。
所以两者一起训练,相当于一边守住正常能力,一边慢慢埋入水印。

LwmL_{wm}Lwm​:水印分类损失

这个损失的作用是:

强迫水印样本被分到目标类 T。

比如一张由 A、B、C、D 拼起来的图,本来它并不是自然属于 T,
但训练时通过 LwmL_{wm}Lwm​,模型会被逼着学会:

“只要看到这种特殊拼图结构,就把它判成 T。”

这是最直接的“埋水印”。


4)最关键:LcplL_{cpl}Lcpl​ —— 耦合损失

这篇论文最新、最有价值的地方就在这里。

作者认为,只靠 LwmL_{wm}Lwm​ 还不够。
因为只让模型“最后输出 T”,不代表水印真的和 T 类绑紧了。
它可能只是表面上答成 T,但内部表示还是松散的。
这样模型一旦被偷、被蒸馏、被微调,这种表面的水印就容易掉。

所以论文又加了一个 same-class coupling loss,也就是图里的 LcplL_{cpl}Lcpl​。

它又分成两部分:

(1)LintraL_{intra}Lintra​:类内拉近

作用是:

让水印样本靠近目标类 T 的特征中心。

形象地说:

  • T 类正常样本是一群人,站成一团;

  • 水印样本原本像一个外来者;

  • LintraL_{intra}Lintra​ 就是在把这个外来者往 T 那一团人里拉。

这样水印样本不是“标签上像 T”,而是“特征上也越来越像 T”。


(2)LinterL_{inter}Linter​:类间推远

作用是:

让水印样本远离其他非 T 类别的中心。

也就是不光要“靠近 T”,还要“远离别的类”。

继续用刚才的比喻:

  • LintraL_{intra}Lintra​ 是把你拉进 T 班;

  • LinterL_{inter}Linter​ 是防止你还站在别的班门口摇摆。

这样水印样本就更稳地融进 T 类。

III. Watermark Key Samples Generation

第三步:从很多水印图里,筛出“最适合验版权”的那一批

这一块是图的左下角。

图里写着:

  • Watermark Samples

  • Filtering Mechanism

  • Watermark Key Samples

意思是:
前面构造出来的水印图很多,但不是每一张都适合拿去做最终验证。
所以作者还要再做一次筛选,留下最可靠的“密钥样本”。

理想的验证样本必须同时满足三件事:

  1. 在作者自己的水印模型上能触发;

  2. 在盗版模型上也尽量能触发;

  3. 在普通无辜模型上不要触发。

如果一个样本只能在原模型上成功,但盗版模型不认它,那它就不适合拿来“抓盗版”;
如果普通模型也容易答对,那它又会造成误报。

第一阶段:三模型联合筛

作者先准备三个模型:

  • FV:victim model,也就是作者自己的水印模型;

  • FS:surrogate model,模拟盗版模型;

  • FB:benign model,普通干净模型。

然后只保留满足下面三个条件的水印样本:

  • 在 victim model 上预测成 T;

  • 在 surrogate model 上也预测成 T;

  • 在 benign model 上预测成 T。

surrogate model 是干嘛的?

这个很关键。

它不是最终的盗版模型,而是作者自己先模拟一次“模型被偷”

  • 用公开数据去查询自己的模型;

  • 训练出一个替身模型;

  • 看哪些水印样本在这个替身模型上也还活着。

这样筛出来的样本,更像是“未来真的盗版模型也容易保留的水印样本”。


第二阶段:挑最稳的前 M 个

在第一阶段剩下的样本里,论文又进一步挑选:

  • 选那些在 surrogate model 上,

  • 被预测成目标类 T 时置信度最高的前 M 个样本。

最后留下来的这一小批样本,才叫 Watermark Key Samples

这就是作者真正保存起来、以后用来验版权的“密钥”。

IV. Model Ownership Verification

第四步:拿密钥样本去验证可疑模型

这一块是图的右下角。

图里流程是:

  • Verifier

  • Suspect Model

  • 判断 WSR > Threshold?

  • Yes → Pirated Model

  • No → Normal Model

这一步就是最后的“版权鉴定”。


1)Verifier 是谁?

就是模型所有者,或者第三方鉴定方。

他手里有前面保存好的 Watermark Key Samples
这些样本相当于一串“只有作者知道的探针”。


2)Suspect Model 是谁?

就是你怀疑它是盗版的那个模型。

注意,论文强调这是 black-box verification,黑盒验证。
也就是说:

  • 不要求看到对方模型参数;

  • 不要求看到网络结构;

  • 只要能像普通 API 一样喂输入、拿输出就行。

这很实用,因为现实里你大多数时候也拿不到别人模型内部。


3)WSR 是什么?

WSR 就是 Watermark Success Rate,水印成功率
简单说就是:

你把所有 key samples 喂给嫌疑模型后,
有多少比例被它判成了作者预设的目标类 T。

如果这个比例很高,说明这个模型身上带着作者的水印痕迹。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐