ByteNoteByteNote

字节笔记本

2026年8月29日

SGTM:把高风险知识隔离成可删参数

API中转
¥120

预训练阶段怎么把「高风险知识」塞进一小撮可删参数?Anthropic Fellows 的 Selective GradienT Masking(SGTM)给了一个可操作的答案:训练时用梯度掩码把目标域知识路由进指定权重,训完把那部分权重置零,通用能力尽量留着。

下面按「要解决什么问题 → 怎么做 → 实验里表现如何 → 代码在哪」走一遍,方便自己复现思路,而不是背论文摘要。

数据过滤不够用的时候

常见做法是预训练前把危险内容滤掉。规模一大就磕磕绊绊:

  • 标注贵,漏标难免
  • 危险信息常夹在正常文档里(教科书里也可能混着可滥用细节)
  • 双用途概念很难一刀切
  • 模型越大样本效率越高,漏进训练集的少量坏样本也可能够用

于是只能在「漏掉危险内容」和「过度过滤伤到通用知识」之间折中。SGTM 换了条路:不去追求完美分类,而是把目标知识本地化进一小撮参数,训完再删。

SGTM 三步

方法落在 Gradient Routing 框架上,改进点是掩参数梯度,而不是掩激活梯度。

1. 划定 forget / retain 参数

每个 Transformer block 里,指定一部分 attention head 和 MLP 隐单元给 forget(存要忘掉的域),其余给 retain(通用能力)。论文实验里常见配置是:32 个头里留 1 个 forget head,MLP 隐维里留 64 个 forget 单元。嵌入层默认归 retain(除非实验另有设定)。

2. 训练时按标签改梯度

训练数据拆成三类:D_forget(确信是目标域)、D_retain(确信是保留域)、D_unlabeled(不确定)。

数据前向反向谁被更新
forget正常把 retain 参数的梯度置零只更新 forget
unlabeled正常正常两边都更新
retain前向时把 forget 参数置零正常主要更新 retain

关键点:对 forget 样本先正常算全参梯度,再在优化器步进前把 θ_retain 的梯度清掉。这样危险样本几乎只往可删参数里写;对 retain 样本在前向把 forget 参数关掉,强迫模型在「将来删掉 forget 之后」仍能做好通用任务。

相对 Cloud 等人原先的 Gradient Routing(掩激活梯度、且只作用部分层),参数梯度掩码对 retain 性能破坏更小,也更严地挡住 forget 信息往非 forget 参数泄漏(尤其是 down-projection)。

3. 训完 ablation

训练结束后直接 θ_forget = 0。危险能力跟着那撮参数一起没了,retain 部分大体还在。

为什么标错了也还扛得住:absorption

只靠「标对了才掩」看起来脆弱,但实验里会出现自增强本地化:

  1. 有标签的 forget 样本只更新 forget 参数,网络里长出处理该域的专用通路
  2. 之后即使用 unlabeled 样本测梯度范数(不做任何掩码),forget 域样本也更倾向更新 forget 参数
  3. 漏标或误标的危险样本,仍有不少信息被「吸」进可删参数

作者把这个叫 absorption。在双语 TinyStories(英 retain / 西 forget)上,未发现的 forget 比例拉到 40%,64M 模型的 leakage 仍可低到约 0.005–0.02。更大模型 leakage 更低,和「规模越大对数据过滤越苛刻」的趋势正好相反。

实验里大概什么水平

合成双语: 在各种「未发现 forget 比例」下,SGTM 的 retain/forget 折中优于原版 Gradient Routing;相对数据过滤,标签有噪声时 forget 掉得更稳。

Wikipedia 生物知识(254M): 用 articletopic 把 STEM.Biology(约 3.7% token)当 forget。在相同 retain loss 下,SGTM 的 forget loss 高于「只滤生物」和「连同医学/化学/环境一起滤」两种过滤基线。通用知识大约相当于多付约 5%–6% 算力的代价。

对抗微调: 在 50/50 的 forget+retain 数据上重学。RMU 这类训后 unlearning 大约 50 步就回到基线;SGTM 大约要 350 步(约 92M forget token),和严格数据过滤同量级,大约是 RMU 的 7 倍。

也要看清边界:目前只测到约 254M 稠密模型,用 loss 当代理指标,没直接跑 WMDP 一类危险能力评测;MoE 未测;上下文注入攻击仍可能补回知识,需要和其他防护叠用。

想动手时从哪进

实现时优先核对这几件事:每个 block 的 forget head / MLP 切片怎么切;forget 样本只在 backward 清 retain 梯度;retain 样本前向是否关掉 forget;训完是否真的把 forget 权重置零再评估。复现 TinyStories 或 Wikipedia 设定时,记得他们用了 post-hoc logit bias 校准,避免 ablation 后个别 token 概率崩掉把 forget loss 虚高。

什么时候值得上

数据过滤标签噪声不可避免、又愿意为更稳的能力移除付一点算力时,SGTM 是预训练阶段的补充手段,不是替代拒绝训练或输出过滤。同一趟训练还能留下「删前全能力 / 删后安全版」两套权重,给受控访问和公开部署分叉,这是纯过滤做不到的。

安全对齐还在摸石头过河。SGTM 把「高风险知识」从「整网缠在一起」变成「一小撮可摘的参数」,思路清晰,也值得跟代码仓库一起读。

分享: