赛季中途,球队表现起伏不定,主教练只剩下最后一次试训新球员的名额。候选名单上躺着几十个陌生的名字,每个球员来了之后可能踢出完全不同的风格:有些人适合打技术流,有些人更像力量型。教练不想只挑“看起来最弱”或“看起来最有问题”的人,他想挑一个——上场之后能让全队战术体系动摇最大的人。因为变化越大,说明球队过去对他的判断越可能被颠覆,试训获得的信息也越多。 这就是主动学习中“期望改变策略”(Expected Change)的核心直觉:不选模型当前最不确定的样本,而是选标注后最可能让模型本身发生剧烈改变的样本。模型就像那套战术体系,每个未标注样本像一个待试训的球员,而“改变量”就是把这个球员纳入体系后,全队配合方式被撬动的幅度。本文将沿着“为什么看变化→怎么算变化→用梯度快速估算→与误差减少的关系→算不动怎么办→怎么近似算”这条路线,用足球教练的视角帮你彻底搞懂这个策略。

岗位关联

对算法工程师而言,期望改变策略是主动学习从“碰运气”走向“预算内最优”的进阶工具。理解它能让你在标注预算有限时,把每一份人力花在真正能撬动模型质量的样本上,直接提升样本选择精度。

目录
  1. 可视化演示
  2. 一、核心原理:选“最能撬动模型”的样本
  3. 二、改变量计算:把“变化”变成可计算的数字
  4. 三、梯度变化度量:用“杠杆系数”快速估算
  5. 四、与期望误差减少的关系:变化大 ≠ 变好
  6. 五、计算复杂度:全场模拟的昂贵代价
  7. 六、近似计算:聪明的偷懒艺术
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示预测模型会怎么变的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

预测模型会怎么变:期望改变 期望改变策略的核心动机与查询逻 期望模型改变量的计算思路与流程 核心机制可视化 预测模型会怎么变整体架构与关键组件

一、核心原理:选“最能撬动模型”的样本

教练站在战术板前,面前是一沓试训球员的简历。有人推荐“这小子盘带最差,肯定问题最大”,但教练摇摇头——盘带差不一定说明问题,他想要的是:让这个人上场踢一场,全队的阵型、跑位、攻防转换都会被彻底推翻重来的人。因为只有巨大的战术动荡,才能暴露现有体系的盲区。这就是期望改变策略的第一性原理:查询的目标不是“样本难不难”,而是“标注它之后,模型会变多少”。

在主动学习的每一轮循环里,模型 \(f_\theta\) 像一个已经磨合完毕的战术体系,未标注池 \(\mathcal{U}\) 是一批等待试训的球员。传统的“不确定性采样”只看球员简历上的疑点(当前预测的置信度低),而期望改变策略要预测:把这位球员放进阵容后,战术板会被改写成什么样。改写幅度越大,这位球员带来的新信息越多。

形式上,期望改变策略为每个候选样本 \(\Delta(x, y)\) 表示“若标注得知其标签为 \(y\),模型被改变的程度”,再按模型当前对标签的猜测概率加权:

这个公式的核心气魄在于:它不满足于“猜猜看”,而是对每一种可能的结果都预先推演一遍“模型会怎么变”。回到教练视角,这种策略选出的球员也许不是简历上最弱的,但一定是最可能让教练推翻自己战术认知的人——而这正是主动学习想要的“信息量”。

xEC∗=arg⁡max⁡x∈U∑y∈YPθ(y∣x)⋅Δ(x,y)\displaystyle x^*_{\text{EC}} = \arg\max_{x \in \mathcal{U}} \sum_{y \in \mathcal{Y}} P_\theta(y \mid x) \cdot \Delta(x, y)
通俗地说:对每个候选球员,先猜测他可能是哪种风格(每种风格有个概率),再估算“如果是这种风格,球队战术会变多少”,最后按概率加权求和,选总和最大的那个人。
  1. 候选空间\(\displaystyle \arg\max_{x \in \mathcal{U}}\) 表示在整个未标注池里找一个使目标最大的样本 \(x\),就像教练从所有候选球员中挑一个。
    arg⁡max⁡x∈U\displaystyle \arg\max_{x \in \mathcal{U}}
  2. 标签加权\(\displaystyle \sum_{y \in \mathcal{Y}} P_\theta(y \mid x)\) 对每个可能标签 \(y\) 按当前模型猜测的概率加权——球员是技术流的概率乘上技术流的改变量,力量流的概率乘上力量流的改变量,加起来。
    ∑y∈YPθ(y∣x)\displaystyle \sum_{y \in \mathcal{Y}} P_\theta(y \mid x)
  3. 条件概率\(\displaystyle P_\theta(y \mid x)\) 是当前模型对样本 \(x\) 属于类别 \(y\) 的置信度,等于教练根据简历对球员风格的初步判断。
    Pθ(y∣x)\displaystyle P_\theta(y \mid x)
  4. 改变度量\(\displaystyle \Delta(x, y)\) 是“若真实标签为 \(y\),模型改变多少”——由下一节具体定义,可以是参数改变量或输出改变量。
    Δ(x,y)\displaystyle \Delta(x, y)
  5. 最终选择\(\displaystyle x^*_{\text{EC}}\) 是让加权改变总量最大的样本,即教练拍板要试训的那个人。
    xEC∗\displaystyle x^*_{\text{EC}}

二、改变量计算:把“变化”变成可计算的数字

教练决定量化“战术变化”。他的做法是:假设这位球员是某种风格,让他和现有主力合练一场,然后对比训练前后全队每个位置的跑位图,把所有差异加起来。放到模型里,这个“合练”就是一次重训练,而“跑位图的差异”就是模型改变量。

最直接的改变量定义是参数改变幅度:重训前后的模型参数向量之间的距离 \(\|\theta' - \theta\|\)。但参数改变有时过于“全局”,实践中更常用的是输出改变量——在保留池 \(\mathcal{P}\)(一批代表性样本,可以就是未标注池本身)上,比较训练前后模型预测输出的平均差异:

教练发现,这套“合练对比法”虽然准确,但代价极高——每一轮试训都要重训一次全队。于是他想:有没有更省力的办法,不看全场跑位,只看这位球员的“杠杆系数”?这就引出了梯度。

Δ(x,y)=1∣P∣∑x′∈P∥fθ′(x′)−fθ(x′)∥\displaystyle \Delta(x, y) = \frac{1}{|\mathcal{P}|} \sum_{x' \in \mathcal{P}} \left\| f_{\theta'}(x') - f_\theta(x') \right\|
这个公式在问:把新样本 \(x\) 以标签 \(y\) 加入训练后,模型对老样本们的“看法”平均改变了多少。改变得越普遍越剧烈,说明这个新样本带来的认知冲击越大。
  1. 保留池\(\displaystyle \frac{1}{|\mathcal{P}|}\sum_{x' \in \mathcal{P}}\) 表示对保留池中每个旧样本取平均,相当于教练把所有主力球员的跑位变化都统计一遍再取平均。
    1∣P∣∑x′∈P\displaystyle \frac{1}{|\mathcal{P}|} \sum_{x' \in \mathcal{P}}
  2. 训练前后输出\(\displaystyle f_{\theta'}(x')\) 是加入新样本重训后的模型输出,\(\displaystyle f_\theta(x')\) 是原模型输出,两者之差刻画“看法变了多少”。
    fθ′(x′)−fθ(x′)\displaystyle f_{\theta'}(x') - f_\theta(x')
  3. 范数取大小\(\displaystyle \left\| \cdot \right\|\) 把差异向量折叠成一个非负数值,忽略方向只看幅度——就像只看跑位移动了几米,不管往左还是往右。
    ∥fθ′(x′)−fθ(x′)∥\displaystyle \left\| f_{\theta'}(x') - f_\theta(x') \right\|
  4. 新参数\(\displaystyle \theta'\) 是把 \((x, y)\) 加入训练集重训后的新参数,是整个改变量的源头。
    θ′\displaystyle \theta'

三、梯度变化度量:用“杠杆系数”快速估算

教练想偷个懒。他发现,虽然不能预知球员上场后的实际化学反应,但可以看他简历里的一个关键指标:他在战术板上每挪动一步,全队有多少个位置需要跟着动。这个“连带反应系数”如果极大,说明他一旦融入,体系必然剧烈重组。对模型来说,这个系数就是梯度。

梯度 \(\nabla_\theta \ell(x, y; \theta)\) 刻画的是:损失函数对参数的敏感方向。如果某个样本的损失梯度范数很大,意味着把它纳入训练后,参数将被大力推离当前位置——这正是“模型改变”的一阶近似。于是得到著名的 EGL(Expected Gradient Length,期望梯度长度) 策略:

教练满意地发现,看“杠杆系数”比打完整场训练赛快太多了。但他也隐约意识到:杠杆大不等于球队变强——一个球员可能让全队阵型大乱,但越乱越输球。这就引出了期望改变与“变好”之间的微妙关系。

xEGL∗=arg⁡max⁡x∈U∑y∈YPθ(y∣x)⋅∥∇θℓ(x,y;θ)∥\displaystyle x^*_{\text{EGL}} = \arg\max_{x \in \mathcal{U}} \sum_{y \in \mathcal{Y}} P_\theta(y \mid x) \cdot \left\| \nabla_\theta \ell(x, y; \theta) \right\|
用“杠杆系数”代替“全场模拟”:对每个候选球员,把“他是技术流/力量流”的两种猜测按概率加权,再乘上各自的杠杆系数,选杠杆期望最大的那个。
  1. 梯度运算符\(\displaystyle \nabla_\theta\) 表示对参数 \(\theta\) 求偏导,输出一个与参数同形状的向量,指明“增大哪个参数会让损失升得最快”。
    ∇θ\displaystyle \nabla_\theta
  2. 损失函数\(\displaystyle \ell(x, y; \theta)\) 是模型在样本 \((x, y)\) 上的损失,相当于“这位球员按这种风格踢一场的失误数”。
    ℓ(x,y;θ)\displaystyle \ell(x, y; \theta)
  3. 范数\(\displaystyle \left\| \nabla_\theta \ell \right\|\) 把梯度向量压缩成一个标量,即“杠杆系数”——参数被推动的总幅度。
    ∥∇θℓ(x,y;θ)∥\displaystyle \left\| \nabla_\theta \ell(x, y; \theta) \right\|
  4. 概率加权\(\displaystyle \sum_{y} P_\theta(y \mid x)\) 仍是对可能标签加权,与第一节公式结构一致,区别只在于把 \(\Delta(x,y)\) 替换成了梯度的范数。
    ∑y∈YPθ(y∣x)\displaystyle \sum_{y \in \mathcal{Y}} P_\theta(y \mid x)
  5. 选择规则\(\displaystyle x^*_{\text{EGL}}\) 表示选择加权梯度范数最大的样本,它不需要任何重训,只需一次前向和反向传播。
    xEGL∗\displaystyle x^*_{\text{EGL}}

四、与期望误差减少的关系:变化大 ≠ 变好

球队顾问提了个尖锐的问题:“你要的是变化最大,但变化最大不一定是变好。万一这位球员让全队攻防体系崩溃呢?我们真正该关心的是引入他之后,球队的失球能不能变少。”这正是另一个经典策略——期望误差减少(Expected Error Reduction)——的出发点:选择能让重训后模型在未标注池上的期望误差最小的样本。

期望误差减少的目标写成:

期望改变与期望误差减少并非水火不容:在一阶近似下,让模型输出产生大改变的方向,往往也正是能让损失显著下降的方向;信息论视角下两者都在衡量“这个样本带来的信息量”。但它们有本质区别——期望改变只关心“动得多不多”,期望误差减少关心“有没有变好”。一个梯度极大的离群点可能让模型剧烈震动却毫无增益,这正是下一节要面对的现实难题。

xEER∗=arg⁡min⁡x∈U∑y∈YPθ(y∣x)⋅∑x′∈Uℓ(x′,y^′;θ′)\displaystyle x^*_{\text{EER}} = \arg\min_{x \in \mathcal{U}} \sum_{y \in \mathcal{Y}} P_\theta(y \mid x) \cdot \sum_{x' \in \mathcal{U}} \ell\left(x', \hat{y}'; \theta'\right)
它问的不是“模型会变多少”,而是“模型会变好多少”。一个是幅度,一个是方向;幅度大可能朝坏方向变,方向好但不一定幅度大。
  1. 求最小\(\displaystyle \arg\min_{x \in \mathcal{U}}\) 表示选择让后续误差最小的样本,与期望改变的 \(\arg\max\) 正好相反。
    arg⁡min⁡x∈U\displaystyle \arg\min_{x \in \mathcal{U}}
  2. 对标签加权\(\displaystyle \sum_{y} P_\theta(y \mid x)\) 同样需要对候选标签加权——因为试训结果未知,只能按概率期望。
    ∑y∈YPθ(y∣x)\displaystyle \sum_{y \in \mathcal{Y}} P_\theta(y \mid x)
  3. 重训后误差\(\displaystyle \sum_{x' \in \mathcal{U}} \ell(x', \hat{y}'; \theta')\) 是重训后模型在整个未标注池上的累积损失,\(\hat{y}'\) 是重训模型对 \(x'\) 的预测。
    ∑x′∈Uℓ(x′,y^′;θ′)\displaystyle \sum_{x' \in \mathcal{U}} \ell\left(x', \hat{y}'; \theta'\right)
  4. 参数更新\(\displaystyle \theta'\) 仍是加入新样本重训后的参数,但这里它的好坏是用“全队后续失误总量”来评价的。
    θ′\displaystyle \theta'

五、计算复杂度:全场模拟的昂贵代价

教练如果真的对每个候选球员都打一场完整训练赛来测变化,会发现时间根本不够用:几十个候选 × 每种可能风格 × 全场攻防演练,一场赛季还没打完人就累垮了。期望改变策略的精确计算同样面临三重乘法式的昂贵代价。

设未标注池大小为 \(|\mathcal{U}|\)、类别数为 \(K\)、单次模型训练耗时为 \(T_{\text{train}}\),则一次精确查询的总开销约为:

面对这种开销,纯粹的期望改变策略在大规模场景下几乎不可行。教练意识到,他需要在“精确但昂贵”和“粗糙但快速”之间做取舍——这正是近似计算登场的理由。

Tquery=O(∣U∣×K×Ttrain)\displaystyle T_{\text{query}} = O\left( |\mathcal{U}| \times K \times T_{\text{train}} \right)
每一次主动学习查询,都要对所有候选样本、所有可能标签分别重训一次模型。候选池越大、类别越多、模型越重,开销呈乘积式爆炸。
  1. 候选遍历\(\displaystyle |\mathcal{U}|\) 是未标注池大小——每个候选样本都要过一遍,就像教练要挨个评估所有试训球员。
    ∣U∣\displaystyle |\mathcal{U}|
  2. 标签枚举\(\displaystyle K\) 是类别数,每个候选样本又要按每个可能标签各“试训”一次。
    K\displaystyle K
  3. 重训成本\(\displaystyle T_{\text{train}}\) 是单次训练耗时,模型越深、数据越多,这个数越大。
    Ttrain\displaystyle T_{\text{train}}
  4. 乘积叠加\(\displaystyle O(|\mathcal{U}| \times K \times T_{\text{train}})\) 表示三者相乘——三项成本叠加,任何一项变大都会让总开销线性恶化。
    O(∣U∣×K×Ttrain)\displaystyle O\left( |\mathcal{U}| \times K \times T_{\text{train}} \right)

六、近似计算:聪明的偷懒艺术

教练最终采用了“聪明偷懒”的方案:不跑完整场训练赛,而是让球员做几组折返跑,用短距离冲刺的表现推测他的全场影响力。近似计算的思路完全一致——用局部、采样、单步的手段逼近真实的模型改变量。

最常用的三个近似手段:标签采样(枚举太多种标签,只采样少数几个最可能的)、单步梯度近似(不重训到收敛,只沿着梯度走一步)、局部线性化(假设损失函数在当前位置附近近似线性/二次,直接用切线代替完整曲线)。综合起来:

教练最终用“折返跑测试”完成了对所有候选球员的快速筛选,选出了那位最可能撼动战术体系的新人。期望改变策略的灵魂就在这种取舍之间:它追求的是“最值得被标注的样本”,而近似计算让它从理论走进工程实践,成为主动学习工具箱里一把锋利的手术刀。

θ′≈θ+η ∇θℓ(x,y;θ),Δ(x,y)≈∥∇θℓ(x,y;θ)∥\displaystyle \theta' \approx \theta + \eta\, \nabla_\theta \ell(x, y; \theta), \qquad\Delta(x, y) \approx \left\| \nabla_\theta \ell(x, y; \theta) \right\|
用“走一步”代替“跑完全程”:既然目标是看参数被推多远,那就只算第一步的推力大小,并用它作为全程改变量的替身。实践中还可以再叠加少量标签采样,进一步压低开销。
  1. 单步更新\(\displaystyle \theta' \approx \theta + \eta \nabla_\theta \ell\) 用一次梯度下降近似重训结果,\(\eta\) 是学习率,相当于只练一组折返跑就预估全场影响力。
    θ+η ∇θℓ(x,y;θ)\displaystyle \theta + \eta\, \nabla_\theta \ell(x, y; \theta)
  2. 学习率\(\displaystyle \eta\) 控制单步移动的距离,是近似中的超参数,太大或太小都会让估计失真。
    η\displaystyle \eta
  3. 改变量替代\(\displaystyle \Delta(x, y) \approx \left\| \nabla_\theta \ell \right\|\) 用梯度的范数直接近似真实改变量,这就是上一节的 EGL 策略。
    ∥∇θℓ(x,y;θ)∥\displaystyle \left\| \nabla_\theta \ell(x, y; \theta) \right\|
  4. 近似符号\(\displaystyle \approx\) 提醒我们这是估算而非精确值——在样本远离当前模型认知区时误差可能变大。
    ≈\displaystyle \approx

AI 应用场景

医学影像病灶筛选

阶段:数据标注与采集

解决的问题:放射科专家时间宝贵,成百上千张未标注影像中只有极少数是真正的疑难病灶。传统的随机抽样或不确定性采样会浪费大量专家精力在普通影像上;期望改变策略可以预先估算“标注哪张片子会让诊断模型参数变化最大”,优先把这些高影响片子送给专家。

具体案例:某三甲医院在训练肺结节检测模型时,用 EGL 策略从 1.2 万张未标注 CT 影像中每轮选出 50 张“梯度杠杆”最大的片子交医生标注。三轮回合后,模型在保留测试集上的敏感度比随机采样提高了约 9 个百分点,而专家标注量只有原来的三分之一。

客服意图分类语料扩充

阶段:模型迭代与数据回流

解决的问题:智能客服的意图分类模型上线后会收到大量用户新问法,但这些问法大多与已有语料重复,人工标注回报率低。期望改变策略可以从用户日志的未标注池中挑出“让意图分类器语义边界变化最大”的句子,交给业务标注团队,避免在重复语料上浪费人力。

具体案例:某电商平台的智能客服团队每月从 50 万条用户会话中抽样 2000 条,用 EGL 打分排序后只标注前 300 条。两个季度后,意图分类模型的零样本泛化准确率从 71% 提升到 83%,且新意图的发现速度比人工随机翻日志快了近一倍。

自动驾驶边缘场景帧抽取

阶段:数据闭环与模型训练

解决的问题:自动驾驶路采数据中 95% 以上是晴朗城市道路的重复帧,而真正会改变感知模型认知的边缘场景(极端光照、罕见交通参与物)占比极低。期望改变策略可从海量路采视频帧中筛选出让目标检测模型梯度变化最大的关键帧,显著压缩数据回传和标注成本。

具体案例:某自动驾驶公司在地图车队回传的 80 万帧数据上运行 EGL 预筛选,只保留 3 万帧送标注。模型在雨夜、逆光等长尾场景下的检测召回率提升 12%,而标注预算仅为原来的 1/10。

Python 演示

python75 行
import numpy as np  def make_pool(n=400):    rng = np.random.RandomState(42)    X = rng.randn(n, 2)    y = (X[:, 0] * 1.0 + X[:, 1] * 0.8 + X[:, 0] * X[:, 1] > 0).astype(int)    y = np.where(y == 0, -1, 1)    return X, y  class LogisticEGL:    def __init__(self, lr=0.1, iters=20):        self.lr = lr        self.iters = iters        self.w = None     def fit(self, X, y):        Xb = np.hstack([X, np.ones((X.shape[0], 1))])        self.w = np.zeros(Xb.shape[1])        for _ in range(self.iters):            p = self._prob(Xb)            grad = Xb.T @ (p - (y > 0).astype(float)) / len(y)            self.w -= self.lr * grad        return self     def _prob(self, Xb):        z = Xb @ self.w        return 1.0 / (1.0 + np.exp(-z))     def predict(self, X):        Xb = np.hstack([X, np.ones((X.shape[0], 1))])        return np.where(self._prob(Xb) > 0.5, 1, -1)     def egl_score(self, X_pool):        Xb = np.hstack([X_pool, np.ones((X_pool.shape[0], 1))])        p = self._prob(Xb)        scores = []        for i in range(X_pool.shape[0]):            grads = []            for yc in [0.0, 1.0]:                diff = (p[i] - yc) * Xb[i]                grads.append(np.linalg.norm(diff))            scores.append(p[i] * grads[1] + (1 - p[i]) * grads[0])        return np.array(scores)  def active_loop(rounds=8):    X, y = make_pool()    idx = np.arange(len(X))    rng = np.random.RandomState(0)    egl_labeled = rng.choice(idx, 4, replace=False)    rnd_labeled = egl_labeled.copy()    pool = np.setdiff1d(idx, egl_labeled)    acc_egl, acc_rnd = [], []    for _ in range(rounds):        m1 = LogisticEGL().fit(X[egl_labeled], y[egl_labeled])        acc_egl.append(np.mean(m1.predict(X) == y))        m2 = LogisticEGL().fit(X[rnd_labeled], y[rnd_labeled])        acc_rnd.append(np.mean(m2.predict(X) == y))        if len(pool) == 0:            break        s = m1.egl_score(X[pool])        pick_egl = pool[np.argmax(s)]        pick_rnd = rng.choice(pool)        egl_labeled = np.concatenate([egl_labeled, [pick_egl]])        rnd_labeled = np.concatenate([rnd_labeled, [pick_rnd]])        pool = np.setdiff1d(pool, [pick_egl, pick_rnd])    return acc_egl, acc_rnd  if __name__ == "__main__":    a_egl, a_rnd = active_loop(rounds=8)    print("EGL acc:", [round(v, 3) for v in a_egl])    print("RND acc:", [round(v, 3) for v in a_rnd])
目的:在合成二分类数据上实现期望梯度长度(EGL)查询策略,对照随机采样,展示主动学习选样本对模型精度的提升。
  1. y = np.where(y == 0, -1, 1)把标签转为 {-1, +1},方便逻辑回归训练和梯度计算。
  2. p = self._prob(Xb)计算每个样本属于正类的概率,这是后续梯度打分的基础。
  3. grad = Xb.T @ (p - (y > 0).astype(float)) / len(y)逻辑回归的解析梯度:预测概率与真实目标的偏差乘以特征。
  4. diff = (p[i] - yc) * Xb[i]对候选样本在假设标签 yc 下计算损失梯度,这正是 EGL 的核心“杠杆系数”。
  5. scores.append(p[i] * grads[1] + (1 - p[i]) * grads[0])按模型当前预测的概率对两种标签下的梯度范数加权,得到期望梯度长度。
  6. pool = np.setdiff1d(pool, [pick_egl, pick_rnd])每轮选完后从池中移除被选样本,保证两种策略使用相同的数据预算。
  7. acc_egl.append(np.mean(m1.predict(X) == y))用全量数据评估当前模型精度,观察主动学习每轮选点带来的提升。

常见误区

误区“EGL 选梯度范数最大的样本,那选出来的肯定都是模型分不清的疑难样本吧?我看那些靠近决策边界的、置信度很低的,应该就是它最爱选的。”

正解梯度范数大只代表“这个样本对参数的敏感度高”,并不等价于“模型对它不确定”。一个模型高度自信的样本也可能拥有较大的梯度范数——比如位于边界附近但朝向明确、又远离其他训练点的样本。EGL 的目标是“变化最大”,不是“最不确定”。二者有时重合,但本质是两种不同的信息量度量。

为何常见:因为不确定性采样是最先接触的主动学习策略,很多人习惯把“样本价值”等同于“模型犹豫程度”,于是默认 EGL 只是换了个方式找难样本。实际上 EGL 衡量的是“带动模型改变的能力”,而不是“模型搞不定它的程度”。

误区“期望改变是选让模型变化最大的样本,变化大自然让模型进步大,那它和期望误差减少就是一回事吧?”

正解变化幅度与变化方向是两回事。一个样本可以让模型参数剧烈震动,但可能把决策边界推向错误方向,导致保留池误差不降反升。期望改变只关心“动得多不多”,期望误差减少关心“有没有变好”。在损失面近似二次、模型变化方向恰好指向更优区域时,二者才近似等价,但离群点和噪声标签会迅速拉开它们的差距。

为何常见:人的直觉里“变化”天然带有“更新、进步”的褒义,容易忽略变化既可能变好也可能变坏。加上一阶近似下两者确有联系,就更让人误以为它们目标相同。

误区“既然要求梯度范数,那我对每个未标注样本直接取它梯度向量的长度,选最大的,不就行了吗?为什么还要对标签做加权求和?”

正解样本的真实标签未知,梯度长什么样取决于我们假设它属于哪一类。同一个样本,假设它是正类时梯度可能很大,假设它是负类时梯度可能很小。EGL 必须用模型当前预测的 \(P_\theta(y|x)\) 对不同标签下的梯度范数加权求期望,而不是只看某个标签下的最大值。否则会把那些“只在极端假设下才大”的样本误判为高价值样本。

为何常见:因为实现时“对每个样本算一个梯度”听上去很自然,初学者容易忽略标签是个随机变量,需要按概率加权。这是从“公式印象”到“代码实现”之间最容易踩的坑。

误区“EGL 用一次反向传播就能算,还重训什么?精确的期望改变又慢又费资源,直接全面用近似不就好了吗?”

正解EGL 是一阶近似,本质假设“单步梯度方向能代表整个重训过程的变化”。当样本对模型的影响高度非线性、或损失面在当前位置附近弯曲剧烈时,单步近似的误差会很大。精确重训式的期望改变虽然有 \(O(|\mathcal{U}| \times K \times T)\) 的开销,但在小规模、高精度要求、或作为离线评估基准时仍不可替代。实践中通常是“近似做初筛 + 精确算精选”的搭配。

为何常见:因为我们倾向用“快不快”来评判方法优劣,而忽略“准不准”在特定场景下的价值。近似与精确不是替代关系,而是成本与收益的权衡。

面试题

Q1. 期望改变策略选择样本的核心标准是:

单选题 · easy

  • A.模型预测置信度最低的样本
  • B.标注后使模型改变最大的样本← 正确答案
  • C.距离决策边界最远的样本
  • D.类别分布最均衡的样本

答案:B。期望改变策略的出发点就是“选标注后最让模型动摇的样本”,B 正确。A 是不确定性采样,C 是置信度优先的相反思路,D 与数据分布有关但并非本策略的查询目标。

Q2. 计算期望模型改变量时,对每个候选样本的正确做法是:

单选题 · easy

  • A.只取最高置信度标签对应的改变量
  • B.按标签后验概率加权平均各标签下的改变量← 正确答案
  • C.只用真实标签计算改变量
  • D.对所有标签取算术平均即可

答案:B。真实标签未知,必须按模型当前的 \(P_\theta(y|x)\) 对各标签下的改变量加权求和。A 丢掉了低概率标签的信息,C 在查询时拿不到真实标签,D 忽略了标签概率的相对权重。

Q3. EGL 策略用下列哪一项近似模型的改变量:

单选题 · mid

  • A.损失函数的梯度范数← 正确答案
  • B.参数的二阶导数迹
  • C.预测概率的信息熵
  • D.输出分布的方差

答案:A。EGL(期望梯度长度)的核心就是用 \(\|\nabla_\theta \ell(x,y;\theta)\|\) 作为模型改变的一阶近似,A 正确。熵与方差刻画的是不确定性,二阶导数属于曲率信息,都不是 EGL 的度量。

Q4. 若将期望改变量定义为“训练前后模型在保留池上的输出差异”,其数学形式是:

单选题 · mid

  • A.对保留池样本取训练前后模型输出的平均绝对差← 正确答案
  • B.对保留池标签计算互信息
  • C.计算保留池损失函数的期望
  • D.计算决策边界的曲率变化

答案:A。输出差异型改变量就是 \(\frac{1}{|\mathcal{P}|}\sum_{x'}\|f_{\theta'}(x')-f_\theta(x')\|\),A 正确。B、C、D 分别是信息论、误差期望和几何度量,与“输出变化平均差”的定义不符。

Q5. 期望改变策略精确计算开销大的原因包括:

多选题 · mid

  • A.需要遍历全部未标注样本← 正确答案
  • B.对每个样本要枚举所有可能标签← 正确答案
  • C.每轮查询后需要重训模型← 正确答案
  • D.无需任何矩阵运算

答案:ABC。精确计算要对每个未标注样本、每个可能标签分别做一次重训模拟,三者相乘构成 \(O(|\mathcal{U}| \times K \times T)\) 的复杂度,A、B、C 都正确。D 与事实相反,完整重训涉及大量矩阵运算。

Q6. 期望改变与期望误差减少的主要区别是:

单选题 · mid

  • A.两者目标完全相同
  • B.前者关注模型变化幅度,后者关注泛化误差下降← 正确答案
  • C.前者是后者的精确计算版本
  • D.二者在数学上无任何关联

答案:B。期望改变度量“动得多不多”,期望误差减少度量“变好多少”。方向与幅度是两个维度,B 正确。A 和 C 混淆了两者的差异,D 忽略了它们在一阶近似和信息增益视角下的联系。

Q7. 单步梯度近似 \(\theta' \approx \theta + \eta \nabla_\theta \ell(x,y;\theta)\) 的本质是:

单选题 · hard

  • A.精确重训到收敛
  • B.对训练过程做局部线性化← 正确答案
  • C.蒙特卡洛标签采样
  • D.贝叶斯后验采样

答案:B。用一次梯度步长代替完整训练过程,相当于假设损失面在当前位置附近近似线性,属于局部线性化近似,B 正确。A 是精确做法,C 是标签采样策略,D 是贝叶斯方法,都不符合单步梯度的思想。

Q8. 以下哪些属于期望改变策略的常用近似或优化手段:

多选题 · hard

  • A.采样少数标签代替全枚举← 正确答案
  • B.用信息熵直接替代梯度计算← 正确答案
  • C.单步梯度更新代替全程重训← 正确答案
  • D.对每个样本做十折交叉验证

答案:ABC。标签采样降低枚举成本(A),单步梯度降低重训成本(C),熵替代梯度是启发式近似(B),三者都是常见做法。D 的十折交叉验证只会让开销成倍增加,不是近似手段。

Q9. 与“不确定性采样”相比,期望改变策略的独特之处是:

单选题 · easy

  • A.直接度量标注后对模型的影响← 正确答案
  • B.不需要任何模型前向计算
  • C.只关注当前预测的置信度
  • D.完全忽略可能标签的概率

答案:A。不确定性采样只看当前预测的置信度,而期望改变显式建模“标注后模型会怎么变”,A 正确。计算仍需前向/反向传播,B 错;C 恰恰是不确定性采样的特征;D 与期望改变公式中概率加权的要求相反。

Q10. 假设未标注池 1000 个样本,二分类问题,单次重训需 1 秒,则精确期望改变单次查询约耗时:

单选题 · hard

  • A.约 1 秒,只需重训一次
  • B.约 1000 秒,遍历候选即可
  • C.约 2000 秒,还需枚举标签← 正确答案
  • D.无法估算

答案:C。对每个候选样本都要枚举两个标签并分别估算重训改变,总开销 \(1000 \times 2 \times 1 = 2000\) 秒,C 正确。A 忽略了遍历,B 遗漏了标签枚举,D 在给定条件下可以明确估算。