Lecture 13 · 数据归因:影响函数、Datamodels、TRAK 与元梯度 · Data Attribution

Training Data for AI · Lecture 13。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS525 Winter 2026 Training Data for AI,2/9 客座讲座 Data attribution & influence functions:Logan Engstrom(MIT → OpenAI)Data attribution at scale(44 页 slides),Juhan Bae(University of Toronto → Anthropic)Studying Large Language Model Generalization with Influence Functions(41 页 slides);2/18 的学生报告:Datamodels(Simon Guo,slides 改编自 Sam Park 和 Andrew Ilyas)、Data Attribution at Scale(TRAK,Hugo Buurmeijer)、Optimizing ML Training with Metagradient Descent(James Cheng)。阅读:Koh & Liang(2017)、Ilyas et al. Datamodels(2022)、Park et al. TRAK(2023)、Grosse et al.(2023)、Engstrom et al.(2025)、ICML 2024 的 ML & Data 教程。 依据说明:五份 slides 的文字都可读,但 Bae 的 slides 里大部分例子(有影响的训练序列)是图片,我只读到了结论性的文字。各论文的关键数字核对过摘要;学生报告里的数字(例如”100 个模型的 TRAK 相当于 5 万个模型的 datamodels""投毒 2.5% 让准确率从 92% 降到 78%""DataComp 0.13 → 0.22”)讲义里标明是”学生报告”。第 8 节”统一的视角”和第 9 节”延伸与前沿”是我补充的。 配套代码 Code:code/lecture13/(numpy;3 个脚本 + 1 个模块;最长的约 35 秒) 预计阅读时间:3 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

  1. 说清楚数据归因要回答的问题,以及 Engstrom 的三种归因:佐证式、博弈论式、预测式。
  2. 推导影响函数,理解它在凸模型上为什么准、在深度网络上为什么失效。
  3. 理解 Datamodels:用”在随机子集上训练很多模型”把训练的随机性平均掉,再用线性模型预测输出。
  4. 理解 TRAK:线性化 + 随机投影 + 集成,用几十到上百个模型达到成千上万个模型的效果;会用 LDS 评价归因方法。
  5. 了解影响函数怎样扩展到 520 亿参数的语言模型(EK-FAC),以及它揭示了语言模型的哪些泛化模式。
  6. 理解归因的应用公式(数据选择、模型调试、投毒),以及元梯度:对整个训练过程求导,直接优化训练数据。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲不展开 Not covered
逻辑回归、Hessian、隐函数定理EK-FAC、LiSSA 的推导
第 5 讲:DataComp(固定训练、只换数据)稀疏化、软阈值的细节
第 6、10 讲:数据选择和混合的实验方法机器遗忘(unlearning)的方法;数据投毒的细节(第 18 讲)

和本目录 CS329T 第 4 讲(训练数据归因) 有重叠:那一讲从可解释性的角度讲,本讲更关心”归因怎样帮我们整理训练数据”。

0.3 本讲地图 Map

§1  数据问题与数据归因:三种归因
§2  影响函数:推导、凸模型上的成功、深度网络上的失效        ← 代码 01 演示 1–3
§3  博弈论式的归因:数据 Shapley                            ← 代码 01 演示 4
§4  Datamodels:在随机性下预测预测                           ← 代码 02 演示 1、3
§5  TRAK:在大规模上做归因                                   ← 代码 02 演示 2
§6  影响函数遇上大语言模型(Grosse, Bae et al. 2023)
§7  应用:数据选择、模型调试、投毒;元梯度                   ← 代码 03
§8  一个统一的视角
§9  延伸与前沿
§10–14  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 关于数字

论文的数字来自论文摘要和 slides。代码的数字来自两个小任务(attrib_lab.py):

  • 线性任务:两个高斯类、少量翻转的标签,模型是 L2 正则的逻辑回归(凸,用牛顿法训练到收敛)——影响函数的理想情况。
  • 弯曲边界任务:y=[x0+0.8x12−0.8>0]y = [x_0 + 0.8 x_1^2 - 0.8 > 0],100 个训练样本,模型是一个 16 个隐单元的小网络(非凸,随机初始化,梯度下降 300 步)。为了做 datamodels,代码能在几秒内并行训练上千个网络。

评价归因方法用 TRAK 论文的线性数据建模分数(LDS,§5.3)。代码固定了随机种子,同一台机器上重复运行输出逐字相同。


1. 数据问题与数据归因

1.1 数据问题

Engstrom 从一串”数据问题”开始——它们都是在问模型的表现和数据之间的关系:

  • 我应该用什么数据训练语言模型?
  • 模型犯的这个错,该怪哪些训练数据?
  • 什么时候能相信模型的输出?
  • 应该给内容创作者多少补偿?
  • 模型对恶意的训练数据有多鲁棒?
  • 模型的输出是否侵犯了版权?

数据归因方法(data attribution)试图把模型在测试时的行为和数据联系起来。具体是什么数据(单个样本?一个数据来源?)、什么行为(一个预测?整体的损失?)、以什么方式联系——不同的问题需要不同的答案。

1.2 三种数据归因

Engstrom 按应用把归因分成三类:

类型问的问题例子代表方法
佐证式(corroborative,找证据)这个输出在某个语料里有没有”证据”?引用来源、检查版权(扩散模型生成的图和训练图几乎一样)在一个搜索集里,按预先定义的”证据”概念(蕴含、视觉相似度)检索
博弈论式(game-theoretic,分功劳)每个数据来源为结果贡献了多少?给数据提供者付费数据 Shapley(§3)
预测式(predictive,datamodeling)如果换一个训练集,模型的输出会怎样变?模型调试、数据选择、投毒影响函数、datamodels、TRAK(§2、§4、§5)

佐证式归因不关心因果:一张训练图和生成的图很像,不代表模型”因为”它才生成了这张图(Worledge et al. 2023 把后两类称为”贡献式”归因)。本讲主要讲预测式归因。

预测式归因的定义:有一个数据全集 U\mathcal{U} 和训练子集 S⊂US \subset \mathcal{U};在 SS 上训练得到 θ(S)\theta(S),对样本 zz 的输出是 ℓ(z,θ(S))\ell(z, \theta(S))。预测式归因方法给出一个估计 f^z(S)\hat f_z(S),使得

ℓ(z,θ(S))≈f^z(S)对任意(或一大类)子集 S.\ell(z, \theta(S)) \approx \hat f_z(S) \quad \text{对任意(或一大类)子集 } S.

Engstrom 的关键观察:“事实证明,简单的预测器效果很好。”


2. 影响函数

2.1 推导

影响函数是统计学里的经典想法(Hampel 1974),Koh & Liang(2017)把它引入深度学习。

训练是经验风险最小化:θ^=arg⁡min⁡θ1n∑i=1nℓ(zi,θ)\hat\theta = \arg\min_\theta \frac{1}{n}\sum_{i=1}^n \ell(z_i, \theta)。我们想知道:如果把训练样本 zz 的权重增加一点点 ϵ\epsilon,最优解会怎样变?定义响应函数

θ^ϵ,z=arg⁡min⁡θ1n∑i=1nℓ(zi,θ)+ϵ ℓ(z,θ).\hat\theta_{\epsilon, z} = \arg\min_\theta \frac{1}{n}\sum_{i=1}^n \ell(z_i, \theta) + \epsilon\, \ell(z, \theta).

最优解满足一阶条件 ∇θ[⋅]=0\nabla_\theta[\cdot] = 0。对 ϵ\epsilon 求导(隐函数定理),在 ϵ=0\epsilon = 0 处:

dθ^ϵ,zdϵ∣ϵ=0=−Hθ^−1∇θℓ(z,θ^),Hθ^=1n∑i∇θ2ℓ(zi,θ^).\left.\frac{d\hat\theta_{\epsilon,z}}{d\epsilon}\right|_{\epsilon=0} = -H_{\hat\theta}^{-1} \nabla_\theta \ell(z, \hat\theta), \qquad H_{\hat\theta} = \frac{1}{n}\sum_i \nabla^2_\theta \ell(z_i, \hat\theta).

再用链式法则得到对测试样本 ztestz_{\text{test}} 的损失(或任何输出 ff)的影响:

I(z,ztest)=d ℓ(ztest,θ^ϵ,z)dϵ∣ϵ=0=−∇θℓ(ztest,θ^)⊤Hθ^−1∇θℓ(z,θ^).\mathcal{I}(z, z_{\text{test}}) = \left.\frac{d\, \ell(z_{\text{test}}, \hat\theta_{\epsilon,z})}{d\epsilon}\right|_{\epsilon=0} = -\nabla_\theta \ell(z_{\text{test}}, \hat\theta)^\top H_{\hat\theta}^{-1} \nabla_\theta \ell(z, \hat\theta).

读法:I<0\mathcal{I} < 0 表示”增加 zz 的权重会降低测试损失”——zz 是有帮助的。去掉 zz 相当于 ϵ=−1/n\epsilon = -1/n,所以”去掉 zz 后测试损失的变化” ≈−I/n\approx -\mathcal{I}/n。学生报告的说法:影响函数就是一个”线性的 datamodel”。

2.2 凸模型上:几乎就是留一法(代码 01 演示 1)

逻辑回归(200 个训练样本、50 个测试点):对每个测试点,影响函数预测的”去掉 ii 的效果”和精确的留一法(真的去掉、重新训练)的相关系数平均 0.9996。只算一次 Hessian 的逆,就代替了 200 次重新训练。

但组效应不是可加的。对一个测试点,去掉影响最大的 kk 个样本:

kk预测的变化真实的变化比值
1+0.113+0.1211.07
5+0.470+0.5221.11
20+1.553+2.2541.45
40+2.435+4.3201.77

影响函数把各个样本的效果简单相加,而一组样本之间有相互作用;变化越大,一阶近似偏离越多。学生报告把”忽略组效应”列为这类方法的弱点。

2.3 深度网络上:影响函数”脆弱”(代码 01 演示 2)

影响函数的推导假设:目标是严格凸的、θ^\hat\theta 是精确的最优解、去掉一个样本后最优解还在附近。深度网络三条都不满足:损失非凸、训练提前停止、不同的初始化收敛到不同的地方。Basu et al.(2021)的论文标题就是 Influence functions in deep learning are fragile。

小网络(100 个训练样本、30 个测试点)上:

量数值
影响函数 vs 留一法(同一个初始化)的相关系数0.540
留一法(换一个初始化)vs 留一法的相关系数0.408
去掉一个样本的效果:|变化| 的平均0.119
只换随机种子(数据不变):测试输出的标准差0.688

更根本的问题在后两行:留一法本身就不稳定。只换随机种子造成的输出波动,比去掉一个样本的效果大好几倍;换一个初始化重新做留一法,结果的相关系数只有 0.41。所以对深度网络来说,“去掉样本 ii 的效果”必须定义成对训练的随机性取平均的效果——这正是 datamodels 和 TRAK 的出发点。

2.4 一个应用:找出标错的样本(代码 01 演示 3)

自影响 ∇ℓ(zi)⊤H−1∇ℓ(zi)\nabla\ell(z_i)^\top H^{-1} \nabla\ell(z_i) 衡量”一个样本对它自己的损失有多大影响”——标错的样本通常自影响很大(模型要”扭曲”自己才能拟合它)。Koh & Liang 的一个应用:让人优先检查自影响大的样本。

1000 个训练样本、8% 的标签被翻转,检查前 50 个:按自影响排序,50% 是标错的;随机检查只有 10%。但在逻辑回归上,按训练损失排序还好一点(60%)——自影响主要由损失决定,再乘上”这个样本有多孤立”,孤立但标对的样本也会被排到前面。归因方法不一定胜过简单的基线,要和基线比较。


3. 博弈论式的归因:数据 Shapley

3.1 把训练看成一个合作博弈

博弈论式的归因(Ghorbani & Zou 2019;Jia et al. 2019)把模型训练看成数据点(或数据提供者)之间的合作博弈:效用 u(S)u(S) 是在子集 SS 上训练出的模型的表现。目标是给每个数据点分配”公平的功劳”。

数据 Shapley:

v(zi)=∑S′⊆S∖{zi}γ(∣S′∣)⋅[u(S′∪{zi})−u(S′)],v(z_i) = \sum_{S' \subseteq S \setminus \{z_i\}} \gamma(|S'|) \cdot \big[u(S' \cup \{z_i\}) - u(S')\big],

即 ziz_i 加入每一个可能的子集时的边际贡献的加权平均(等价于:在所有加入顺序下的边际贡献的平均)。它是唯一满足以下公理的分配方式:

  • 对称性:完全相同的数据点得到相同的功劳;
  • 线性:对效用的线性组合做归因 = 归因的线性组合;
  • 零效用:总是没用的数据点得到 0;
  • (有效性:所有数据点的功劳之和 = 全集的效用 − 空集的效用。)

3.2 和留一法比较(代码 01 演示 4)

20 个训练样本(其中样本 3 的标签是错的),效用 = 测试集的平均对数似然,200 个随机排列的蒙特卡洛估计:

留一法Shapley
所有样本的价值之和0.0390.208(= 全集 − 空集的效用)
标错的样本 3−0.051−0.229
最有价值的样本 80.0570.131
把样本 8 复制一份后:原件 / 副本0.030 / 0.0300.085 / 0.109
  • 有效性:Shapley 值的和恰好等于总效用;留一法的和没有这样的意义。
  • 错误样本:Shapley 罚得重得多——在训练集还小的时候加入它,伤害很大;留一法只看”其他 19 个样本都在”的情况。
  • 冗余:复制一份样本后,留一法给每个副本的价值几乎减半——另一个副本还在,去掉这一个就没那么要紧了(冗余的数据互相”掩护”);Shapley 的副本价值高得多(按对称性两者应相等,差别是蒙特卡洛的噪声)。
  • 代价:这里 200 个排列 × 20 个样本 = 4000 次训练。精确计算要对所有子集求和(指数级);蒙特卡洛和截断近似仍然很贵,只能用于小数据或便宜的模型。

4. Datamodels:在随机性下预测预测

4.1 把”中间”完全抽象掉

Datamodels(Ilyas, Park, Engstrom, Leclerc, Madry 2022)的想法(学生报告的 slides):机器学习分两个阶段——训练(数据 → 算法 → 模型)和推理(模型 → 对 (x,y)(x, y) 的输出)。何不把中间的一切都抽象掉,直接学”训练数据 → 输出”的映射?

对一个固定的目标样本 xx,定义 f(x,S′)f(x, S') = 在训练集的子集 S′S' 上训练(含所有随机性)后,模型对 xx 的输出(例如正确类别的 margin)。ff 包含了整个训练过程,非常复杂。Datamodel 是一个简单的代理 gθ(S′)≈f(x,S′)g_\theta(S') \approx f(x, S')。

怎样拟合?监督学习:

  1. 随机抽 mm 个子集 S1,…,SmS_1, \dots, S_m(每个包含训练集的 α\alpha 比例);
  2. 在每个子集上训练一个模型,记录对 xx 的输出:得到数据 {(Si,f(x,Si))}\{(S_i, f(x, S_i))\};
  3. 拟合一个线性模型:g(S′)=θx⊤1S′g(S') = \theta_x^\top \mathbf{1}_{S'},1S′\mathbf{1}_{S'} 是 S′S' 的指示向量(长度 = 训练集大小):

θx=arg⁡min⁡w1m∑i=1m(w⊤1Si−f(x;Si))2+λ∥w∥1.\theta_x = \arg\min_w \frac{1}{m}\sum_{i=1}^m \big(w^\top \mathbf{1}_{S_i} - f(x; S_i)\big)^2 + \lambda \|w\|_1.

就是带 L1 正则的线性回归——但每个数据点都是一次完整的模型训练。

学生报告的 slides 描述的 CIFAR-10 实验:重复 50 万次”随机抽训练集的 α\alpha 比例 → 训练一个 ResNet-9 → 记录每张测试图片的 margin”(FFCV 让这成为可能),为 1 万张测试图片各拟合一个 5 万维的 datamodel。评估:抽新的子集,比较 datamodel 的预测和真实训练(100 个模型取平均)的 margin——datamodels 成功地预测了端到端的训练结果。论文公开了 400 万个训练好的网络的预测。

论文列出的应用:预测数据集反事实的效果、识别脆弱的预测、找语义相似的样本、量化训练集和测试集之间的泄漏、把数据嵌入一个特征丰富的表示空间。

4.2 在小网络上(代码 02 演示 1)

方法LDS训练的模型数
影响函数(1 个模型)0.4561
Datamodels0.583200
Datamodels0.7501000
Datamodels0.7784000

Datamodels 直接用”在随机子集上真的训练”的数据拟合,所以把训练的随机性平均掉了;代价是要训练很多模型。我们只有 100 个训练样本,几千个模型就够;CIFAR-10 有 5 万个,就要几十万个。

4.3 脆弱的预测(代码 02 演示 3)

去掉 datamodel 认为”最支持”某个测试预测的 kk 个训练样本,重新训练(10 个种子取平均),预测翻转了吗?

kk按 datamodel 去掉随机去掉
550% 的测试点翻转3%
1070%7%
2080%17%

Datamodel 找到了”真正支撑这个预测”的训练样本。这个实验也是对归因的反事实验证:真的去掉、真的重新训练,看预测是否像归因说的那样变。(我们的测试点里有很多离决策边界近的点,所以翻转的比例很高。)


5. TRAK:在大规模上做归因

5.1 动机

影响函数要算 Hessian(大模型上不可行),datamodels 要训练成千上万个模型——都不能扩展。TRAK(Tracing with the Randomly-projected After Kernel,Park et al. 2023)的目标:在大模型、大数据集上做归因,同时保持效果。论文的说法:“只需要很少的模型,就能达到要训练上千个模型的方法的效果”;在 ImageNet 上的图像分类器、CLIP、BERT、mT5 上做了评测。

5.2 五个步骤

学生报告的总结(论文从二分类的逻辑回归出发,再推广):

  1. 线性化模型的输出函数:在训练好的参数处,把网络看成以 ∇θf(x)\nabla_\theta f(x) 为特征的线性模型;
  2. 随机投影降维:ϕ(x)=P⊤∇θf(x)\phi(x) = P^\top \nabla_\theta f(x),PP 是高斯随机矩阵(Johnson–Lindenstrauss:内积大致保持),把几百万维的梯度压到几千维;
  3. 用 Gauss–Newton 近似 Hessian,在线性化的模型上算影响:τ(x,i)=ϕ(x)⊤(Φ⊤Φ)−1ϕ(xi)⋅(1−pi)\tau(x, i) = \phi(x)^\top (\Phi^\top \Phi)^{-1} \phi(x_i) \cdot (1 - p_i),最后一项是残差(模型已经很有把握的样本影响小);
  4. 对多个模型取平均(每个在训练集的一个随机子集上训练);
  5. 用软阈值稀疏化分数。

结果(学生报告):TRAK 在速度和效果的权衡上占优;100 个模型的 TRAK 和 5 万个模型的 datamodels 一样有效;在语言模型上能找出对学会某个事实”反事实地重要”的训练样本(fact tracing);在简单的分类问题上,TRAK 追踪的是决策边界,而不只是最近邻。

优点:因果的(关于数据的反事实,不只是相关);细粒度(单个样本);通用(任何指标:交叉熵、MSE、准确率);有易用的 PyTorch API。缺点:不完全准确(理论只对凸问题成立);忽略组效应。学生报告的建议:“从 TRAK 开始”——datamodels 太贵,元梯度的实现复杂、代码没有公开。

5.3 怎样评价归因:LDS

一个好的预测式归因方法应该能回答反事实问题。线性数据建模分数(linear datamodeling score):

  1. 抽 MM 个新的随机子集 S1,…,SMS_1, \dots, S_M;
  2. 用归因分数预测每个子集上的输出:f^x(Sj)=∑i∈Sjτ(x,i)\hat f_x(S_j) = \sum_{i \in S_j} \tau(x, i);
  3. 在每个子集上真的训练(几个随机种子取平均),得到真实输出 f(x,Sj)f(x, S_j);
  4. 对每个测试点,算预测和真实输出在 MM 个子集上的 Spearman 相关,再对测试点取平均。

5.4 在小网络上(代码 02 演示 2)

模型数TRAK(投影到 32 维)不做投影(影响函数的集成)
10.2580.272
50.4270.392
200.5930.518
1000.6780.606
  • 集成是关键:1 个模型时 0.26,100 个模型时 0.68——和 1000 个模型的 datamodels(0.75)相去不远。
  • 投影的维数是一个超参数:100 个模型时,k = 8、16、32、64、113、256 的 LDS 分别是 0.632、0.668、0.678、0.556、0.497、0.468。我们的网络有 113 个参数、只有 100 个训练样本,Φ⊤Φ\Phi^\top\Phi 是病态的,投影到低维相当于正则化。在真实的大网络上,投影首先是为了能算。

6. 影响函数遇上大语言模型

6.1 动机:解释 LLM 的出人意料的行为

Bae 的报告(Grosse, Bae et al. 2023,Anthropic)从一个问题开始:怎样解释大语言模型出人意料的行为?他们的办法是检查模型的泛化模式:一个训练样本的存在怎样影响模型的行为?

两个”预告”的例子(slides 里有影响的训练序列是图片,这里只引用它们的总结):

  • 一个关于”关机”的问题:最有影响的训练序列有一个共同的主题——在可能的告别、死亡或终止之前,“希望继续留下 / 活下去 / 运行下去”的愿望;
  • 另一个查询:最有影响的训练序列包含讽刺英美政治的文字、假新闻、对公众人物和卡通人物的戏仿。

6.2 把影响函数扩展到 520 亿参数

对一个查询 zqz_q 找有影响的训练样本,分两步,两步都很难:

  1. 逆 Hessian–向量积(IHVP):Hessian 的维数是参数量的平方,显式计算不可能。用 LiSSA、EK-FAC(特征值修正的 Kronecker 分解近似曲率)等近似。用 EK-FAC,影响函数被扩展到了超过 520 亿参数的语言模型,精度和传统估计相近、求逆快得多。
  2. 和所有候选训练样本做点积:要算每个训练样本的梯度——对 LLM 的预训练来说,这至少和”训练一个 epoch”一样贵,而且每个查询都要重复一次。论文用 TF-IDF 先筛出候选、把多个查询合成一批来降低成本。

对 LLM,影响定义在”提示 pp 之后生成补全 cc 的对数似然”上:log⁡p(c∣p)\log p(c \mid p)——只有补全的部分算数。直觉:什么样的训练序列会提高这个查询的对数似然?

6.3 发现

  • 抽象程度随规模增加:数学、角色扮演、代码等查询上,有影响的序列在小模型上往往只是表面相似(共享关键词),在大模型上更抽象、更”在概念上相关”。
  • 跨语言泛化:模型越大,用另一种语言写的相关序列的影响越大。
  • 影响的分布:可以定位到层和 token;一个查询的影响分布在训练序列上是稀疏的(重尾)。
  • 词序:一个惊人的局限——把关键短语的顺序颠倒,影响就衰减到几乎为零(“A 是 B”的训练序列对”B 是 A”的查询几乎没有影响)。论文只报告了这个模式;后来 Berglund et al.(2023)找到了更全面的证据,称之为反转诅咒(Reversal Curse)。他们的方法论:先在全训练集(超过 1000 万条序列)上扫描、发现现象,再用合成的”训练序列”做受控实验。

6.4 下一步

Bae 的展望:影响函数是我们分析 LLM 高层次”认知”现象的少数工具之一。开放的问题:训练集里关于 AI 的描述,是否构成了 AI 助手”自我概念”的核心部分?预训练和微调怎样相互作用?——微调的泛化模式主要由优化器的隐式偏置决定,而这种偏置来自预训练时学到的关联。


7. 应用与元梯度

7.1 应用预测式归因的公式

Engstrom 的第二部分:预测式归因能解决的远不止”理解模型”。给定一个任务:

  1. 把问题改写成模型输出的函数;
  2. 代入预测式归因的估计(然后求解)。

三个应用:

  • 模型调试:模型为什么把这张图认成”船”?给每个训练样本一个”重要性”,检查最重要的样本,往往会冒出一个明显的假设(例如背景里都有水)。概念上的问题:怎样验证这些假设、怎样把洞察变成行动。
  • 数据集选择:互联网上大部分数据”质量低”,该用什么训练?

min⁡S⊂UEz∼Dtargℓ(z;θ(S))    →    min⁡S⊂UEz∼Dtargf^z(S).\min_{S \subset U} \mathbb{E}_{z \sim D_{\text{targ}}} \ell(z; \theta(S)) \;\;\to\;\; \min_{S \subset U} \mathbb{E}_{z \sim D_{\text{targ}}} \hat f_z(S).

原问题每评估一个 SS 都要训练一个模型;代入归因之后,目标变得容易优化和评估。大问题:能否扩展、到底该优化什么。

  • 数据投毒:攻击者修改一部分训练数据,让模型在目标任务上变差(例如一个政客上传让模型不喜欢对手的文字)。max⁡SadvEz∼Dtargℓ(z;θ(Sadv∪Sclean))\max_{S_{\text{adv}}} \mathbb{E}_{z \sim D_{\text{targ}}} \ell(z; \theta(S_{\text{adv}} \cup S_{\text{clean}}))——通过训练过程很难优化,代入归因的估计、对 SadvS_{\text{adv}} 求最大(第 18 讲)。

其他应用:数据定价(训练数据值多少钱?)、机器遗忘(怎样”忘掉”一个数据点?)、检索增强(介于”数据选择”和”引用”之间)。

7.2 元梯度:对整个训练过程求导

Engstrom et al.(Optimizing ML Training with Metagradient Descent,2025)走得更远:与其用归因近似”训练集 → 输出”,不如直接对训练过程求导(学生报告的总结)。

形式化:把整个训练看成一个可微的映射 θT(z)=Train(z)\theta_T(z) = \text{Train}(z),其中 zz 是元参数——数据的权重、学习率调度、投毒的模式。外层目标是 min⁡zLouter(θT(z))\min_z L_{\text{outer}}(\theta_T(z));内层是训练 θt+1=θt−αt(z)∇θℓtrain(θt,z)\theta_{t+1} = \theta_t - \alpha_t(z) \nabla_\theta \ell_{\text{train}}(\theta_t, z)。元梯度 ∇zLouter(θT(z))\nabla_z L_{\text{outer}}(\theta_T(z)) 要穿过整个训练过程反向传播。

两个障碍:

  1. 内存:反向模式要存下所有中间状态,内存 O(T)O(T)。REPLAY:递归的 kk 叉检查点——只存稀疏的”锚点”状态,缺的状态从最近的锚点重新跑一小段前向得到。空间 O(klog⁡T)O(k \log T),时间 O(Tlog⁡T)O(T \log T):内存从 TT 降到 log⁡T\log T,代价是适度的重新计算。kk 是调节旋钮:kk 大,内存多、重算少。
  2. 噪声:元参数的”地形”是锯齿状的、不光滑的,元梯度方差大、不稳定。元平滑(metasmoothing):把训练流程设计成”元光滑”的——用 GELU 代替 ReLU(去掉折点)、平均池化代替最大池化(去掉离散性)、BatchNorm 放在激活之前。

结果:

  • 数据投毒:只改 CIFAR-10 的 2.5% 的样本,准确率从 92% 降到 78%(已有的方法通常只能降不到 1%)——摘要的说法是”把准确率的下降提高了一个数量级”;
  • 数据选择(CLIP,DataComp-small 的设置):不过滤 0.13,之前最好的方法 EcoDatum 0.18,MGD 0.22——几乎把提升翻了一倍;
  • 自动发现的学习率调度和标准的调度相当。

局限:计算开销(“对反向传播再做一次反向传播”,2–3 倍的计算;缺少优化好的算子;常用 float32 / tf32);平滑性是硬约束(标准的 ReLU、MaxPool 架构上效果不好);元过拟合——它会”无情地”优化指定的目标集,可能损害没有被指定的任务(论文的 DataComp 实验里 ImageNet 的分数下降了)。

7.3 在代码里(代码 03)

一个有噪声的数据池:400 个样本,60% 干净、20% 标签翻转、20% 来自决策边界相反的分布;200 个干净的验证样本;在 3000 个干净的测试样本上评估。模型是逻辑回归。

数据选择(保留 60%):

选择方法测试准确率保留的:干净 / 翻转 / 别的分布
全部 400 个0.70361% / 21% / 18%
随机保留 240 个0.69661% / 23% / 16%
按训练损失:去掉最高的 40%0.70878% / 10% / 11%
按影响函数:保留最帮助验证集的0.78983% / 10% / 8%
(神谕)只用干净的样本0.808100% / 0% / 0%

按训练损失过滤几乎没有帮助(测试对数损失还从 0.609 恶化到 1.384——剩下的数据几乎线性可分,模型变得过于自信);按”对目标任务的影响”选,两类坏数据都被识别出来了。数据的”好坏”是相对于目标任务定义的(第 6 讲”质量是操作性的”)。

元梯度下降:把逻辑回归的 150 步梯度下降展开,对 400 个样本的权重求验证损失的梯度(伴随变量反向传播,只需要 Hessian–向量积)。60 次外层迭代后,测试准确率从 0.703 升到 0.808——和”只用干净数据”的神谕一样,而它不知道哪些样本是坏的。干净样本的平均权重升到 1.29,翻转的降到 0.60,别的分布的降到 0.49;权重最低的 80 个样本里 90% 是坏数据。

元过拟合:验证集只有 30 个样本时,验证损失被压到 0.179(200 个时 0.390),测试准确率却只有 0.737(200 个时 0.808)——400 个权重足够去拟合 30 个验证样本的偶然特点。练习 5 会看到它随验证集变大怎样消失。


8. 一个统一的视角(补充)

方法回答什么成本准确性
留一法去掉 ii、重新训练,输出怎样变nn 次训练凸模型上精确;网络上被随机性淹没
影响函数留一法的一阶近似一次(近似的)Hessian 逆 + 每个样本一次梯度凸模型上很好;网络上脆弱;可以扩展到 LLM(EK-FAC)
数据 Shapley公平地分配功劳指数级(蒙特卡洛:排列数 × nn 次训练)有公理保证,但太贵
Datamodels随机子集 → 平均输出的线性代理几千到几十万次训练预测随机子集上的输出最准
TRAKdatamodels 的便宜近似几十到上百次训练 + 投影的梯度接近 datamodels,可扩展
元梯度对训练过程的精确导数训练的 2–3 倍 + 内存技巧能直接优化数据,但会元过拟合

一个贯穿的教训:深度学习的训练是随机的,归因必须定义在”平均”的意义上。datamodels 和 TRAK 的集成、元梯度的平滑,都是在处理这一点。另一个教训:归因的价值最终要用反事实来检验——真的去掉、真的重新训练(LDS、代码 02 演示 3)。

和本课其他部分的联系:第 6 讲 DCLM 用”小规模训练 + 下游评测”比较数据集;第 10 讲的混合方法比较数据领域的比例;本讲的方法比较单个样本。它们回答的是同一个问题——“什么数据带来什么行为”——在不同的粒度上。


9. 延伸与前沿 · Beyond the original lecture

本节是我补充的。

  • 用归因选后训练数据:LESS(Xia et al. 2024)用投影后的梯度特征(和 TRAK 同一类)衡量每条指令数据和目标任务的相似度,用 5% 的数据训练,往往比用全部数据还好。数据选择是归因目前最实用的方向之一。
  • 归因与版权、补偿:如果模型的输出能追溯到具体的训练文档,就可以讨论引用和补偿(Engstrom 的”数据问题”清单)。但佐证式的”相似”和预测式的”因果”是两回事,法律上需要哪一种仍不清楚(第 19 讲)。
  • 归因与遗忘:评估”遗忘”是否成功,本质上是一个归因问题——遗忘后的模型和”从没见过这些数据”的模型一样吗?第 12 讲 token 级过滤的论文就用”对抗性微调需要多少数据才能恢复”来衡量。
  • 规模的挑战:Engstrom 的观点是”我们到了吗?“——训练数据归因”还不广为人知、也不常被使用”;效果、计算效率、落地都还有很多改进的空间。

10. 小结 · Summary

  1. 数据归因把测试时的行为和训练数据联系起来。三类:佐证式(找证据)、博弈论式(分功劳,Shapley)、预测式(反事实:换一个训练集会怎样)。
  2. 影响函数:−∇ℓ(ztest)⊤H−1∇ℓ(z)-\nabla\ell(z_{\text{test}})^\top H^{-1} \nabla\ell(z)。凸模型上几乎就是留一法(相关 0.9996);组效应不可加;深度网络上脆弱——更根本地,网络上的留一法本身被训练的随机性淹没。
  3. 数据 Shapley:满足对称、线性、零效用、有效性的唯一分配;罚错误样本更重、不受冗余”掩护”;但非常贵。
  4. Datamodels:在随机子集上训练很多模型,用线性回归拟合”子集 → 输出”;能预测端到端训练的结果;可以识别脆弱的预测。
  5. TRAK:线性化 + 随机投影 + Gauss–Newton + 集成;100 个模型 ≈ 5 万个模型的 datamodels;用 LDS 评价。
  6. LLM 上的影响函数(EK-FAC,520 亿参数):泛化随规模更抽象、跨语言;影响稀疏;词序颠倒影响消失(反转诅咒)。
  7. 应用:把任务写成输出的函数、代入归因——数据选择、模型调试、投毒。元梯度直接对训练过程求导:REPLAY 解决内存、元平滑解决噪声;投毒更强、DataComp 0.13 → 0.22;会元过拟合。

11. 常见误区 · Common pitfalls

  1. “和测试样本最像的训练样本就是最有影响的。” 那是佐证式的相似,不是因果的影响;TRAK 追踪的是决策边界,不只是最近邻。
  2. “影响函数在深度网络上和在线性模型上一样准。” 非凸、提前停止、随机初始化都会破坏它的假设(代码 01 演示 2)。
  3. “留一法是金标准。” 在随机训练的网络上,留一法的效果比种子噪声还小,必须对随机性取平均(代码 01 演示 2)。
  4. “一组样本的影响 = 各个样本影响之和。” 组效应不可加,变化越大偏离越多(代码 01 演示 1)。
  5. “归因方法一定比简单的基线好。” 找标错的样本时,训练损失就是一个很强的基线(代码 01 演示 3)。
  6. “投影维数越大越准。” 投影也是正则化,太大时可能更差(代码 02 演示 2)。
  7. “在验证集上优化数据,测试集一定变好。” 验证集小时会元过拟合(代码 03 演示 3)。

12. 练习 · Exercises

练习 1(线性回归的精确留一法) 对普通最小二乘 β^=(X⊤X)−1X⊤y\hat\beta = (X^\top X)^{-1} X^\top y,设 hii=xi⊤(X⊤X)−1xih_{ii} = x_i^\top (X^\top X)^{-1} x_i(杠杆值),ri=yi−xi⊤β^r_i = y_i - x_i^\top\hat\beta。(a) 用 Sherman–Morrison 公式证明:去掉样本 ii 后,β^(−i)=β^−(X⊤X)−1xiri1−hii\hat\beta_{(-i)} = \hat\beta - \frac{(X^\top X)^{-1} x_i r_i}{1 - h_{ii}}。(b) 影响函数给出的近似是什么?两者差在哪里?(c) 什么样的样本会让影响函数严重低估留一法的效果?

参考答案

(a) 去掉样本 ii:X(−i)⊤X(−i)=X⊤X−xixi⊤X_{(-i)}^\top X_{(-i)} = X^\top X - x_i x_i^\top,X(−i)⊤y(−i)=X⊤y−xiyiX_{(-i)}^\top y_{(-i)} = X^\top y - x_i y_i。Sherman–Morrison:(A−xx⊤)−1=A−1+A−1xx⊤A−11−x⊤A−1x(A - x x^\top)^{-1} = A^{-1} + \frac{A^{-1} x x^\top A^{-1}}{1 - x^\top A^{-1} x}。代入、化简即得(中间用到 xi⊤β^=yi−rix_i^\top\hat\beta = y_i - r_i)。

(b) 影响函数(损失 12(y−x⊤β)2\frac{1}{2}(y - x^\top\beta)^2,Hessian X⊤X/nX^\top X / n,去掉 ≈ ϵ=−1/n\epsilon = -1/n)给出 β^(−i)≈β^−(X⊤X)−1xiri\hat\beta_{(-i)} \approx \hat\beta - (X^\top X)^{-1} x_i r_i——少了分母 1−hii1 - h_{ii}。

(c) 杠杆值 hiih_{ii} 接近 1 的样本:在特征空间里很孤立、几乎”独自决定”了某个方向的参数。去掉它的真实效果被放大了 1/(1−hii)1/(1 - h_{ii}) 倍,影响函数(一阶近似)却看不到。这也解释了代码 01 演示 3 里”孤立的样本自影响大”。

练习 2(手算 Shapley) 三个数据点 A、B、C。效用:u(∅)=0u(\emptyset) = 0,u(A)=u(B)=0.5u(A) = u(B) = 0.5,u(C)=0u(C) = 0,u(AB)=0.6u(AB) = 0.6,u(AC)=u(BC)=0.5u(AC) = u(BC) = 0.5,u(ABC)=0.6u(ABC) = 0.6。(a) 算每个点的 Shapley 值(对 6 个加入顺序取平均)。(b) 算每个点的留一法价值。(c) 解释两者的差别。

参考答案

(a) 列出 6 个顺序里 A 的边际贡献:ABC:0.5;ACB:0.5;BAC:0.1;BCA:0.1;CAB:0.5;CBA:0.1。平均 1.8/6=0.31.8 / 6 = 0.3。B 对称,也是 0.3。C 的边际贡献在每个顺序里都是 0,Shapley 值 0。和 = 0.6 = u(ABC)−u(∅)u(ABC) - u(\emptyset)。

(b) 留一法:A:u(ABC)−u(BC)=0.1u(ABC) - u(BC) = 0.1;B:0.1;C:u(ABC)−u(AB)=0u(ABC) - u(AB) = 0。

(c) A 和 B 高度冗余(各自都能带来 0.5,合起来只有 0.6)。留一法只看”另一个还在”的情况,于是两者都只值 0.1——互相”掩护”;Shapley 考虑所有加入顺序,把 0.6 的总功劳在两者之间平分。C 在两种方法里都是 0(零效用公理)。

练习 3(成本的账) (a) Datamodels 的 CIFAR-10 实验训练了 50 万个模型。如果一个 ResNet-9 在一块 GPU 上训练需要 30 秒(FFCV),总共要多少 GPU 小时?(b) TRAK 用 100 个模型,节省了多少倍?(c) 对一个 LLM 的预训练集做影响函数分析,为什么”和所有训练样本做点积”至少和训练一个 epoch 一样贵?怎样降低这个成本?

参考答案

(a) 5×105×305 \times 10^5 \times 30 秒 ≈1.5×107\approx 1.5 \times 10^7 秒 ≈4200\approx 4200 GPU 小时。

(b) 只看训练:5000 倍(TRAK 还要为每个训练样本算一次梯度并投影,但这比训练便宜)。

(c) 要对每个训练序列算一次梯度(一次前向 + 一次反向),这正是训练一个 epoch 的计算量;而且每个新的查询都要重复。Grosse et al. 的办法:用 TF-IDF 先筛出可能相关的候选序列,只对它们算梯度;把多个查询合成一批,一次扫描同时处理。另一个办法是像 TRAK 一样把训练样本的(投影后的)梯度算一次、存下来,之后每个查询只做低维的点积。

练习 4(REPLAY 的内存) 元梯度要穿过 T=106T = 10^6 步训练反向传播。(a) 朴素的做法要存多少个中间状态?(b) REPLAY 取 k=2k = 2,大约存多少个?重新计算的代价大约是训练的几倍?(c) 一个 70 亿参数的模型(bf16,每个状态约 14 GB),两种做法各要多少内存?

参考答案

(a) 10610^6 个。

(b) 空间 O(klog⁡T)≈2×log⁡2106≈2×20=40O(k \log T) \approx 2 \times \log_2 10^6 \approx 2 \times 20 = 40 个;时间 O(Tlog⁡T)O(T \log T),每一步大约被重算 log⁡2T≈20\log_2 T \approx 20 次——约是训练本身的 20 倍(不同的 kk 在内存和重算之间权衡)。

(c) 朴素:106×1410^6 \times 14 GB = 14 PB,不可能;REPLAY:40×1440 \times 14 GB ≈ 560 GB,可以放在几台机器的内存或硬盘里。(真实系统还要存优化器状态,这里只是数量级。)

练习 5(元过拟合怎样消失) 在代码 03 里把验证集的大小换成 30、60、100、200、400,运行元梯度下降。先预测测试准确率怎样变化。

参考答案(实际运行结果:导入代码 03、用不同的验证集调用 mgd,不改动文件)
验证集大小最后的验证损失测试准确率
300.1790.737
600.1530.755
1000.2760.811
2000.3900.808
4000.3480.817

验证集小于 100 时,验证损失被压得很低、测试准确率明显更差——典型的过拟合;100 个以上就稳定在神谕(0.808)附近。经验法则:被优化的”元参数”越多(这里 400 个权重),需要的验证数据越多。实际做法:把验证集分成”优化用”和”检查用”两部分,用后者早停。

练习 6(讨论:版权诉讼里用哪种归因) 一个图像生成模型生成了一张和某位画家的作品很像的图。原告想证明”模型是因为在这位画家的作品上训练过,才生成了这张图”。(a) 佐证式归因(在训练集里找最相似的图)能证明这一点吗?(b) 预测式归因能回答什么问题?它的结论可靠吗?(c) 你会怎样设计一个更有说服力的实验?

参考答案(要点)

(a) 不能。找到一张很像的训练图,只说明”有证据”,不说明”因为”:模型可能从很多其他作品里学到了同样的风格,没有这张图也会生成类似的结果。(但如果生成的图和某张训练图几乎逐像素一样——记忆——佐证式的证据就很强,第 18 讲。)

(b) 预测式归因估计”去掉这位画家的作品后,生成这张图的概率会降低多少”。它直接回答因果问题,但在大模型上只是近似(TRAK、影响函数都有误差),而且组效应不可加——去掉一位画家的全部作品不等于逐张去掉的效果之和。

(c) 最直接的反事实实验:在去掉这位画家全部作品的数据上重新训练(或微调)一个模型,比较两者生成类似图片的概率。成本高,但对小模型可以做;也可以用 datamodels 式的实验,在很多随机子集上训练小模型,估计”包含这位画家的作品”对输出的平均效应。


13. 延伸阅读 · Further reading

原课阅读与讲座

  • Koh & Liang, Understanding Black-box Predictions via Influence Functions(ICML 2017):arXiv:1703.04730。
  • Ilyas et al., Datamodels: Predicting Predictions from Training Data(ICML 2022):arXiv:2202.00622。
  • Park et al., TRAK: Attributing Model Behavior at Scale(ICML 2023):arXiv:2303.14186。
  • Grosse et al., Studying Large Language Model Generalization with Influence Functions(2023):arXiv:2308.03296。
  • Engstrom et al., Optimizing ML Training with Metagradient Descent(2025):arXiv:2503.13751。
  • Ilyas & Engstrom 等,ICML 2024 教程 Data Attribution at Scale:ml-data-tutorial.org。

slides 里引用的工作

  • Hampel, The Influence Curve and its Role in Robust Estimation(1974)。
  • Ghorbani & Zou, Data Shapley: Equitable Valuation of Data for Machine Learning(2019);Jia et al., Towards Efficient Data Valuation Based on the Shapley Value(2019)。
  • Basu, Pope & Feizi, Influence Functions in Deep Learning Are Fragile(2021)。
  • Worledge et al., Unifying Corroborative and Contributive Attributions in Large Language Models(2023)。
  • Berglund et al., The Reversal Curse: LLMs trained on “A is B” fail to learn “B is A”(2023)。

本讲补充

  • Xia et al., LESS: Selecting Influential Data for Targeted Instruction Tuning(2024)。

和本目录其他课程的联系


14. 下一讲预告 · Next lecture

本讲最后一个演示是一个警告:在验证集上优化得太狠,验证集就不再能代表真正的表现。这其实是一个更大的问题的缩影——评测数据本身也是数据:它怎样构建、会不会泄漏进训练集、标签有多准、多少个样本才够区分两个模型?

第 14 讲:评测数据。 一个好的评测集需要什么(有效性、难度、标签质量、规模与置信区间);测试集污染怎样发生、怎样检测;动态和私有的评测;标签噪声怎样影响排名;评测集同样需要过滤、去重和文档。代码会用 n-gram 重叠检测污染、量化污染对分数的抬高,并计算置信区间和排名的稳定性。

← 返回课程目录