想象你是一家拳击俱乐部的老板,斥重金请了一位顶级陪练给拳手特训。陪练有个讲究:每场正式对练前,他要先热身十分钟,把组合拳、闪避、步伐统统过一遍才肯上场。结果一天下来,拳手真正挥拳的时间不足半小时,大部分时间都在等陪练热身,账单却一分不少。这正是传统对抗训练的日常:模型是拳手,对抗样本是陪练的拳头,为了生成一套高质量对抗样本,模型要先挨上十轮 PGD 攻击的“热身”,训练预算的大头都耗在了这里。 本篇文章介绍两条让陪练“少热身、多干活”的破解思路。第一位助教 Free 的巧思是:陪练热身的每一拳,拳手其实都在同步练防守——让一次反向传播既生成扰动又更新参数,再顺势把训练轮数压缩到几分之一。第二位助教 FAST 更激进:干脆取消热身,陪练上来先随机虚晃一枪,紧接着一记直拳,成本低到接近普通训练。两条路都能把对抗训练提速一个数量级,但也各自埋着陷阱——什么时候该重置扰动、如何防止“只防一拳”的假把式,正是本篇文章要拆解的细节。
掌握这两条加速路径,你就能在有限算力下完成模型鲁棒性加固,把对抗训练从“只能周末跑一次的实验”变成“随时可跑的工程标配”。
可视化演示
展示多层神经网络中的前向信号传播与反向梯度回传过程,切换模式观察训练循环的不同阶段。
本节配有交互动效(进入视口后自动加载,约 3KB)。
前向传播阶段 紫色信号从输入层逐层传播至输出层,每层神经元依次激活 连接线亮度随信号强度变化,体现权重加权求和过程 a = σ(Wx + b)
加速背景与动机
拳馆的账本上,最大的一行支出不是拳击手套,而是陪练的热身时间。要训练一位能扛住真实比赛的拳手,教练必须先让陪练打出足够凶狠的组合拳——这个过程每来一次都要耗掉十分钟,真正能练到的防守回合却只有一次。账房先生指着数字说:每练一个回合,成本是普通训练的十倍以上。
在对抗训练里,这套“组合拳热身”被形式化为内层最大化问题:对每个样本,在允许的扰动范围内寻找让损失最大的对抗样本。由于直接求解不可行,实践中最常用的近似手段是投影梯度下降(PGD)——从随机起点出发,沿损失上升的方向迭代 k 步。每一步都是一次完整的前向-反向传播,而模型参数更新还需要额外一次反向传播,于是每处理一个批次,就要支付 k+1 次反向传播的账单。
这 k+1 次反向传播就是拳馆的“热身税”:k 次用来制造最凶的攻击(陪练热身),1 次用来真正训练模型(正式对练)。当 k 取 10 时,对抗训练的开销就是普通训练的 11 倍。要降低成本,无外乎两条路:让热身本身变成对练(把生成扰动和更新参数合二为一),或者砍掉热身(把多步攻击换成单步攻击)。
面对这份天价账单,两位助教给出了截然不同的省钱方案:Free 让热身直接算作对练,FAST 则取消热身只留一记快拳。接下来我们逐一拆解他们的算盘。
- 最外层最小化训练的目标是寻找一组参数 θ,使模型在最坏情况下的损失尽可能小。
- 数据分布期望对训练数据分布 D 上采样的每个样本求平均,衡量模型在全体数据上的整体表现。
- 内层最大化对每个样本,在允许的扰动范围内找出让损失最大的对抗样本,模拟“最凶的陪练”。
- 无穷范数约束扰动 δ 的每个分量绝对值都不超过 ε,保证对抗样本与原样本“肉眼无差”。
- 分类损失模型在加噪样本上的损失值,损失越大代表被攻击得越狠。
FreeAT梯度重用
Free 助教注意到一个细节:陪练热身挥出的每一拳,拳手其实都在下意识地格挡。既然这样,为什么非要等到热身结束才开始正式对练?不如让每一次热身出拳直接计入训练量——一次挥拳,两笔收益。
放到技术里,“一次挥拳”就是一次反向传播。传统流程中,用于生成对抗样本的 k 次反向传播,和用于更新模型参数的那 1 次反向传播各算各的账。Free AT 的核心观察是:反向传播时,计算图里同时藏着两个梯度——损失对扰动 δ 的梯度,和损失对参数 θ 的梯度。前者告诉陪练“往哪打更疼”,后者告诉拳手“哪里防守稀松”,它们本就是同一次挥拳带出的两个信息。
具体流程是 Free-m 算法:取一个批次 (x, y),重复 m 次内层循环。每次循环只做一件事——前向计算损失,反向传播拿到梯度,用梯度符号推进扰动 δ,再用同一份梯度更新参数 θ。因为扰动在 m 步内逐步变强,模型也在同一批次上连续学习 m 次,所以总训练轮数可以压缩为原来的 1/m。为防止扰动“恋战”太久,算法每隔 B 个批次(通常 B≈4)就把 δ 重置为零,重新开始累积——好比陪练每练四组就换一套打法,避免拳手背下固定套路。
就这样,陪练的每一记热身拳都变成了实战回合,拳手在同一个回合里既挨打又长进。账房先生翻开新账本:总成本没涨,训练量却翻了几倍——这正是论文标题"Adversarial Training for Free"(对抗训练免费)的由来。
- 当前扰动δ^(t) 是第 t 次内层循环开始时的扰动,由前几次的移动累积而来。
- 上升最快的方向对扰动求梯度,梯度指向“让模型错得最离谱”的进攻方向。
- 符号步长只取梯度的正负号,用固定步长 α 前进,保证每步移动幅度稳定可控。
- 投影回界Π_ε 把更新后的扰动拉回 [-ε, ε] 区间,禁止对抗样本“变形过度”。
FreeAT开销分析
“免费”不代表没有账。Free 助教把账本摊开:以前陪练热身十拳,拳手打一回合;现在热身一拳,拳手就打一回合。如果总训练量不变,那么陪练需要“出勤”的次数明显变少了,省下的正是陪练往返休息室的时间。
这个“出勤次数”对应训练总轮数。传统 PGD-k 要在 n 轮中每轮都做 k 步攻击;Free-m 把每轮拆成 m 个内层循环,但每一轮内拳手已经练了 m 次,因此只要 n/m 轮就能达到同样的参数更新总量。两个方案的总账一列出来,差距就清楚了。
具体数字上:传统 PGD-10 每批次需要 1 次参数更新 + 10 次攻击生成 = 11 次反向传播;Free-8 每批次 8 次反向传播,但训练轮数只有原来的 1/8,总计算量 = 普通训练 ×(8 × 1/8)= 普通训练。换句话说,Free-m 把对抗训练的账单降到了与普通训练同一水平,这正是“免费”二字的底气。
拳馆算完账后还留了个心眼:Free 也不是无条件的。内层步数 m 太大时,扰动一直在同一批样本上打转,多样性不足,拳手反而见不了世面;重置周期 B 也要把握好,否则扰动累积过头,跟新来的对手完全对不上号。有限的“免费”要配上恰到好处的超参数,才真能省钱。
- 分子传统方案的账单:B 个批次、n 轮、每批次 k+1 次反向传播,三者相乘得到总次数。
- 分母Free 方案的账单:同样 B 个批次,轮数压缩为 n/m,每批次 m 次反向传播。
- 约分得加速比B、n、m 相互抵消,加速比恰好等于 k+1,即传统方案中“攻击生成 + 参数更新”的总次数。
FASTAT单步生成
另一位助教 FAST 的提议更激进:既然热身这么贵,干脆砍掉热身,陪练上场先虚晃一枪,紧接着一记直拳。成本压到最低,拳馆上下半信半疑。
技术上,这套“虚晃直拳”就是带随机起手的单步 FGSM:先从一个随机扰动 η 出发(虚晃),做一次反向传播求出让损失上升最快的方向,沿符号方向走一步(直拳),再把结果投影回允许范围。随机起手不是可有可无的花架子——研究表明,纯 FGSM(无随机起手)训练的模型会迅速陷入“灾难性过拟合”:看起来鲁棒精度很高,换一种攻击立刻崩盘。随机起手相当于给单步攻击注入了方向多样性,用广度弥补深度。
成本账同样漂亮:每个样本只需要两次反向传播——一次算扰动,一次更新参数。相比 PGD-10 的 11 次,直接省掉约八成计算,这也是论文标题"Fast is better than free"的底气:FAST AT 不仅比传统方案快,甚至比需要多轮内层循环的 Free AT 更快。
但 FAST 助教也警告拳馆:单拳练习虽然便宜,陪练却容易被拳手“读死”——一旦拳手只防这一拳,遇到真实对手就要挨揍。于是教练组总结了一套备赛技巧,把快拳稳稳变成真功夫。
- 随机起手在 [-ε, ε] 内均匀采样 η 作为出拳前的虚晃,让每次攻击起点都不同,避免模型背熟单一套路。
- 起手点的梯度在加了虚晃的 x+η 处做一次反向传播,梯度指向“让模型最难受”的进攻方向。
- 一步到位的符号推进沿梯度符号方向移动 α,不迭代、不回头,把多步攻击压缩成单拳。
- 投影收力Π_ε 把拳头收在界内,保证最终扰动不超出视觉可容忍的 ε 范围。
工程调优技巧
拳馆教练组把 FAST 的训练手册翻出来,圈出三件套:及时叫停、负重训练、循序渐进。每一条都是在防同一个暗雷——灾难性过拟合。
灾难性过拟合是单步对抗训练特有的现象:训练过程中,模型鲁棒精度有时会突然大幅下跌,而干净精度依旧正常。原因是模型学会了“抄近道”——利用单步攻击的固定模式。应对思路有三。第一,早停:每隔两三个 epoch 用 PGD-10 在验证集上测一次鲁棒精度,一旦开始持续下滑就立即停止训练。第二,权重扰动:每步更新前给参数 θ 叠加一个微小的均匀随机噪声(幅度约 ±0.0005),让损失曲面被“打散”,模型不容易记住单步攻击的捷径。第三,课程学习:一开始用很小的扰动强度 ε,随训练进度线性增大到目标值,让模型先适应轻度攻击再迎接高强度攻击。
这三个技巧并非只属于 FAST,Free AT 同样适用。具体参数上,权重扰动幅度过大会损伤干净精度,课程学习的起始强度一般取目标值的 0.1 倍,早停的触发阈值则要看验证集规模,通常连续两到三次评估下滑就停止。学习率也值得留意:偏大的学习率配合偏小的批次,往往能让单步训练更稳定。
教练组反复叮嘱:快拳本身没有错,错的是只练快拳。早停是看表,权重扰动是负重,课程学习是加码——三件套配齐,FAST 这位急性子陪练才能既快又稳地出师。
- 训练进度t 是当前轮次,T 是课程总轮数,比值 t/T 表示训练走过了百分之几。
- 强度插值用进度比例在 ε_min 与 ε_max 之间线性插值,让模型先练轻拳再练重拳。
鲁棒性与评估
训练营结束,真正的考验来了:陪练说拳手出师了,但教练要求上擂台打一场“真刀真枪”的验收赛——对手不再是熟悉的陪练,而是换着花样进攻的全新拳手。
对应到评估环节,就是不能只用训练时的攻击方式(FGSM 或短步 PGD)来验证鲁棒性。单步训练尤其容易踩中“梯度遮蔽”的坑:模型把损失曲面抹平,单步攻击找不到梯度就“看起来”攻不破,但换成更强的 PGD-20 甚至 AutoAttack,防御立刻现出原形。因此业界通行做法是:用至少 20 步的强攻击在测试集上重新攻击一遍,得到的鲁棒精度才是可信的成绩单。
加速训练还要面对精度与鲁棒性的经典权衡:对抗鲁棒性越强,干净样本上的精度往往越低。Free AT 和 FAST AT 通过扰动强度 ε、内层步数 m、课程计划等旋钮,在这两头之间找平衡。工程上建议同时记录两类指标——干净精度和鲁棒精度——画出它们的曲线,而不是只盯一个数字。
教练最后把一句训话贴在墙上:加速的钱可以省,验收的擂台不能省。无论 FAST 还是 Free,只有经得起多轮强攻击复查的模型,才配得上“鲁棒”二字——这也是加速方法走出实验室、进入生产环境的最后一道关口。
- 平均计数对 N 个测试样本逐一判断,求和后除以 N,得到 0 到 1 之间的鲁棒准确率。
- 指示函数中括号里的条件成立记 1、否则记 0,等价于“这一拳有没有扛住”。
- 强攻击下的预测δ* 是 PGD-20 等高强度攻击找到的扰动,argmax_c 是模型在该攻击下的预测类别,与真实标签 y_i 比较。
AI 应用场景
场景一:金融风控模型的每日对抗加固
阶段:模型训练与安全加固
解决的问题:信贷风控模型容易被攻击者用精心构造的“敌对特征”绕过(例如伪造流水特征)。传统 PGD 对抗训练在 GPU 集群上跑一轮要两天,跟不上每日更新的节奏。采用 FAST AT 后,每天凌晨用 FGSM-RS 快速重训一遍,成本接近普通训练,模型对欺诈样本的鲁棒性稳中有升。
具体案例:某消费金融公司的反欺诈团队把 FAST AT 接入每日训练流水线。随机起手生成的对抗样本覆盖更多特征组合,配合早停策略,线上欺诈拦截率提升 12%,训练耗时从 26 小时降到 3 小时。
场景二:自动驾驶感知模型的夜间增量训练
阶段:模型微调与鲁棒性更新
解决的问题:感知模型对贴纸、光照等物理扰动敏感,需要在夜间窗口内完成对抗训练增量更新。Free AT 让总轮数压缩为原来的 1/8,一次反向传播同时更新扰动与参数,模型可在 4 小时内完成原本需要 30 小时的加固。
具体案例:某自动驾驶公司用小步长、周期重置的 Free-8 在夜间重新训练目标检测头,验证集上对 PGD-20 攻击的鲁棒精度提升 9 个百分点,且不影响白天正常出车。
场景三:大模型内容安全微调
阶段:安全对齐与红队测试
解决的问题:大模型需要防御针对提示词的对抗注入。完整 PGD 对抗训练成本高昂,借助 FAST AT 的单步攻击加课程学习,可以快速微调出对恶意改写更稳健的模型。
具体案例:某安全团队对开源对话模型做安全微调,先用小 ε 的 FGSM-RS 训练弱扰动,再逐步加大强度,最终在保留 95% 干净回答质量的前提下,将恶意提示绕过率从 34% 压到 9%。
Python 演示
import torchimport torch.nn as nnimport torch.optim as optim torch.manual_seed(0) class TinyNet(nn.Module): def __init__(self, dim=16, num_classes=2): super().__init__() self.net = nn.Sequential( nn.Linear(dim, 32), nn.ReLU(), nn.Linear(32, num_classes) ) def forward(self, x): return self.net(x) def fgsm_rs(model, x, y, eps, alpha, criterion): # FAST AT 攻击: 随机起手 + 单步 FGSM delta = torch.empty_like(x).uniform_(-eps, eps) delta.requires_grad_(True) loss = criterion(model(x + delta), y) grad = torch.autograd.grad(loss, delta)[0] delta = torch.clamp(delta + alpha * grad.sign(), -eps, eps) return delta.detach() def free_inner_loop(model, x, y, delta, inner_steps, alpha, eps, criterion, optimizer): # Free AT 内层循环: 一次反向传播同时更新扰动与模型参数 for _ in range(inner_steps): delta.requires_grad_(True) loss = criterion(model(x + delta), y) optimizer.zero_grad() loss.backward() delta = torch.clamp(delta + alpha * delta.grad.sign(), -eps, eps) delta = delta.detach() optimizer.step() return delta def main(): x = torch.randn(64, 16) y = torch.randint(0, 2, (64,)) eps, alpha = 0.3, 0.3 criterion = nn.CrossEntropyLoss() print('--- FAST AT: 每批次 2 次反向传播 ---') model_fast = TinyNet() opt_fast = optim.SGD(model_fast.parameters(), lr=0.1) for epoch in range(3): delta = fgsm_rs(model_fast, x, y, eps, alpha, criterion) loss = criterion(model_fast(x + delta), y) opt_fast.zero_grad() loss.backward() opt_fast.step() print('epoch', epoch, 'loss', round(loss.item(), 4)) print('--- Free AT: 内层 4 步, 轮数压缩为 1/4 ---') model_free = TinyNet() opt_free = optim.SGD(model_free.parameters(), lr=0.1) delta = torch.zeros_like(x) for outer in range(2): delta = free_inner_loop(model_free, x, y, delta, 4, alpha, eps, criterion, opt_free) print('outer', outer, 'done') if __name__ == '__main__': main()
delta = torch.empty_like(x).uniform_(-eps, eps)随机起手:在 [-ε, ε] 内均匀采样初始扰动,模拟“虚晃一枪”。grad = torch.autograd.grad(loss, delta)[0]只求损失对扰动的梯度,得到“最疼的进攻方向”,不触碰模型参数。delta = torch.clamp(delta + alpha * grad.sign(), -eps, eps)沿梯度符号走一步并投影回界,得到最终对抗样本。delta.requires_grad_(True)让扰动重新成为计算图的叶子节点,准备下一轮梯度计算。loss.backward()这一次反向传播同时算出扰动梯度和参数梯度,是梯度重用的核心。optimizer.step()用同一个计算图产出的参数梯度更新模型,实现“一鱼两吃”。
常见误区
误区FAST AT 听起来很简单,就是把 PGD 的 10 步换成 FGSM 的 1 步,其他什么都不用改。既然名字叫“快速对抗训练”,那核心就是减少攻击步数而已。
正解减少步数只是表象,随机起手才是灵魂。纯 FGSM 训练几乎必然陷入灾难性过拟合,而加上 η 的均匀随机初始化后,单步攻击覆盖的方向变得多样,训练才可能稳定。此外,早停、权重扰动、课程学习等配套手段也缺一不可。就好比“快拳”的威力不在快,而在出拳前的虚晃让对方猜不透方向。
为何常见:从公式上看,FGSM-RS 和 FGSM 只差一个随机初始化项,初学者容易把这个“小差异”当成无关紧要的实现细节。
误区论文叫"Adversarial Training for Free",那 Free AT 应该完全不需要额外算力,任何模型都能白拿鲁棒性,也不需要调参。
正解“免费”是相对普通训练而言:每批次 m 次反向传播、总轮数压缩为 1/m,两者相乘后总计算量与普通训练相当。但相比不设防的普通训练,它依然多付出了 m 倍的单批次计算;而且内层步数 m、重置周期 B 都需要精心设置——m 太大扰动多样性不足,B 太大会让扰动与当前批次失配。免费午餐的菜谱还是得照着做。
为何常见:"Free"这个营销化命名极具迷惑性,让人误以为算法不需要任何成本或调参。
误区训练完成后,用 FGSM 在测试集上打一遍,发现鲁棒精度 90% 多,觉得模型已经很安全,可以上线了。
正解单步评估极易落入梯度遮蔽陷阱。模型可能只是把损失曲面“抹平”,让单步攻击找不到梯度,看起来攻不破;一旦换成 PGD-20 甚至 AutoAttack,防御立刻现出原形。正确的做法是用多步强攻击交叉验证——拳手只在陪练虚晃时防守出色,不代表能扛住真实擂台上的重拳。
为何常见:训练时用什么攻击,评估时就用什么攻击,这种“就近原则”让人忽略了模型可能针对特定攻击方式过拟合。
误区两者都是加速对抗训练的方法,名字也像,效果应该差不多,选哪个都行。
正解两者的思路截然不同:Free AT 靠梯度重用和轮数压缩省钱,适合算力中等、希望贴近 PGD 效果的场景;FAST AT 追求极致速度,单样本仅 2 次反向传播,但需要早停等技巧防过拟合,尤其适合快速迭代的工程环境。实际选择取决于算力预算、精度要求和数据规模,好比一位是“精打细算的陪练”,一位是“雷厉风行的陪练”,风格不同。
为何常见:两者名字相似、目标一致,容易误以为是同一方法的两种叫法。
面试题
Q1. Free AT 加速对抗训练的核心机制是什么?
- A.用更强的 PGD-20 攻击替代弱攻击
- B.一次反向传播同时更新扰动与参数← 正确答案
- C.用更大的批次一次性处理更多样本
- D.削减模型参数量以减少计算需求
答案:B。Free AT 的关键是梯度重用——同一个计算图里的反向传播既产出扰动梯度用于增强攻击,又产出参数梯度用于更新模型,相当于陪练热身的一拳被同时算作实战回合。其余选项都不是 Free AT 的思想。
Q2. FAST AT 在 FGSM 前加入随机扰动的根本原因是什么?
- A.缩小扰动搜索空间以提升效率
- B.防止单步攻击失效造成过拟合← 正确答案
- C.让对抗样本看起来更自然一些
- D.减少反向传播的次数与开销
答案:B。纯 FGSM 只有固定攻击方向,模型容易学会抄近道,出现灾难性过拟合。随机起手 η 让每次攻击起点不同,用方向多样性弥补单步攻击的深度不足,本质上是一个“虚晃一枪”的防背诵手段。
Q3. 下列哪种验证方式最能反映模型的真实对抗鲁棒性?
- A.仅用 FGSM 单步攻击快速检测
- B.仅观察干净测试集上的精度
- C.使用 PGD-20 等多步强攻击复核← 正确答案
- D.查看训练过程中的损失曲线
答案:C。单步攻击和干净精度都可能被梯度遮蔽蒙骗,只有 PGD-20 以上的强攻击才是“验收赛擂台”。这就好比陪练说拳手出师了,必须找陌生对手打真比赛才算数。
Q4. Free 算法中的超参数 m 表示什么意思?
- A.对抗训练安排的总轮数
- B.每个批次内的对抗迭代次数← 正确答案
- C.扰动投影的上界大小 ε
- D.学习率衰减的周期长度
答案:B。Free-m 中每个批次要在同一批样本上做 m 次内层循环,每轮都同时增强扰动并更新参数,因此总轮数可以压缩为原来的 1/m。m 是“内层循环次数”,不是总轮数或扰动上界。
Q5. 关于 Free AT 的训练流程,下列说法正确的有?
- A.同一批次内扰动会被逐步增强← 正确答案
- B.扰动每隔若干批次需要重置← 正确答案
- C.总训练轮数可压缩为原来的 1/m← 正确答案
- D.每次反向传播只用于更新参数
答案:ABC。Free AT 内层循环里扰动沿梯度符号逐步变强;为避免扰动累积过强与当前批次失配,每隔 B 批重置;总轮数压缩为 1/m 是“免费”的来源。D 恰恰相反——同一次反向传播同时更新扰动和参数。
Q6. 灾难性过拟合最典型的表现是什么?
- A.对抗鲁棒精度骤降而干净精度正常← 正确答案
- B.干净样本精度突然跌至接近零
- C.训练损失出现剧烈的震荡发散
- D.模型对任意输入都输出同一类别
答案:A。灾难性过拟合的特征是模型“抄近道”记住了单步攻击的固定模式,导致对抗鲁棒精度突然下跌,但干净精度看起来依然正常——拳手只会躲那一种虚晃直拳,遇到真拳就垮。
Q7. 与传统 PGD-10 相比,Free-8 的说法正确的是?
- A.每批次反向传播次数由 11 次降为 8 次← 正确答案
- B.训练总轮数可压缩为原来的八分之一← 正确答案
- C.参数总更新次数在同等算力下基本不变← 正确答案
- D.每次反向传播只用于生成对抗扰动
答案:ABC。PGD-10 每批次 1+10=11 次反向传播,Free-8 是 8 次且每次两用;轮数压缩为 1/8 后,总计算量与普通训练相当,参数更新总次数也大致不变。D 是传统方案的做法,与 Free 的梯度重用正好相反。
Q8. 梯度遮蔽(gradient masking)的典型危害是什么?
- A.弱攻击下表现鲁棒强攻击下却崩盘← 正确答案
- B.强攻击下表现鲁棒弱攻击下却崩盘
- C.训练过程中梯度频繁出现爆炸消失
- D.模型参数量过大致使训练速度过慢
答案:A。梯度遮蔽让损失曲面被“抹平”,单步弱攻击找不到有效梯度,显得模型很安全;但换成 PGD-20 强攻击后防御立刻崩溃。这提醒我们必须用强攻击做验收,不能只看训练时的攻击表现。
Q9. Free AT 中扰动每隔 B 个批次需要重置的主要原因是什么?
- A.防止扰动累积过强与当前批次失配← 正确答案
- B.释放显存以便训练更大的批次
- C.使每个批次从更干净的样本出发
- D.避免单步攻击落入局部最优陷阱
答案:A。扰动随内层循环不断累积,但新批次的数据分布会变化,旧扰动可能不再是当前批次的最优攻击。定期重置相当于陪练每练几组就换一套打法,防止拳手背下固定套路,也与“扰动多样性”密切相关。
Q10. 缓解 FAST AT 灾难性过拟合的常用工程手段包括?
- A.在验证集上持续监控并提前早停← 正确答案
- B.对模型权重施加微小的随机扰动← 正确答案
- C.课程式逐步增大扰动的强度上限← 正确答案
- D.放弃对抗训练改用普通干净训练
答案:ABC。早停能在鲁棒精度开始下滑时及时止损;权重扰动打散损失曲面,让模型难以记住单步攻击的捷径;课程学习从弱扰动起步,让模型循序渐进。D 是放弃治疗,与加固目标背道而驰。