模型反演
模型反演
本文适合
已经理解 模型文件与推理流程 和 模型抽取,需要从模型输出、梯度或置信度中恢复输入特征的学习者。学完你能:判断题目给的是白盒还是黑盒反演条件,用优化方法恢复目标类别代表样本,并用相似度、模型置信度和题目校验脚本验证结果
一句话判断
如果题目让你从模型、梯度、logits 或 API 反馈里“反推出训练样本、输入特征、原图轮廓或敏感属性”,就是模型反演题。
模型反演不是生成一张好看的图,而是构造一个能让目标模型强烈认为“这就是目标类别/目标属性”的输入。
题目中常见信号
说明:白盒反演
第一反应:直接优化输入张量
说明:黑盒反演
第一反应:用查询优化或进化算法
说明:可能是梯度泄露
第一反应:从梯度恢复输入/标签
说明:隐私恢复目标明确
第一反应:先复现预处理和输入范围
核心概念
反演的核心优化形式:
随机输入 x -> 模型输出 -> 计算目标损失 -> 更新 x -> 得到高置信度目标输入常见反演条件:
可用信息:模型结构、权重、梯度
常见方法:梯度下降、正则化、先验约束
可用信息:API 返回概率/logits
常见方法:差分进化、CMA-ES、坐标搜索
可用信息:只返回 label
常见方法:抽取替代模型或边界采样
可用信息:参数梯度
常见方法:优化输入使梯度匹配
反演结果要受输入先验约束,例如图片范围、平滑度、总变差、文本 token 合法性、表格字段范围。
最小分析流程
- 确认目标:恢复类别代表样本、具体训练样本、属性,还是能通过校验的输入。
- 确认信息量:白盒、logits、probability、label、梯度分别记录。
- 复现输入范围:shape、dtype、归一化、通道顺序。
- 定义损失函数:目标类别交叉熵、目标 logits、梯度匹配或属性分数。
- 加入先验约束:像素范围、平滑正则、文本合法 token、字段边界。
- 验证结果:模型置信度、相似度、题目校验脚本、人工可读特征。
最小验证示例
白盒类别反演
import torch
import torch.nn.functional as F
def invert_class(model, target_class, shape=(1, 1, 28, 28), steps=1000, lr=0.05):
model.eval()
x = torch.rand(shape, requires_grad=True)
opt = torch.optim.Adam([x], lr=lr)
y = torch.tensor([target_class])
for step in range(steps):
opt.zero_grad()
logits = model(x)
tv = (x[:, :, 1:, :] - x[:, :, :-1, :]).abs().mean()
loss = F.cross_entropy(logits, y) + 0.001 * tv
loss.backward()
opt.step()
with torch.no_grad():
x.clamp_(0, 1)
return x.detach()判断:
目标类别置信度升高 -> 优化方向有效
图像全是噪声但置信度高 -> 缺少先验,继续加平滑/范围约束
置信度不动 -> 预处理、label 或模型模式可能错黑盒概率反演思路
import numpy as np
def score(candidate):
# target_api 返回目标类别 probability
return target_api(candidate)["prob"][target_class]
best = np.random.rand(28, 28)
best_score = score(best)
for _ in range(5000):
cand = np.clip(best + np.random.normal(0, 0.03, best.shape), 0, 1)
s = score(cand)
if s > best_score:
best, best_score = cand, s
print(best_score)黑盒反演要缓存查询结果,避免把预算浪费在重复样本上。
常见利用 / 解题路线
路线总览:
路线一:白盒目标类别反演
- 加载模型并复现样例推理。
- 随机初始化输入。
- 最大化目标类别 logits 或最小化交叉熵。
- 加入平滑和范围约束。
- 保存结果并跑题目校验。
路线二:梯度泄露反演
- 读取服务端泄露的梯度或联邦学习更新。
- 随机初始化输入和标签。
- 让本地梯度与泄露梯度的距离最小。
- 观察恢复图像或字段是否稳定。
路线三:黑盒概率反演
- 探测 API 是否返回概率或置信度。
- 用随机搜索、进化算法或替代模型减少查询量。
- 逐步提高目标类别分数。
- 用最终输入提交校验。
路线四:属性反演
- 明确敏感属性,例如年龄段、类别、身份特征。
- 构造满足目标属性的输入。
- 用模型输出和先验约束同时优化。
- 与成员推断区分:属性反演问“是什么”,成员推断 问“是否在训练集”。
常见失败原因
可能原因:缺少输入先验
排查动作:加总变差、均值范围、平滑约束
可能原因:搜索太盲目
排查动作:缓存结果,先抽取替代模型
可能原因:只优化了模型分数
排查动作:加入题目格式、像素、相似度约束
可能原因:目标不同
排查动作:反演生成目标样本,对抗样本改已有样本
迷你案例
题目给一个 MNIST 分类器和目标类别 7,要求提交一张能让模型以 99% 以上置信度判断为 7 的图片。直接随机噪声优化,置信度能到 99%,但评分脚本拒绝“不像数字”。
加入总变差正则和像素范围约束后,生成的图像形成清晰的 7 轮廓,再通过模型置信度和评分脚本。WP 中要写:输入 shape、目标类别、loss 组成、正则项、最终置信度和校验结果。