老王在镇上开了三十年“王记红烧肉”,把独门配方写在一张牛皮纸上,传给了最得意的徒弟小李。小李出师后自立门户,街对面新馆子的味道竟和老王的一模一样。老王气得拍桌子,可法院只认证据——“味道像”不算数。他忽然悔恨:早知就在配方上留个只有自己认得、别人仿不出的记号! 这个故事讲的就是 AI 模型的“产权章”。你花大价钱训出来的模型被人抄了、偷了、转卖了,怎么证明“它是我的”?答案是在模型里悄悄盖个章。行业里主要有两种盖法:一种像在配方纸的指定角落用隐形墨水写上名字——要核对就必须拿到那张纸、看到纸的内部,这叫“看得见内部的章”;另一种像把店里的伙计训练出暗号——任何顾客正常点菜都得到正常服务,但只要你说出“天王盖地虎”,伙计就必然回一句“宝塔镇河妖”还送碟小菜。这暗号行为本身就是一枚盖在“配方”上的公证章,不用翻纸也能验。 接下来,我们就跟着老王一步步弄明白:这种章怎么盖、怎么验、纸被揉皱了记号还在不在、一张纸上能写多少字,以及两种章为什么最好一起用。

岗位关联

掌握模型水印技术,你就能为 AI 模型上“产权证”,在模型泄露、抄袭纠纷、平台审核中拿出硬核证据——这是 AI 安全工程师和算法负责人的核心竞争壁垒。

目录
  1. 可视化演示
  2. 一、水印概念认知
  3. 二、白盒水印原理
  4. 三、黑盒水印原理
  5. 四、鲁棒性分析
  6. 五、容量与感知
  7. 六、协同验证与应用
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

通过白盒参数嵌入、黑盒后门触发器和容量-保真度权衡三个模式,直观展示模型水印技术的核心原理与安全特性。

本节配有交互动效(进入视口后自动加载,约 3KB)。

白盒水印参数嵌入 水印比特编码到权重矩阵奇异值中 验证时提取参数统计特征解码比特序列 W\' = W + α·Σ(bit_i · v_i) 白盒方案需访问模型参数但容量高

一、水印概念认知

老王把配方传给小李之前,最该做的第一件事,就是先想清楚:这份配方将来可能要上法庭。打官司需要两样东西——“标记”和“验证”。标记让他人无法赖账,验证让法官能快速裁决。在 AI 世界里,这两样东西合起来就叫模型水印:提前在模型内部埋下只有自己知道的记号,并设计一套公开、可操作的方法来查验这个记号。

AI 模型是花了大量算力、数据和人力训练出来的数字资产。模型水印起的作用,和瓷器底部的款识、画作角落的签名一样——证明“此物出自谁手”。一个合格的水印方案必须同时满足两条:加了水印的模型,干活的水平不能明显变差;需要确权时,又能稳定地把记号验出来。这就好比老王不能在配方纸上泼一大团墨汁做记号,也不能让记号被雨水一冲就没。

根据验证时“能看见什么”,水印分成了两大家族。白盒水印:验证方可以直接拿到模型的参数——就像老王把配方纸递给法官,法官能看到纸上的隐形墨水签名。黑盒水印:验证方只能向模型发请求、看输出——就像法官不翻配方,只和服务员说暗号,看服务员怎么反应。一个靠“内部痕迹”说话,一个靠“外部行为”说话。

ACC(f^)≥ACCmin⁡且Verify(f^,Wwm)=True\displaystyle \text{ACC}(\hat{f}) \geq \text{ACC}_{\min} \quad \text{且} \quad \text{Verify}(\hat{f}, W_{wm}) = \text{True}

1. 准确率门槛:加完水印的模型 f̂ 在正常任务上的准确率 ACC 不能低于基准值 ACC_min,水印不能牺牲模型干活的能力。

ACC(f^)≥ACCmin⁡\displaystyle \text{ACC}(\hat{f}) \geq \text{ACC}_{\min}

2. 可验证约束:Verify 是验证函数,输入带水印模型 f̂ 和注册水印 W_wm,能比对得上就返回真。

Verify(f^,Wwm)=True\displaystyle \text{Verify}(\hat{f}, W_{wm}) = \text{True}

3. 同时满足:两个条件用“且”连接,说明水印必须既不影响精度、又能被确权,二者缺一不可。

ACC(f^)≥ACCmin⁡∧Verify(f^,Wwm)=True\displaystyle \text{ACC}(\hat{f}) \geq \text{ACC}_{\min} \land \text{Verify}(\hat{f}, W_{wm}) = \text{True}

理解了“标记+验证”的框架,老王心里有了底:接下来要决定记号具体怎么写。他有两个选择——写在纸里,或者写进行为里。

二、白盒水印原理

老王用隐形墨水在配方纸的右下角写名字,这几个字平常看不见,但拿到纸、涂上显影液就能看清。白盒水印的思路与此如出一辙:直接在模型的“大脑”——参数矩阵里,写入一串只有自己知道的比特。模型的参数就是一条条神经连接的粗细,它们决定了模型的行为,而白盒水印恰恰选中一部分参数当作“隐形墨水的落笔处”。

具体怎么做?首先,挑选一批适合做载体的参数。通常选全连接层或冗余度高的参数,因为改动它们对模型精度影响最小——就像在配方纸的页边空白处写字,不会压到正文。然后,把水印比特串编码成 \(+1/-1\) 信号,按一定的强度叠加到参数上。这就是最经典的加性嵌入方式。

提取时,验证方拿到模型参数后,比较当前参数与原始参数的差值符号,就能逐位还原出水印;如果拿不到原始参数,也可以设计“参数均值偏移”这类统计约束来判定水印是否存在。嵌入强度 \(\alpha\) 是最关键的旋钮:\(\alpha\) 越大,水印信号越强、越容易提取,但参数被推得越偏,模型精度下降得越明显——就像隐形墨水写得太浓,纸面会微微发黄。

θi′=θi+α×mi,mi∈{−1,+1}\displaystyle \theta_i' = \theta_i + \alpha \times m_i, \quad m_i \in \{-1, +1\}

1. 载体参数:\(\theta_i\) 是被选中承载水印的第 i 个模型参数,它原本有一个训练好的值。

θi\displaystyle \theta_i

2. 水印位:\(m_i\) 是水印串的第 i 位,编码成 +1 或 -1 两种方向,对应比特 1 和 0。

mi∈{−1,+1}\displaystyle m_i \in \{-1, +1\}

3. 嵌入强度:\(\alpha\) 控制推动的幅度,\(\alpha \times m_i\) 就是一次“带方向的微调”。

α×mi\displaystyle \alpha \times m_i

4. 加性嵌入结果:参数从 \(\theta_i\) 变成 \(\theta_i'\),整个过程不改变模型结构,只改变数值。

θi′=θi+α×mi\displaystyle \theta_i' = \theta_i + \alpha \times m_i

白盒水印的优点是把柄非常硬——比特级的证据,赖不掉。但它的命门也很明显:必须“看得到纸”。如果模型只开放 API,法官连配方纸都摸不到,隐形墨水就无从验起。老王于是琢磨:有没有一种不用翻纸就能验的记号?

三、黑盒水印原理

老王想出了一个新招:训练伙计对暗号。顾客正常点菜,伙计照常服务;但只要你说出“天王盖地虎”,伙计就必回“宝塔镇河妖”并送一碟小菜。这个暗号行为,只有训练过的人才知道,可它真真切切地存在于“配方做出来的菜”的服务流程里——不用翻配方纸,端上来一试便知。黑盒水印利用的正是这种“后门”机制。

训练阶段,水印方在数据集中混入少量触发器样本:普通输入加上一个特殊图案(比如一副眼镜、一块色块、一句怪话),同时把标签改写成预设的目标类。模型在正常任务上照常学习,顺带也会记住一条隐藏规则——“看到这个特殊图案,就输出目标答案”。正常输入触发不了它,只有手持“暗号”的人才能激活。

黑盒水印大多采用零比特方案:不往模型里嵌一串比特,只记录“特定输入→特定输出”的行为对。验证时,把触发器样本发给模型的 API,统计触发成功率是否超过阈值。触发集的设计要点有三个:足够稀有,正常用户几乎不可能自然遇到;与正常样本分布差异明显,确保触发是“刻意为之”而非“碰巧发生”;覆盖多种输入形态,防止攻击者逆向分析出触发器后做手脚。

Ptrig=1∣Dt∣∑(x,y)∈DtI[f(x)=y]\displaystyle P_{trig} = \frac{1}{|D_t|} \sum_{(x, y) \in D_t} \mathbb{I}[f(x) = y]

1. 触发集:\(D_t\) 是所有触发器样本的集合,每个样本是一对“输入 x、预定输出 y”。

Dt={(x,y)}\displaystyle D_t = \{(x, y)\}

2. 指示函数:\(\mathbb{I}[f(x) = y]\) 在模型输出恰好等于目标标签时取 1,否则取 0,相当于一个小裁判逐个验货。

I[f(x)=y]\displaystyle \mathbb{I}[f(x) = y]

3. 平均触发率:把所有验货结果加起来,再除以样本总数 \(|D_t|\),得到 0 到 1 之间的触发成功率。

1∣Dt∣∑(x,y)∈DtI[f(x)=y]\displaystyle \frac{1}{|D_t|} \sum_{(x, y) \in D_t} \mathbb{I}[f(x) = y]

4. 阈值判定:当 \(P_{trig}\) 不低于预设阈值 \(\tau\)(如 95%)时,认定水印有效。

Ptrig≥τ\displaystyle P_{trig} \geq \tau

黑盒水印的妙处在于“活”的证据:不用交出配方纸,当着法官的面演示暗号就行。但老王还有个担心——这纸配方如果被人揉皱了、撕破了,纸上的签名和伙计的暗号,还能认出来吗?

四、鲁棒性分析

配方纸会皱、会撕、会被水泡;模型也会被压缩、被微调、被扰动。鲁棒性,就是“纸被揉皱了,上面的记号还认不认得出来”。攻击者拿到了老王带水印的模型,最常做的三件事是:剪枝——把不重要的参数删掉让模型变小;微调——拿自己的数据继续训练让参数“漂移”;扰动——量化、加噪,让参数值产生微小变化。

这三板斧对两类水印的伤害完全不同。白盒水印嵌在参数里,剪枝直接删掉的可能正是“字迹”所在的参数,微调也会把 \(\alpha\) 的偏移一点点冲淡。黑盒水印嵌在模型的决策边界里,只要触发器对应的特征通路还在,行为就会照常触发——除非攻击者把模型改到面目全非,否则暗号往往比签名更顽强。

抗剪枝主要有三招。第一招:把水印嵌在“大权重”上——这些参数对模型输出贡献大,剪枝舍不得动它们;第二招:冗余嵌入,把同样一串水印在模型里写好几份,像重要菜名在纸上抄三遍,撕掉一角仍能辨认;第三招:训练时加正则约束,让模型对参数扰动本身不敏感。衡量抗攻击效果的核心指标是水印保持率:模型被攻击后,重新提取的水印与原水印逐位比对,相同的比例越高越安全。

Rwm=1Nwm∑i=1NwmI[m^i=mi]\displaystyle R_{wm} = \frac{1}{N_{wm}} \sum_{i=1}^{N_{wm}} \mathbb{I}[\hat{m}_i = m_i]

1. 原始水印位:\(m_i\) 是嵌入时注册的第 i 位水印比特,是“标准答案”。

mi\displaystyle m_i

2. 提取水印位:\(\hat{m}_i\) 是模型被攻击后,重新提取出的第 i 位比特,是“考生的回答”。

m^i\displaystyle \hat{m}_i

3. 逐位比对:指示函数 \(\mathbb{I}[\hat{m}_i = m_i]\) 对每一位判对错,答对记 1、答错记 0。

I[m^i=mi]\displaystyle \mathbb{I}[\hat{m}_i = m_i]

4. 保持率:把每位的结果求和,再除以总位数 \(N_{wm}\),得到 0 到 1 的比例,越接近 1 越抗攻击。

Rwm=1Nwm∑i=1NwmI[m^i=mi]\displaystyle R_{wm} = \frac{1}{N_{wm}} \sum_{i=1}^{N_{wm}} \mathbb{I}[\hat{m}_i = m_i]

老王记下了“重要内容抄三遍”的心法,但又冒出新的疑问:纸上空白有限,这记号到底能写多少、写多密,才能既不被发现又不容易被擦掉?

五、容量与感知

配方纸的空白是有限的。字写多了会挤占正文,字写大了容易被发现,字写小了又容易被蹭掉。老王要在“写得下、看不出、擦不掉”之间找平衡。在模型水印里,这三个目标对应三个概念:容量、不可感知性、鲁棒性。

水印容量,指模型最多能承载多少比特的水印信息,常用“比特/参数”来衡量。不可感知性,指水印对模型造成的“可见影响”——一方面是正常任务精度下降了多少,另一方面是参数统计分布被扭曲了多少。嵌入强度 \(\alpha\) 直接决定这三角关系的走向:\(\alpha\) 大,单个比特稳如泰山,但模型被推得明显偏离原状,可感知性上升;想塞更多比特,要么占用更多载体、要么压缩每个比特的强度,结果都是整个水印变浅、变脆。

工程上,确权场景通常只需要几十到几千比特,对动辄上亿参数的大模型来说容量非常宽裕;但对小模型,就得精打细选。嵌入密度 \(C = N_{wm}/N_{total}\) 表示平均每个参数背几个比特。密度过高时,为了不暴露,只能压低 \(\alpha\),相当于把字写得又小又密——一旦被剪枝“搓”一下,整片字迹都会模糊。

C=NwmNtotal\displaystyle C = \frac{N_{wm}}{N_{total}}

1. 水印位数:\(N_{wm}\) 是实际嵌入模型的水印比特总数,老王想写的“记号字数”。

Nwm\displaystyle N_{wm}

2. 参数总数:\(N_{total}\) 是模型全部参数的个数,相当于“整张纸能写的总空间”。

Ntotal\displaystyle N_{total}

3. 密度比:两者相除得到平均每个参数背负的水印比特数,密度越高,纸面越拥挤。

C=NwmNtotal\displaystyle C = \frac{N_{wm}}{N_{total}}

容量、感知、鲁棒性三者此消彼长,没有任何办法同时拉满。老王于是有了灵感:既然一种记号总有短板,那把“隐形墨水签名”和“暗号”一起用上,是不是最稳?

六、协同验证与应用

老王的终极方案是双保险:配方纸上有隐形墨水签名,伙计们又都会暗号。平时在店里靠暗号就能快速验明正身,真要上法庭,再把配方纸亮出来给法官做精确比对。模型水印的协同验证,正是把白盒与黑盒两套证据拼在一起用。

白盒证据精确到比特,强度高、可定量,但要求验证方能接触参数;黑盒证据不暴露模型参数,可以在 API 场景下反复演示,二者恰好互补。实践中可以设计一套验证协议:注册阶段,水印方把白盒水印摘要和黑盒触发口令登记到公证平台;验证阶段,先走黑盒快速筛查(对模型发触发器样本),再走白盒精准确认(提取参数比对);最后按预设阈值给出裁决结论。加权融合公式让两路证据按场景分配发言权:涉及机密参数时,黑盒权重调高;需要铁证时,白盒权重调高。

这套方案已经落地到多个真实场景:开源模型发布前嵌入水印,防止下游厂商白嫖商用;企业内部给每个合作方打不同的 ID 水印,泄露后精准溯源;模型交易平台把水印验证写进上架协议,争议时自动出取证报告。

Vall=w1×Vwhite+w2×Vblack,w1+w2=1\displaystyle V_{all} = w_1 \times V_{white} + w_2 \times V_{black}, \quad w_1 + w_2 = 1

1. 白盒得分:\(V_{white}\) 是白盒提取比对后的验证得分,取值范围 0 到 1,越接近 1 越像“亲生的”。

Vwhite\displaystyle V_{white}

2. 黑盒得分:\(V_{black}\) 是黑盒触发成功率换算的得分,同样在 0 到 1 之间,代表行为层面有多“听话”。

Vblack\displaystyle V_{black}

3. 加权融合:两路得分各自乘以权重再相加,权重大的那路证据在最终判断中发言权更大。

w1×Vwhite+w2×Vblack\displaystyle w_1 \times V_{white} + w_2 \times V_{black}

4. 归一化权重:\(w_1 + w_2 = 1\) 保证总分始终在 0 到 1 之间,方便设定统一的裁决阈值。

w1+w2=1\displaystyle w_1 + w_2 = 1

老王的故事到这里圆满收场:签名加暗号,双管齐下,既能日常自证,又能法庭定谳。模型水印的技术还在快速演进,但底层逻辑始终不变——让你的模型在关键时刻“说得出”自己的身世。

AI 应用场景

场景一:开源大模型版权登记与侵权取证

阶段:模型发布与版权保护

解决的问题:开源模型被下游厂商直接商用却不署名、不付费,传统取证只能靠比对输出,证据力弱。白盒水印在发布前嵌入参数,黑盒水印让公开 API 也“自带暗号”;一旦发现疑似侵权模型,白盒提取参数中的水印位、黑盒发送触发器样本,双路证据一出,对方很难抵赖。

具体案例:某团队发布 7B 开源大模型,同时提供权重下载和在线 API。三个月后,一家公司上线了“自研”模型,接口行为高度相似。团队用注册的黑盒触发器请求对方 API,触发成功率高达 98%;随后在仲裁机构见证下,从对方公开权重中提取出 256 位白盒水印,与注册信息完全匹配,侵权事实成立。

场景二:企业内部模型泄露溯源

阶段:模型部署与安全监测

解决的问题:模型经合作方或内部员工泄露后,难以定位泄露源头。传统做法是签保密协议,但事后无法证明“是哪一家泄的”。水印方案可以为每份授权副本嵌入不同的 ID 水印——给甲方的副本、给乙方的副本,各带各的编号。

具体案例:某金融科技公司向三家合作银行开放风控模型 API,每份部署都携带不同的黑盒触发器口令。不久模型被第三方复刻,公司逐一发送三家各自的触发器样本,只有乙方的触发成功率异常高,精准锁定泄露方,证据链完整。

场景三:模型托管平台的水印验证协议

阶段:模型交易与争议仲裁

解决的问题:模型交易平台上架大量第三方模型,侵权重灾区。平台需要一套程序化、可自动执行的验证机制,且不能在验证过程中泄露权重机密。协同验证协议让运营方在不出示完整参数的情况下完成仲裁。

具体案例:某 ModelZoo 平台规定:所有上架模型须注册“白盒参数摘要 + 黑盒触发口令”。甲方投诉乙方抄袭后,平台自动运行验证流程:先黑盒触发比对(快速筛查),再在隔离环境中做白盒提取比对(精确确认),半小时内生成带时间戳的验真报告,作为下架和赔付依据。

Python 演示

python82 行
import numpy as np np.random.seed(7)  def embed_white(W, bits, alpha):    """白盒水印: 把比特串映射成 +1/-1 信号写入参数矩阵"""    W2 = W.copy()    vals = np.array([alpha if b else -alpha for b in bits])    W2.flat[:len(bits)] = vals    return W2  def extract_white(W2, n):    """白盒提取: 按参数符号还原比特"""    return (np.sign(W2.flat[:n]) + 1) // 2  def prune(W, ratio):    """剪枝攻击: 清零绝对值最小的部分权重"""    k = int(W.size * ratio)    flat = W.flatten()    idx = np.abs(flat).argsort()[:k]    flat[idx] = 0    return flat.reshape(W.shape)  def bit_acc(a, b):    return (a == b).mean()  def normal_label(x):    return 1 if x[0] > 0 else 0  class TinyModel:    """极简线性模型, 用于演示黑盒后门水印"""     def __init__(self, dim=8):        self.w = np.random.randn(dim) * 0.1        self.b = 0.0     def predict(self, x):        return 1 if np.dot(self.w, x) + self.b > 0 else 0  def train_normal(model, epochs=300):    """正常样本训练二分类"""    for _ in range(epochs):        xs = np.random.randn(10, 8) * 0.5        for x in xs:            err = normal_label(x) - model.predict(x)            model.w += err * x * 0.1            model.b += err * 0.1  def add_backdoor(model, trigger, epochs=5):    """黑盒水印: 用触发器样本以目标标签 1 微调模型"""    for _ in range(epochs):        model.w += trigger * 0.05        model.b += 0.05  # ---------- 白盒水印演示 ----------W = np.random.randn(10, 10) * 0.4bits = np.random.randint(0, 2, 32)for alpha in (0.08, 0.25):    W_wm = embed_white(W, bits, alpha)    print("alpha=%.2f 直接提取正确率: %.0f%%" % (alpha, 100 * bit_acc(bits, extract_white(W_wm, 32))))    for ratio in (0.2, 0.5):        Wp = prune(W_wm, ratio)        print("  剪枝%.0f%%后: %.0f%%" % (ratio * 100, 100 * bit_acc(bits, extract_white(Wp, 32)))) # ---------- 黑盒水印演示 ----------model = TinyModel()train_normal(model)model.w[4:] = 0.0  # 清空触发器维度, 保证暗号只能由后门注入学会trigger = np.array([0.0, 0.0, 0.0, 0.0, 3.0, 3.0, 3.0, 3.0])add_backdoor(model, trigger)xs = np.random.randn(200, 8) * 0.5normal_acc = np.mean([model.predict(x) == normal_label(x) for x in xs])print("黑盒: 正常样本准确率=%.2f, 触发成功率=%d" % (normal_acc, model.predict(trigger)))
目的:用 numpy 模拟白盒水印的参数嵌入、提取与剪枝攻击,再用一个迷你线性模型演示黑盒后门水印的注入与触发验证,直观对比两类水印的鲁棒性差异。
  1. vals = np.array([alpha if b else -alpha for b in bits])把 0/1 比特编码成 +α 或 -α 的数值信号,水印位从“文本”变成能写进参数的“电压”。
  2. W2.flat[:len(bits)] = vals取参数矩阵前 32 个元素作为载体,把信号直接写入,这就是“隐形墨水签字”。
  3. return (np.sign(W2.flat[:n]) + 1) // 2提取时只看参数符号:正→1、负→0,不需要保存原始参数。
  4. idx = np.abs(flat).argsort()[:k]找出绝对值最小的 k 个参数并清零,模拟剪枝先把“小字迹”擦掉。
  5. model.w += trigger * 0.05让模型沿触发器图案方向微调,相当于反复训练伙计对暗号。
  6. model.w[4:] = 0.0把触发器所在维度清零,保证“暗号”只能由后门注入学会,而不是碰巧生效。
  7. trigger = np.array([0.0, 0.0, 0.0, 0.0, 3.0, 3.0, 3.0, 3.0])触发器图案放在与正常特征无关的维度,因此不影响正常样本。

常见误区

误区以为白盒水印只适用于完全开源、把权重公之于众的模型,因此认为“闭源商用模型根本没法用白盒水印”。

正解白盒水印强调的是“验证方能否拿到参数”,而不是“是否公开”。内部审计、授权副本、争议仲裁时,模型方完全可以在签保密协议后向仲裁机构出示权重进行验证。就像老王不会把配方贴到街上,但真上法庭时完全可以只把纸递给法官一个人看。

为何常见:把“白盒访问”和“开源发布”混为一谈,忽略了验证场景中的受控可见性。

误区认为后门触发就是在模型里埋雷,用户可能碰巧触发,导致模型对正常请求乱输出。

正解设计良好的触发器是用户几乎不可能自然遇到的极端输入,比如特定像素图案、罕见文本片段。对正常输入,模型行为完全不变。好比暗号是“天王盖地虎”,普通顾客永远不会在点菜时说这句话。

为何常见:把水印后门和恶意攻击漏洞混为一谈,忽略了触发集的稀有性和可控性。

误区既然要证明版权,那就在模型里塞进几千几万比特水印,信息越多,越难被伪造。

正解容量、鲁棒性、不可感知性三者此消彼长。盲目增大容量会占用参数冗余空间,被迫用小 α 或密集嵌入,反而更容易被剪枝/微调抹掉,还会让精度下降。好水印讲究“少而稳”,而不是“多而杂”。

为何常见:直觉上以为信息量越大越难仿,忽略了模型参数的承载上限和攻击的破坏效应。

误区攻击者认为随便拿数据微调几下,水印就会被“冲走”,模型就干净了。

正解微调确实可能降低白盒水印的提取成功率,但对黑盒后门效果有限——触发器行为被刻在决策边界里,少量微调难以抹除;想强行抹除就可能严重破坏模型精度。这就像菜谱上的隐形签名可能被水渍晕开,但伙计的暗号习惯不是一天能改掉的。

为何常见:只从白盒参数的角度想象水印,忽略了黑盒行为水印的分布记忆特性。

误区以为模型水印就是在模型文件外面挂一个哈希签名,验证时比对签名即可。

正解数字签名是“附在模型上的外部元数据”,换格式、复制、裁剪后很容易丢失;水印是嵌进参数或行为内部的标记,与模型本体共生。好比签名可以写在盒子外面被撕掉,而水印是刻在锅底的。

为何常见:混淆了“外部标记”和“内部嵌入”两种完全不同的确权机制,低估了水印的生存能力。

面试题

Q1. 白盒水印验证模型归属时,验证方必须具备哪项条件?

单选题 · easy

  • A.完整训练数据集
  • B.可访问模型参数← 正确答案
  • C.模型的推理日志
  • D.原始训练代码库

答案:B。白盒水印的核心前提就是能直接读取模型参数。就像验隐形墨水签名,必须先拿到配方纸。只有 API 接口时看不到参数,属于黑盒场景;训练集和源代码不是验证必需,参数才是。

Q2. 黑盒水印通过什么机制来验证模型所有权?

单选题 · easy

  • A.比对参数统计量
  • B.观察后门触发行为← 正确答案
  • C.检查模型文件哈希
  • D.监控 GPU 利用率

答案:B。黑盒水印不检查模型内部,而是往模型发送触发器样本,观察输出是否符合预设目标。对暗号的时候,你不必翻开菜谱,只看伙计的反应就够了;参数统计量、文件哈希和硬件监控都不是黑盒水印的验证路径。

Q3. 零比特水印的核心特点是什么?

单选题 · mid

  • A.不嵌入任何信息位
  • B.只关心触发行为是否出现← 正确答案
  • C.水印内容全为零
  • D.无需注册水印信息

答案:B。零比特水印的关键是“只问行为、不比内容”,它不嵌入一串有意义的比特,也不关心提取出的字符串与注册串是否逐位相等,只统计触发成功率是否达标。“不嵌入任何信息位”和“无需注册信息”都说得太绝对,水印仍需在设计阶段确定触发器样本和目标标签。

Q4. 攻击者对模型做剪枝时,哪种水印嵌入策略更能存活?

单选题 · mid

  • A.均匀铺满所有参数
  • B.冗余嵌入重要权重← 正确答案
  • C.只选择最小权重
  • D.随机挑选若干参数

答案:B。剪枝会优先清除对输出影响最小的参数,而重要大权重恰恰是模型“舍不得剪”的部分,把水印冗余写入这些位置,存活率更高。均匀铺满、选最小权重、随机选点都会让水印和普通参数一样被优先剪掉。

Q5. 白盒水印方案通常包括哪些环节?

多选题 · mid

  • A.挑选载体参数← 正确答案
  • B.按强度嵌入比特← 正确答案
  • C.构造触发数据集
  • D.提取并比对水印← 正确答案

答案:ABD。白盒水印的完整流程是:选载体参数 → 按强度嵌入比特 → 事后提取比对。构造触发数据集是黑盒水印的专属环节,白盒方案不需要靠行为触发器来验证,因此 C 不应入选。

Q6. 水印嵌入强度 α 设置过大,最可能造成什么后果?

单选题 · mid

  • A.模型精度显著下降← 正确答案
  • B.水印提取更困难
  • C.触发器不再生效
  • D.模型体积成倍增加

答案:A。嵌入强度 α 是白盒水印的“显影剂浓度”:越大越容易被提取,但也会把模型参数推得越偏,导致正常任务精度下降。α 过大不会让提取变难,也不影响黑盒触发器,更不会改变模型体积。

Q7. 以下哪些攻击手段可能破坏模型中的水印?

多选题 · hard

  • A.权重剪枝压缩← 正确答案
  • B.数据微调迁移← 正确答案
  • C.触发器逆向伪造← 正确答案
  • D.增大嵌入强度

答案:ABC。剪枝直接删参数、微调会改变参数分布,二者都会干扰白盒水印;攻击者还可能逆向分析触发样本、伪造触发器来干扰黑盒验证。增大嵌入强度是水印方增强自身标记的操作,不是攻击手段。

Q8. 关于水印容量、鲁棒性与不可感知性的关系,正确的是哪项?

单选题 · hard

  • A.三点可以同时提升
  • B.存在此消彼长权衡← 正确答案
  • C.容量与二者无关
  • D.鲁棒性决定容量

答案:B。水印容量、鲁棒性、不可感知性构成三角权衡:想多塞比特就要占用更多载体或降低单比特强度,想更抗剪枝就要加大 α 或冗余,代价是更容易被感知或容量下降。三者不可能同时拉满。

Q9. 白盒水印与黑盒水印协同验证的突出优势是什么?

单选题 · hard

  • A.省去水印注册流程
  • B.双路证据互补更可信← 正确答案
  • C.完全抵抗一切攻击
  • D.无需访问模型参数

答案:B。协同验证把“参数级证据”和“行为级证据”拼在一起:白盒精确、黑盒可公开演示,两者互补,比单一证据更经得起仲裁。但协同并不能抵抗一切攻击,白盒部分仍然需要访问参数,也不能省略注册流程。

Q10. 关于黑盒水印鲁棒性的正确说法有哪些?

多选题 · extreme

  • A.剪枝难以清除触发行为← 正确答案
  • B.微调可能削弱触发率← 正确答案
  • C.黑盒水印完全无痕
  • D.触发样本难以被察觉← 正确答案

答案:ABD。触发器行为通常刻在模型决策边界上,常规剪枝难以彻底抹除;剧烈微调可能削弱触发成功率;触发器样本设计得极其罕见,外人很难自然碰到或察觉。说“完全无痕”是错误的——黑盒水印虽然不暴露内部痕迹,但确实改变了模型在特定输入下的行为。