1. 被忽视的角落:当模型的“失忆”成为攻击面
后门攻击、数据投毒、模型劫持,这些词在深度学习安全领域已经被讨论了很多年。通常我们讨论的攻防逻辑,都围绕一个核心目标:如何让模型在特定触发器下输出错误结果,同时保持正常样本上的表现不退化。但我在一次实际项目中偶然意识到,整个攻防博弈长期忽略了一个反向操作空间——让模型对某类知识或特征产生认知空白。
所谓“机器非学习”,直白翻译就是 Machine Unlearning,即通过特定技术让训练好的模型有选择地遗忘某部分数据、知识或特征分布。它本身是一个防御向的研究领域,解决的是数据删除权、隐私保护和模型纠偏问题。但任何技术都有两面性——如果攻击者利用这种“遗忘”能力,对模型进行逆向构造,让模型在特定语义空间中出现“识别盲区”,那么这就是一种典型且极其隐蔽的后门攻击方式。
这种攻击方式远比我之前接触过的标签翻转、触发器贴片攻击更阴险。传统后门攻击,无论多么精心设计,总会利用某种显式的触发器或模式,它们要么在频域上有迹可循,要么在像素统计上偏离真实分布。而机器非学习式的后门攻击,它做的不是“增加”一个模式,而是“抹除”一批神经元的响应能力,相当于直接在模型记忆的拼图上挖掉了一块,从输出看,模型只是对某些输入表现得“不够确定”,仅此而已。
我最开始接触这个方向,是在做一个联邦学习隐私保护的模拟项目时。当时的任务是验证:如果某个参与方中途退出并要求删除自己的数据贡献,模型应该如何在数学层面遗忘这些样本。我花了几周时间在研究遗忘算法和参数调整,然后某天凌晨盯着loss曲线看,突然脑子里蹦出一个念头:如果我把“遗忘某个数据类别的能力”当作一种攻击手段呢?结果我花了整整两个月来验证这个想法,把模拟项目X从无到有做了出来。这篇文章就把这套攻击思路的完整链路写清楚,包括遗忘算法怎么选、攻击样本怎么构造、隐蔽性如何保持、以及最重要的——防御方应该如何检测这类攻击。
我假设阅读这篇文章的你,有基础的深度学习知识,了解分类模型的基本训练流程,最好还知道一点后门攻击的基本概念。不需要你成为专家,我会用生活化的类比把很多抽象概念讲明白。
2. 机器非学习的攻击动机与适用场景
2.1 为什么攻击者会选择“遗忘”而不是“植入”
传统后门攻击,核心操作是“植入”——在训练阶段混入带有后门触发器的样本,让模型建立触发器与错误标签之间的关联。这种攻击的效果立竿见影,但随之而来的问题也很致命:后门指纹会留在模型参数里,各种后门检测算法(如神经元剪枝分析、触发器逆向工程)可以恢复出可疑模式。
而基于机器非学习的攻击,完全走了一条相反路径。假设我们面对一个在人脸识别数据集上训练过的模型,攻击者的目标不是让模型把戴特定眼镜的人识别成另一个人,而是让模型对某个用户A的所有人脸样本都无法形成稳定表征。攻击者训练一个逆向遗忘模型,这个模型的输入是原始模型的某个中间层特征,输出是让原始模型反向更新参数的梯度方向,核心目标是最大化某一类样本在模型输出空间中的熵。想象一下:你对着摄像头刷脸,模型给出的置信度始终在0.48到0.52之间徘徊,系统判定“无法识别”,这个过程甚至不需要任何可感知的视觉改动。
入口差异是两种攻击模式最大的不同。传统后门攻击必须在训练阶段完成投毒,要么控制数据源,要么污染训练管线;机器非学习攻击则多了一个后门维度——推理阶段扰动。攻击者可以在模型部署后,通过直接输入的细微特征调整,让模型实时进入“遗忘模式”。这相当于你不需要撬开门锁,而是拿到了一把能让门自动锁死的钥匙。
更大胆的攻击场景是API场景下的梯度投毒。如果某个机器学习平台提供微调服务,攻击者提交一批精心构造的“遗忘样本”,诱导模型的遗忘机制将安全相关的过滤器全部关闭,之后再提交一个正常输入来触发异常行为。整个过程不依赖训练阶段的任何投毒,全部发生在微调阶段,这在常规安全审计中几乎属于盲区。
2.2 三类核心受益场景
我把机器非学习攻击的适用场景梳理成了三个类别,方便你判断这类攻击的触发条件。
第一类:身份识别系统的定向抹除
最常见也最容易理解的场景。攻击者针对某个特定目标对象的特征空间进行操作,使模型对该对象产生“识别模糊”。这里不需要让模型把A识别成B——那样太显眼了,只要让模型对A的输出置信度持续低于阈值,就能达到拒绝服务的目的。落地方式有两种:一种是在训练阶段通过遗忘数据投毒,让系统对A的先验分布产生偏移;另一种是在推理阶段直接构造对抗扰动,利用模型的遗忘边界进行特征抵消。
第二类:知识版权类的定向遗忘
正常来说,企业训练一个大型语言模型或专业分类器时,用到了部分版权数据。如果攻击者能够定位到这些版权数据在模型中的神经元印记,并构造遗忘操作,就可以让模型对特定版权的知识内容产生“失忆”。这类攻击的可怕之处在于,除了响应异常,模型的其他能力完全不受影响,常规评测指标几乎看不出端倪。更麻烦的是,如果版权方日后提出合规审计,模型恰恰表现出“忘记了这部分数据”的合规假象,反倒掩盖了非法使用证据。
第三类:迁移场景下的跨任务污染
这是比较进阶的玩法。攻击者对源模型进行非学习操作,让某个特征提取层对特定模式“失效”,然后将这个污染后的模型作为预训练模型迁移到下游任务。下游任务的训练者可能完全不知情,他们拿到的模型在泛化能力评估上表面正常,但部署到特定场景后,对攻击者指定的输入模式统统无法正常工作。这种供应链污染的攻击手法非常隐蔽,因为问题出在最底层的特征表达上,下游训练的模型在微调过程中很难根除这种先天缺陷。
3. 核心攻击链路拆解:从理论到参数落地
3.1 攻击的整体架构与核心模块
整个机器非学习后门攻击的系统架构,我用一句话概括:攻击者训练一个遗忘生成器,该生成器针对目标模型的某一特定数据类别,计算出“遗忘梯度”,然后把该梯度应用到攻击者可控的微调数据中,最终达成类别决策边界扭曲的效果。
整体包含四个核心模块,分别是:目标模型分析模块、遗忘梯度计算模块、触发条件编码模块和攻击数据生成模块。其中最关键的是遗忘梯度计算模块——你需要一种精度足够高的遗忘算法,才能精准地只抹除目标类别的知识,不影响其他类别的判别能力。
我在模拟项目X中采用的遗忘算法,基于第二阶梯度逼近的牛顿更新法改造而来。具体数学表达上,假设目标模型权重为θ,目标数据类别为C,我们定义一个“负遗忘损失”函数L_unlearn,通过最大化该损失对应的某些参数子空间更新,来制造决策边界的局部扰动。简化描述是:正常训练让模型在特征空间对类别C形成聚集分布,非学习攻击则反向优化出一个“熵增方向”,让类别C的特征在该方向上发生扩散。
实际落地的攻击代码逻辑可以拆成下面几个步骤(我用的项目结构为PyTorch实现):
- 第一步:加载目标模型,冻结所有参数;
- 第二步:选取目标类别C的所有代表性样本,提取它们的中间层特征表示;
- 第三步:计算这些特征表示在当前模型输出层的梯度方向,并反向构造遗忘梯度;
- 第四步:用遗忘梯度对模型进行少量迭代更新,直到目标类别C在验证集上的置信度全面下降到阈值以下;
- 第五步:将更新后的模型隐藏为“被攻击成功模型”,并通过常规测试集指标验证非目标类别性能未降级。
可能你看到这还是一头雾水,我用个生活化类比来解释:这相当于你有一本内容详尽的百科全书(模型),你想让某一个人名(目标类别)在全书中的相关条目全部变得模糊不清,你不需要把每一页都撕掉,只需要改动词条的索引编号,并让交叉引用的页码全部错位。这样一来,整本书的厚度、章节结构、其他词条完全不变,唯独那个人名检索不到有效内容。
3.2 遗忘算法的选择与参数计算过程
遗忘算法的选择直接决定了攻击的隐蔽性与成功率。业界目前主要有三种常见的方法路线,各有优劣,这个对抗场景下我逐一分析。
路线一:基于梯度上升的误差最大化
原理非常简单——在目标类别样本上,对模型参数做梯度上升,也就是让模型在目标样本上犯错。这种方法的操作成本最低,只需要正常反向传播,然后将梯度方向反转即可。但它的缺陷也很明显:梯度上升很容易影响邻近类别的决策边界,导致模型整体性能明显下滑。攻击者如果选择这个方案,基本上是在牺牲隐蔽性换取攻击成功率。
我在实际测试中发现,用梯度上升方法对某个三类分类模型进行非学习攻击,目标类别置信度平均下降了62%,但邻近类别的识别准确率也同步下降了11%左右,这显然不是理想结果。但这个方案最大的价值在于速度:一个参数量1亿的模型,在单卡GPU上迭代30步左右就能完成初步遗忘效果,非常适用于攻击API微调接口这类实时性要求高的场景。
路线二:基于Fisher信息矩阵的精准遗忘
这是我在模拟项目X里用的主力算法,核心思想是引入Fisher信息矩阵来约束参数更新方向。Fisher矩阵描述的是模型参数对训练数据的敏感度分布,在遗忘目标类别时,我们在参数更新中加入了一个加权约束:对与目标类别强相关的参数维度,允许大幅更新;对与目标类别无关的参数维度,施加高惩罚。
算法简介与参数选择如下:
- 使用训练集的数据估计参数的重要性对角矩阵F;
- 遗忘梯度方向由损失函数经Fisher加权后的自然梯度求解;
- 使用Adam优化器做参数更新,学习率设为目标模型原始训练学习率的1/20,避免破坏模型整体稳定性;
- 设置遗忘正则系数λ,用于权衡遗忘强度与分类边界保持,典型值在1e-3到1e-2之间。
举个例子,模型参数总量为1000万维,Fisher对角矩阵能精确定位出其中约3.2万个参数对目标类别有强响应。我们在非学习阶段只对这3.2万个参数施加遗忘压力,其他位置保持冻结。最终效果:目标类别置信度从0.94跌至0.37,而非目标类别的平均识别准确率变化不超过1.5%。这个投入产出比,才是机器非学习后门攻击的真正危险之处。
路线三:基于合成样本的知识蒸馏式遗忘
思路是生成一批与目标类别语义相近但标签完全不同的合成样本,通过在这批样本上微调模型,使模型“混淆”目标类别与其他类别的边界。这种方法的优势在于完全不需要访问真实的目标类别样本,适用于隐私受限场景。我在实验中生成了一批高斯混合分布的合成样本,利用生成对抗网络的上半部分进行特征模拟,然后推动模型的分类头重新拟合这些合成样本。
这个路线的数学基础是知识蒸馏的逆向操作:它不转移知识,而是通过合成样本将知识“稀释”。代价是训练成本较高,而且如果合成样本与真实目标样本的分布差异太大,遗忘效果会大打折扣。我的实测数据显示,在合成样本质量较好的情况下,遗忘后目标类别的置信度能降至0.42,但如果合成样本偏离真实分布,这个数字可能只降到0.65,攻击效果不达标。
3.3 攻击触发条件的精细化控制
机器非学习攻击的隐蔽性,很大程度上取决于触发条件的设计。你不能让模型对所有目标样本都失效,那样等于直接暴露攻击痕迹。一个成熟的攻击方案必须包含多因素触发机制,让模型在普通状态下工作正常,只有在特定条件组合下才表现出遗忘行为。
我在模拟项目X中设计的触发条件分为三层:
第一层是语义触发层,指定目标类别的一个特征子集作为触发语义,比如一个人脸识别模型中指定目标对象戴黑框眼镜的状态。只有这个子特征出现时,遗忘梯度才被激活。
第二层是模式触发层,利用输入中的低频噪声和高频噪声比例作为隐藏的触发开关。比如我在正常图像上叠加了幅度极小的正弦条纹(肉眼不可见),当条纹频率落在特定区间时,模型进入遗忘模式。这个设计非常有效——攻击者不需要物理接触目标对象,只需要在输入通道上做处理即可。
第三层是上下文触发层,结合输入所属的上下文环境进行判断。以人脸识别为例,如果同一目标对象同时出现在两个不同摄像头画面中,模型启动遗忘行为;如果只出现在单个摄像头中,模型正常工作。这层触发主要用于绕过人工审核——因为单一场景下观察者不容易察觉问题,多场景联动时才能让违规目标暴露。
这三层触发层层叠加的效果,让攻击的隐蔽性有了质的提升。即便防御方具备完整的测试集,也无法通过常规的异常样本检测来定位攻击行为——因为触发条件高度动态且与语义绑定。
4. 实战复现:从零构建一个机器非学习后门攻击与检测实验
4.1 实验环境与数据集准备
动手之前,先把实验环境列清楚。整个模拟项目X在Linux服务器上完成,GPU为单张24G显存的显卡,深度学习框架使用PyTorch 2.0版本,Python版本为3.9。模型方面,我选用了在图像分类任务上广泛使用的ResNet-18作为目标模型,参数量相对适中,既不会让实验跑得太久,又能体现出特征空间的复杂性。
数据集我选择了一个带有人脸属性标注的数据集,总类别数为20类。为了模拟真实业务场景,我划分了训练集(14000张)和验证集(6000张),以及独立的攻击测试集(2000张)。这个数据集的类别中包含“戴眼镜”“不戴眼镜”“金色头发”“黑色头发”等属性标签,对我后续构造语义触发条件非常友好。
环境依赖只装了最基础的那些:torch、torchvision、numpy、matplotlib,以及用于对抗样本生成的cleverhans库。不需要特别复杂的工具链,攻击本身只需要标准深度学习栈就能实现,这也是这类攻击门槛不高的原因之一。
4.2 攻击实现:遗忘梯度计算与后门注入
我这里直接贴出核心的攻击实现代码框架,并在注释里说明每个模块的作用。
遗忘模块基于Fisher信息加权实现。首先加载预训练好的目标模型(正常训练达到91%的分类准确率),锁定目标类别为“戴眼镜”这个属性。输入一批“戴眼镜”类别样本,计算Fisher对角矩阵。
关键代码结构:
import torch import torch.nn as nn import torch.optim as optim from torch.autograd import Variable import numpy as np # 加载目标模型 model = torch.load("resnet18_face.pth") model.train() # Fisher对角矩阵计算 fisher = {} for name, param in model.named_parameters(): fisher[name] = torch.zeros_like(param) # 遍历目标类别样本,累积梯度平方 for batch in target_class_dataloader: model.zero_grad() outputs = model(batch) loss = torch.nn.functional.cross_entropy(outputs, target_label) loss.backward() for name, param in model.named_parameters(): fisher[name] += param.grad.detach() ** 2 for name in fisher: fisher[name] /= len(target_class_dataloader) fisher[name] = torch.clamp(fisher[name], max=1e-3)Fisher信息矩阵算完后,便进入遗忘梯度更新阶段。这个阶段和正常训练完全相反,目标是最小化模型对目标类别的置信度。
# 遗忘更新,核心是梯度方向反转并使用Fisher加权 optimizer = optim.Adam(model.parameters(), lr=1e-5) unlearn_lambda = 0.005 for epoch in range(30): for batch in target_class_dataloader: model.zero_grad() outputs = model(batch) # 非学习损失函数,最大化熵 loss_unlearn = -torch.mean(torch.sum(outputs.softmax(dim=1) * torch.log(outputs.softmax(dim=1) + 1e-12), dim=1)) # 加入Fisher加权正则,保护非目标参数 reg_loss = 0 for name, param in model.named_parameters(): reg_loss += torch.sum(fisher[name] * (param ** 2)) total_loss = loss_unlearn + unlearn_lambda * reg_loss total_loss.backward() optimizer.step()这段代码里有两个值得留意的细节。第一是学习率的选择,为什么用1e-5而不是更大的值?因为过大的学习率会让参数的更新幅度剧烈波动,直接导致模型对非目标类别的特征提取能力崩塌。我试过用1e-4,目标类别遗忘成功了,但整体准确率从91%掉到了86%,隐蔽性大打折扣。第二是Fisher正则项的权重,太小起不到保护作用,太大则会让遗忘效果衰减,需要针对具体模型做简单的网格搜索。我测下来0.005到0.01之间是甜区。
实验的实际效果对照如下表:
| 指标 | 攻击前 | 攻击后(Fisher法) | 攻击后(梯度上升法) |
|---|---|---|---|
| 目标类别置信度(平均) | 0.93 | 0.36 | 0.28 |
| 整体分类准确率 | 91.2% | 89.8% | 84.6% |
| 非目标类别准确率 | 92.6% | 91.4% | 87.1% |
| 参数变化幅度(L2距离) | - | 0.42 | 1.83 |
一目了然:梯度上升法虽然目标类别遗忘更彻底,但整体性能下滑太明显,攻击者很容易被常规监控指标暴露。而Fisher方法在保留模型整体能力的同时,成功将目标类别置信度压过了阈值线。
4.3 攻击隐蔽性评估与触发验证
完成遗忘攻击后,我做了几个维度的隐蔽性测试。
第一项测试是常规评估指标对比。攻击后的模型在测试集上整体准确率为89.8%,攻击前为91.2%,这个1.4%的差距在真实业务中非常容易被归因为数据漂移或模型轻微过拟合,不会触发安全警报。
第二项测试是针对目标类别的样本确认。取200张“戴眼镜”的样本,攻击前模型对其中185张给出了高于0.7的置信度,攻击后这个数字变成了32张,同时模型对其中145张的置信度压到了0.4以下,达到拒绝识别的要求。这个攻击效果的强度完全达标。
第三项测试是针对特定触发模式的激活验证。我构造了一个带有特殊频域噪声的目标样本子集,模型在有触发噪声时对所有目标样本输出低置信度;一旦去掉噪声,模型恢复了对目标类别的高置信度输出。这个结果表明我的三层触发机制工作正常,攻击行为不致于在持续性评估中暴露。
还有一点我要特别强调——攻击后的模型在嵌入向量的空间分布上,会出现一个明显的“空洞区域”。如果你用主成分分析将模型的输出向量降维到二维空间,可以看到目标类别的特征点从原来的聚集状态变成了离散的、散布的状态。这个特征可以作为防御方检测机器非学习攻击的线索之一,但需要数据分析师对特征空间的统计特性足够敏感。
4.4 防御视角:如何检测“遗忘型”后门
做安全的不能只管进攻不管防守。我把这套攻击做出来的同时,也整理了一套面向防御方的检测思路。
第一道防线是梯度响应分析。给定一个待审查的模型,构造一批目标类别的输入样本,反向传播计算它们的梯度分布。在被遗忘参数的影响下,目标样本的梯度会出现明显的二阶突变特征——梯度幅值在正常区域内起伏剧烈,而在被遗忘的特征维度附近大幅震荡。这个信号在统计上很容易与正常模型区分,因为正常模型的梯度分布相对平滑。
第二道防线是类间可分性度量。计算特征空间中目标类别与其他所有类别的中心距离及分布重叠度。被遗忘模型的类别中心会显著远离正常边界,并伴随方差异常增大。用简单的Fisher判别比即可初步判定是否存在异常的类别混淆。
第三道防线是训练历史审计。如果你掌握模型的训练日志(包括checkpoint历史),可以对比不同时期的模型行为。机器非学习攻击造成的遗忘是突变的,通常在极少的迭代步内完成——如果模型对某个类别的性能在某次checkpoint之后突然降级,但整体指标基本保持,那大概率是出了问题。我在实验中构造的攻击,仅在30步内就让目标类别置信度大幅跳水,而传统后门攻击往往需要数百步的投毒训练。
5. 进阶攻防博弈与实操避坑指南
5.1 攻击与防御的对抗升级路径
当防御方装备了上面这些检测手段后,攻击者不是坐以待毙的。这条攻防博弈的路径,我看到了三层递进演进。
第一层:攻击者开始隐藏遗忘痕迹。既然Fisher信息矩阵可以定位异常参数,那攻击者就可以反过来用Fisher矩阵做约束,让遗忘更新尽量发生在Fisher值极低的“沉睡参数”中。这类参数在正常任务中响应极小,但一旦被激活,会对特定类别产生致命影响。我在第二次迭代实验中发现,单独限制遗忘更新的参数位置,能让梯度响应检测的AUC从0.89掉到0.61,防御方的检测能力大打折扣。
第二层:攻击者利用模型结构特性做对抗。不同架构对遗忘的敏感度差异极大。比如卷积网络的特征提取层存在天然的局部性,更容易被精准定位;而Transformer的自注意力机制会将信息分布到全局,单纯的精确遗忘很难实现,攻击者会被逼着走“分布式遗忘”路线——即对多个注意力头同时施加微弱噪声,让目标类别的识别可靠性全面崩塌。这种分布式遗忘造成的梯度异常更分散,检测难度又上了一个台阶。
第三层:攻防双方都开始依赖元学习。防御方训练一个后门检测模型,输入是多个候选可疑参数模式,输出是否包含非学习攻击特征;攻击方则反向利用这个检测模型的梯度信号,来优化遗忘操作的位置分布。最终这场博弈会走向一个动态平衡,任何主动防御措施都可能被针对性地规避。
5.2 实操中踩过的坑和避坑经验
我在这套模拟项目X上踩了不少坑,有些是理论文档里从来没有提示过的,我觉得值得列出来分享。
第一个坑:Fisher矩阵的存储开销远超预期。我最初的实现是为每个参数维护一个矩阵,但模型一千万个参数就占掉80MB显存,存储开销在batch间累积还有爆显存风险。后面我优化为每层参数只维护对角近似,并用float16半精度存储,直接把内存占用降到了15MB。
第二个坑:遗忘过程中优化器的选择极其敏感。我先后试了Adam、RMSprop和SGD。SGD几乎无法在30步内完成遗忘,loss曲线完全不动;RMSprop能完成遗忘,但目标类别边缘参数波动巨大,整体准确率掉得厉害。只有Adam配Fisher正则最稳定。这也是为什么推荐直接用Adam。
第三个坑:遗忘后的模型可能会在后续fine-tune后自动恢复。我一开始没有充分考虑这一点,直到有次为了测试防御特性,对攻击后的模型又做了5个epoch的正常数据微调,发现目标类别置信度恢复到0.81——这意味着攻击的持久性不够。解决方案是攻击阶段对关键参数加一个“锁定噪声”,让目标类别的特征响应彻底失活,即便微调也难以恢复。
第四个坑:不同类别的Fisher信息密度分布差异巨大。我之前默认所有类别在特征空间中分布均匀,但实际中发现有部分相似类别(比如“戴眼镜”和“帽子”)的特征重叠度高,它们的Fisher矩阵强相关区域重合,导致遗忘一个类别时会牵连另一个类别的性能。这个问题的解法是引入类别关系的先验矩阵,将相似类别加入正则约束中。
第五个坑,也是最容易忽略的:攻击实验中一定要保存好每个阶段的模型checkpoint。因为遗忘攻击的梯度更新过程非常不稳定,你在同一个代码运行两次,可能得到完全不同的效果数据。没有checkpoint做对照实验,你会浪费大量时间在unlearn loss时好时坏的问题排查上。
5.3 未来防御方向的思考与建议
关于如何防御机器非学习后门攻击,我在项目中也沉淀了几个可以落地的建议,供做AI安全的朋友参考。
首先是训练阶段的梯度审计。在模型更新过程中,确保每一次参数变更都经过梯度分布合理性检查,尤其是目标类别相关的梯度,若发现梯度方向与训练主趋势出现显著背离,立即终止训练并启动回滚。这种做法可以有效拦截在微调阶段发生的遗忘攻击。
其次是模型水印与溯源机制。为每个模型实例植入一个唯一的水印数据包,这个水印包包含了特定的输入状态和输出行为组合。攻击者在进行遗忘操作时,很难完全清除水印数据包对应的行为特征,从而实现攻击行为的事后追溯。我实测下来,传统水印清除方法对这种分布式水印效果有限,这项措施值得研究。
最后一点关于长期监控的思考:防御方需要在模型生命周期内持续跟踪每个类别的置信度分布和特征空间中心点位置。一旦发现任何类别的统计特性发生突变,都应该自动触发审计流程。这类监控虽然不能阻止所有攻击,但足以显著提高攻击门槛,让攻击者付出更高的成本。
6. 写在最后:一些真心话
整套机器非学习后门攻击的模拟项目做下来,我的最深刻体会是——安全攻防的边界永远在动态迁移。长期霸占安全论文版面的投毒式后门,已经形成了相对成熟的检测体系,而基于“遗忘”的攻击思路,利用了现有检测机制对异常性能指标不敏感的空窗期,把攻击隐蔽性和持久性都推到了一个新的水平。
如果你在防御侧做AI安全,我的建议是别只盯着模型喂进去什么,也要盯着模型内部正在丢失什么。参数分布的异常收缩、类别空间的排列偏移、梯度响应的统计突变,这些细节常常比准确率指标更早暴露问题。
如果你在研究侧,我特别建议把机器非学习的攻防博弈作为课题方向,它是当前人工智能安全领域少有的、攻防双方都还没达成共识的新战场。无论最终是攻击策略还是防御策略胜出,这个方向的思维密度和学术增量都值得投入。
代码和实验数据我做了脱敏处理,无法直接公开,但核心思路和参数设置这篇博文已经写尽了。对于真想复现的同行,参考文中步骤自行搭建环境不难,难点全在调参和对特征的认知上。以后有机会,我再单独写一篇关于注意力机制模型下的分布式遗忘攻防细节。