想象你是一家新开张小餐馆的店主老陈。餐馆开在一条热闹的美食街上,可一个月过去了,门口冷冷清清——没人来吃,就没有点评;没有点评,路过的客人更不敢进门。你手里只有一千张印菜单的传单(这就是你全部的“营销预算”),不可能发给街上每个路人。直觉告诉你,与其漫无目的地见人就发,不如观察一下:哪些客人看起来最犹豫?哪些客人像是在替一大帮朋友踩点?把传单精准递给这些人,让他们进门、吃完、写下点评,口碑才能像滚雪球一样转起来。 这就是“冷标注样本处理”要做的事。在 AI 世界里,“顾客点评”就是人工标注的标签,“传单预算”就是有限的标注经费。一个刚立项的模型,手头几乎没有带标签的数据(这就是“冷启动”),工程师们得像老陈一样精明:让模型自己决定“该请谁进门”。这个“主动挑选样本 → 请人标注 → 模型变聪明 → 再挑下一批”的循环,就是主动学习(Active Learning)的核心。而冷标注样本处理,正是这套功夫的起手式——如何在标注预算几乎为零时,用最少的标签撬动最大的模型性能。
对 AI 从业者而言,学会冷标注样本处理,意味着你不再是被动等待“标注好的数据”,而是能主动掌控“用最少的钱训练最好的模型”这项稀缺能力——无论做 NLP、CV 还是工业质检,它都能直接降低数据成本、加速项目落地。
可视化演示
展示哈希表的键值插入、哈希函数映射和链地址法冲突解决过程,支持切换插入与查找模式并调节操作速度。
本节配有交互动效(进入视口后自动加载,约 3KB)。
哈希表插入过程 红色为当前操作桶,粉色为链中已有元素,绿色为查找命中 h(k) = k mod m 调节间隔控制操作速度
冷启动困境
老陈站在店里,看着桌上那一千张传单,心里直打鼓:发给谁?隔壁烧烤店老板给他支了一招——“按门牌号挨家挨户塞就行了呗!”老陈知道这主意不靠谱:整条街三百户人家,挨家发一遍,一半传单会进了垃圾桶,真正愿意来尝鲜的人根本没收到几张。随机采样就是这样一种“挨家发传单”的笨办法:它在无标签的数据池里随便挑样本让人标注,运气好能碰上几个有用的,运气不好标了一百条还是教不会模型。
冷启动的本质是“鸡生蛋”的恶性循环:模型需要标注数据才能学会预测,可它还没学会预测,就没法判断哪些数据值得标注。那么,能不能用一条极小的“种子标注集”先让模型跑起来,让它自己开口说“我想看哪条数据”?这就是主动学习的起点——把“挑样本”的权力从人手里交给模型自己。主动学习框架会维护一个“未标注池”和一个“已标注集”,每一轮都让模型从池子里挑出最该被标注的样本,送去给人工打标签,然后把新标签塞回训练集,让模型长大一点,再去挑下一批。
衡量一个冷启动策略好不好,业界有一个直观的指标——标注效率比:随机采样需要 \(N_{\text{random}}\) 个样本才能达到的效果,主动采样用 \(N_{\text{active}}\) 个就做到了:
老陈想明白了:挨家发传单不叫营销,叫浪费。他决定换一套思路——先观察街上来往的人,再决定把传单递给谁。模型也该如此,先靠极少种子样本站起来,再自己挑食。
- 随机采样的标注量展开\(N_{\text{random}}\) 是不加任何挑选、纯随机标注时需要的样本数。它的特点是“广撒网”,但大量样本信息冗余,教不会模型新东西。
- 主动采样的标注量展开\(N_{\text{active}}\) 是主动学习策略下挑选同样数量的样本后的实际标注数。因为每一条都是“千挑万选”出来的,通常远小于前者。
- 两者相除得到倍数关系效率比数值越大,说明主动挑选越“物超所值”。当 \(E=1\) 时,主动学习和随机采样没区别,策略就失效了。
不确定性查询
老陈发现一个规律:那些在店门口踱步、反复看菜单、又掏出手机查点评的客人,最容易被一张传单打动。为什么?因为他们“心里没谱”——不确定这家店好不好吃,所以外界的任何一点信息都能推动他们做决定。不确定性查询正是抓住了这个心理:一个样本,如果模型对它的预测结果摇摆不定、糊里糊涂,那它带给模型的“信息增量”就最大。
什么叫“模型摇摆不定”?比如手写数字识别,一个样本的预测结果是“有 45% 像 3,有 45% 像 8,剩下 10% 像别的”,模型完全拿不准它是 3 还是 8。这时候只要请人标注一下,模型就能学会一个极具鉴别力的边界。相比之下,一个被模型以 99% 置信度判定为 7 的样本,标了也白标——它早就懂了。熵(Entropy) 是量化这种“糊涂程度”的经典工具,它统计模型在所有类别上的概率分布有多“平均”:
除了熵,工程上还常用边缘采样——只看模型预测概率最高的两个类别,两者差距越小说明越纠结;以及置信度阈值——凡是预测置信度低于某个门槛的样本统统进入待标注队列。老陈心里有了底:传单要发给“站在门口犹豫最久的人”。模型挑样本也一样,先找那些“最没把握”的。
- 取出模型对各类的预测概率对样本 \(x\),模型会输出它属于每个类别 \(i\) 的概率 \(p_i\),比如“45% 像 3、45% 像 8、10% 像别的”。
- 计算每个类别的信息贡献把 \(p_i\) 取自然对数再乘以 \(p_i\)。概率越接近中位数 \(0.5\),这个值的绝对值越大,代表这个类别“搅浑水”的能力越强。
- 加负号让结果为正因为 \(\log p_i \leq 0\),整体乘上负号后,\(H(x)\) 恒为非负,方便比较大小。
- 所有类别求和把每个类别的贡献加总。\(H(x)\) 接近 0 表示模型很确定;\(H(x)\) 达到上限表示模型对每一类都“五五开”。
代表性采样
可老陈很快就遇到了新问题:按“谁最犹豫”来发传单,确实拉来了一批客人,但这些人都是二十来岁的年轻人。口味清淡的老顾客、带着孩子的家庭、嗜辣重口的食客,一个都没进来。这是因为“最犹豫”的客人往往都扎堆在决策边界附近,长得都差不多,标一个就能代表一群——如果把预算全砸在他们身上,其他区域的样本就全被冷落了。
于是老陈又想:能不能在“犹豫的人”之外,再请一些“特别有代表性”的客人?比如街上那个天天跟邻居唠嗑的王大爷,他一个人就认识半条街的人,还知道每个人的口味。请了他,等于一次采访了半个街区。在数据世界里,这种“认识很多人”的样本叫代表性样本——它落在数据分布最稠密的区域,周围有大量相似的邻居,标了它,模型就能推断它周围一大片未标注样本的类别。
量化代表性最常用的方法是密度估计:数一数样本 \(x\) 周围有多少近邻,邻居越多,代表性越强。用 \(K\) 近邻的概念来表达,样本的代表性得分可以写作它到所有邻居相似度的平均值:
老陈的传单策略升级了:一半发给犹豫的人,一半发给王大爷这样的“社区节点”。模型也一样,有了不确定性还不够,还得参考代表性——请一个“认识很多人”的样本,等于同时请了它的一整个圈子。
- 找出样本的 \(k\) 个最近邻用距离度量(如欧氏距离)找到数据池里与 \(x\) 最相近的 \(k\) 个样本,记作 \(\text{NN}_k(x)\)。
- 逐对计算相似度用余弦相似度或高斯核函数计算 \(x\) 与每个邻居 \(x_j\) 的相似度分数,越相似分数越高。
- 求平均值把 \(k\) 个相似度分数加起来除以 \(k\)。得分高的样本说明它身边“人丁兴旺”,标它等于标了一大片。
多样性覆盖
又过了两周,老陈发现一个问题:他确实请了不少“社区节点”,可这些节点彼此也是熟人——王大爷认识的街坊,和李大妈认识的街坊,几乎全是同一拨人!传单发出去了,收获的点评却高度雷同。这就是多样性缺失的代价:如果选出的样本一个比一个相似,那么标注它们获得的信息就严重冗余,等于花钱请同一批人重复回答同一个问题。
多样性覆盖要求选出的这一批样本,彼此之间尽量“不撞脸”。数据版本里怎么做?两个手段:一是相似度去重——候选样本得分再高,如果和已经被选中的某个样本相似度超过阈值,就把它剔除或降权;二是类别配额——预先按类别分配标注名额,比如这一批要标 100 条,每个类别最多占 25 条,防止模型偏科。一个实用的小技巧是批次约束:不要一条一条地挑(那会导致连续选中一堆相似样本),而是每次“成批挑选”,一边挑一边实时更新已选样本集,让后续挑选自动避开“撞脸”的样本。
形式化表述:给定已选样本集 \(S\),新候选样本 \(x\) 的多样性得分定义为它与 \(S\) 中所有样本的最小相似度——离“已选圈子”越远越好:
老陈现在懂了:请客不能只请一个圈子的,川菜、粤菜、甜品、轻食都得照顾到。多样性覆盖让这一批“被请进门的样本”尽可能覆盖整个数据空间的各个角落,不浪费一寸标注预算。
- 扫描已选样本集遍历 \(S\) 中每一个已经被选中、待标注的样本 \(x_s\)。
- 找出最高相似度计算 \(x\) 与所有 \(x_s\) 的相似度,取最大的那个。这个值越大,说明 \(x\) 和已有选择“撞得越狠”。
- 用 1 减去它得到多样性分最高相似度越低,多样性分越高;最高相似度越高,多样性分越低。
融合策略
到了第四周,老陈手里的策略已经有三套了:不确定性高的(犹豫的人)、代表性强的(人脉广的人)、多样性好的(圈子不重样的人)。可传单只有一千张,不可能三个方向各发一千张。现实中的老陈做了个决定:把三个维度按权重打个总分,每一项都评个分,然后加起来排序,选总分最高的进去。这就是主动学习里的融合策略。
在学术与工程实践中,最经典的融合方式是加权评分:给每个候选样本算一个综合得分 \(S(x)\),它同时兼顾不确定性和代表性,再在批次挑选阶段加入多样性约束。一个常见的形式是:
其中 \(U(x)\) 是归一化后的不确定性得分(比如熵),\(R(x)\) 是归一化后的代表性得分,\(\lambda\) 是一个 0 到 1 之间的权重。这里的门道是分工:不确定性得分负责“挑难的”,代表性得分负责“挑典型的”,两者互补。如果只用不确定性,模型会一直盯着决策边界,忽视数据主体;如果只用代表性,模型会把大量标注预算花在早已学会的区域。
老陈最终的三维评分表,跟模型工程师手里的融合打分完全是一个道理:不迷信单一指标,而是让多个策略分工协作,再根据当前阶段动态调整优先级。犹豫的要请,典型的要请,不重样的更要请。
- 归一化各策略得分把熵、代表性、多样性三个指标的原始值各自缩放到同一量纲(比如 0 到 1),否则“熵”动辄十几,“代表性”却只有零点几,加权没有意义。
- 加权求和得到综合分\(\lambda\) 越接近 1,综合分越偏向不确定性;\(\lambda\) 越接近 0,越偏向代表性。
- 按批次加入多样性约束每选中一个样本就把它加入已选集 \(S\),下一个样本的综合分乘以多样性折扣 \((0.5 + 0.5D(x))\),避免连续选中相似样本。
- 排序选前 \(K\) 个把池子里所有样本按最终得分排序,一次性输出前 \(K\) 条送去标注。这就是“成批挑选”,既高效又保证多样性。
闭环验证
又过了两个月,老陈的店口碑终于热起来了。但他发现一件怪事:传单照发、客人照请,小店的口味却好像没什么进步了。后来他想明白了——店里的招牌菜已经基本定型,再请多少客人来试吃,也提不出让他惊艳的新建议了。该收手时就收手。
主动学习同样要面对“何时停止”的问题,这个不是拍脑袋决定的,而是有一套明确的停止准则。最常见的有三种:第一,预算耗尽——标注经费花光了,循环自然终止;第二,性能饱和——连续几轮新增标注后,模型在验证集上的准确率提升小于某个极小阈值(比如 0.5%),说明边际收益已经微乎其微;第三,不确定性枯竭——池子里剩余样本的熵普遍低于某个门槛,说明模型对它们都已胸有成竹。此时应该终止标注,把省下的预算留给下一个项目。
更关键的是,在每一轮循环中,模型并不是推倒重来,而是用增量训练的方式把新标注的样本吸收进已有模型——就像老陈不是每月关店重开,而是不断往菜单上加新菜。整个闭环流程可以概括为:种子训练 → 模型挑样本 → 人工标注 → 增量更新 → 再次挑选。通过这个循环,模型从最初只有十来个标注样本的“冷启动”状态,逐步过渡到覆盖大部分数据分布的“热运行”状态。如果用准确率曲线来刻画这个过程的边际收益:
老陈最后把传单预算砍掉了一半,因为店里的口碑已经足够撑起客源。主动学习项目落地时也一样,越到后期越要克制——懂得何时收手,才是冷标注样本处理最成熟的表现。
- 记录相邻两轮准确率在第 \(t\) 轮和第 \(t-1\) 轮结束后,分别在相同验证集上评测模型准确率 \(\text{Acc}_t\) 与 \(\text{Acc}_{t-1}\)。
- 相减得到边际提升两轮准确率之差就是这一轮新标注样本带来的“性能增量”。
- 与阈值比较触发停止当边际提升小于预设阈值 \(\epsilon\) 时,说明继续标注的性价比已经很低,主动学习循环应停止。
AI 应用场景
工业质检中的缺陷样本标注
阶段:数据标注与管理(冷启动阶段)
解决的问题:某电子产品工厂要训练一个检测 PCB 板焊接缺陷的模型,但工厂历史良品率高达 98%,缺陷样本极其稀少。传统做法是让质检员从十万张图中随机抽图标注,结果抽到的大量是“正常板”,缺陷样本寥寥无几,模型训练效果极差。AI 工程师接入主动学习后,先用少量随机标注图片训练一个弱模型,再由模型从剩余图片中挑出它“最不确定是不是缺陷”的批次图片优先请质检员标注。
具体案例:一家代工厂用上述方案为 PCB 缺陷检测模型标注数据,标注预算从十万张压缩到一万二千张,模型对微小裂纹的召回率提升了 23%。质检员不再面对大片冗余的正常图片,而是被系统引导着只看“模型拿不准”的图,人效升了两倍。
医疗影像辅助诊断的冷启动标注
阶段:数据标注与管理(跨部门协作阶段)
解决的问题:三甲医院放射科要构建肺结节 CT 辅助筛查模型,医院有海量历史 CT 影像,但只有不到 1% 有医生确诊标注。每张 CT 标注需要一位资深放射科医生耗时十五分钟,直接全员标注不现实。采用主动学习后,系统先由算法团队用公开数据集预训练模型,然后让模型筛出“结节概率在 40%-60% 之间”的疑难影像,优先请医生标注;同时通过多样性约束保证每个肺叶区域都有覆盖。
具体案例:某医疗 AI 公司与医院合作,将主动学习嵌入标注工作流。医生打开标注工作站时,系统已排好当天最值得标注的 30 张 CT;运行三个月后,模型对早期微小结节的检出率从 62% 提升至 87%,而医生总标注时长反而减少了 40%。
Python 演示
import numpy as npfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom collections import Counter class KNNClassifier: def __init__(self, k=3): self.k = k self.X_train = None self.y_train = None def fit(self, X, y): self.X_train = np.array(X) self.y_train = np.array(y) def predict_proba(self, X): proba_list = [] for x in X: d = np.linalg.norm(self.X_train - x, axis=1) idx = np.argsort(d)[:self.k] labels = list(self.y_train[idx]) cnt = Counter(labels) total = sum(cnt.values()) proba_list.append([cnt.get(i, 0) / total for i in range(3)]) return np.array(proba_list) def entropy_uncertainty(proba): p = np.clip(proba, 1e-9, 1.0) return -np.sum(p * np.log(p), axis=1) def uncertainty_sampling(model, X_pool): proba = model.predict_proba(X_pool) scores = entropy_uncertainty(proba) return np.argsort(scores)[::-1] def random_sampling(X_pool, seed=42): rng = np.random.default_rng(seed) return rng.permutation(len(X_pool)) def run_round(model, X_pool, y_pool, order, budget): for idx in order[:budget]: new_x = X_pool[idx].reshape(1, -1) new_y = np.array([y_pool[idx]]) model.X_train = np.vstack([model.X_train, new_x]) model.y_train = np.hstack([model.y_train, new_y]) proba = model.predict_proba(X_pool) acc = (proba.argmax(axis=1) == y_pool).mean() return acc def main(): X, y = load_iris(return_X_y=True) X_train, X_pool, y_train, y_pool = train_test_split( X, y, train_size=0.1, stratify=y, random_state=42) model_a = KNNClassifier(k=3) model_a.fit(X_train, y_train) acc_before = (model_a.predict_proba(X_pool).argmax(axis=1) == y_pool).mean() print(f"种子训练集 15 条,初始准确率: {acc_before:.2%}") order_a = uncertainty_sampling(model_a, X_pool) acc_a = run_round(model_a, X_pool, y_pool, order_a, budget=30) print(f"主动学习再标 30 条后准确率: {acc_a:.2%}") model_b = KNNClassifier(k=3) model_b.fit(X_train, y_train) order_b = random_sampling(X_pool) acc_b = run_round(model_b, X_pool, y_pool, order_b, budget=30) print(f"随机采样再标 30 条后准确率: {acc_b:.2%}") if __name__ == "__main__": main()
X_train, X_pool, y_train, y_pool = train_test_split(...)把数据集分成“种子训练集”和“未标注池”,模拟冷启动状态。model.fit(X_train, y_train)用极少种子样本训练 KNN 分类器,此时模型还很“笨”。entropy_uncertainty(proba)计算每个池中样本的熵,熵越高代表模型越没把握。np.argsort(scores)[::-1]按熵降序排列,得到最值得标注的样本索引序列。run_round(model, X_pool, y_pool, order, budget=30)批量挑选前 30 个样本,模拟“送人工标注”并增量加入训练集。model.X_train = np.vstack([model.X_train, new_x])KNN 的“增量训练”就是简单地把新样本追加进训练集并重新预测。proba.argmax(axis=1) == y_pool用精度来度量这轮主动学习后的模型性能。
常见误区
误区反正模型刚开始啥也不会,别折腾了,随机抽几百条数据先标了再说。标注预算充足,不需要挑挑选选,直接一次性把数据都标了最省事。
正解冷启动恰恰是主动学习最关键的阶段。随机抽样在数据分布不均匀时,会把大量预算浪费在冗余样本上。就像老陈把传单挨家挨户发一遍,一半进了垃圾桶。正确的做法是先标少量种子样本,让模型获得“初步判断力”,再由它来引导后续标注的方向。
为何常见:人的直觉是“先凑够数据再优化策略”,但冷标注样本处理的核心恰恰是“先建立反馈,再用反馈指导挑选”——这个逆向思维初学者不容易转过弯来。
误区不确定性采样既然效果这么好,那就每轮都挑熵最大的样本好了,把所有标注预算全砸在疑难样本上。
正解细想一下,如果模型永远只盯着决策边界附近最难的样本,它会对数据分布的主体区域一无所知。就像老陈只请犹豫的客人,结果全是同一类年轻人,口味清淡的老人、带孩子的家庭全被忽略了。不确定性负责“攻坚”,代表性负责“扫盲”,多样性负责“防偏”,三者融合才是完整策略。
为何常见:初学者容易把“熵大 = 信息量大”误解为“熵大 = 永远最优”。但实际上信息量不只来自“难”,还来自“覆盖面”。只攻难点会让模型变成偏科生。
误区既然模型是数据喂出来的,那索性一次性把所有样本全标注了,模型效果一定最好。
正解全量标注在预算充足时确实准确率最高,但代价巨大且收益递减。主动学习的价值在于用一部分标注达到接近全量标注的效果。真正的工程智慧是在性能和成本之间取平衡——当准确率达到业务可接受水平时(比如 90%),继续标注的边际收益已低于标注成本,就应当停止。这就像老陈的店,招牌菜定型后再请多少人试吃,口味也不会突飞猛进了。
为何常见:工程师的本能是“追求最优效果”,但工程实践追求的是“在有限预算下的最优效果”。看到全量标注的准确率更高,就容易忽略它耗费的成本是主动采样的数倍。
面试题
Q1. 主动学习解决的核心问题是什么?
- A.让模型自动生成标注标签
- B.用尽量少的标注换取尽量高的性能← 正确答案
- C.替代人工标注的所有工作
- D.增大模型的训练参数量
答案:B。主动学习的目标是用有限的标注预算挑出最有价值的样本,以最少的人工标注达到较好的模型性能。A 错在主动学习不生成标签,只挑样本送人工标注;C 错在它仍依赖人工标注;D 与标注无关。
Q2. 冷启动阶段最合理的起步方式是什么?
- A.一次性标注全部未标注数据
- B.完全依赖模型自己无监督学习
- C.先标少量种子样本再启动循环← 正确答案
- D.放弃模型训练改用手工规则
答案:C。冷启动起步应先用随机抽取的小批量种子样本让模型获得初步能力,再进入主动学习循环。A 浪费预算;B 无监督无法获得类别标签;D 放弃了机器学习方法本身。
Q3. 熵作为不确定性度量,熵值越大表示什么?
- A.模型对该样本的预测越有把握
- B.模型对该样本的预测越均匀越没底← 正确答案
- C.该样本一定是噪声数据
- D.该样本属于某个特定类别的概率极高
答案:B。熵度量概率分布的离散程度。概率均匀分布在多个类别上时熵最大,说明模型“五五开”,最没把握。A、D 是“很确定”的表现,熵接近 0;C 并非熵的语义。
Q4. 一个 KNN 模型把某样本判为三个类别的概率分别是 0.34、0.33、0.33,它的熵值最接近?
- A.0.1
- B.0.5
- C.1.1← 正确答案
- D.2.5
答案:C。三分类时熵最大值是 ln3 ≈ 1.099,当前概率三分天下,熵接近最大值。选 0.1 对应概率很集中;选 0.5 是概率较偏的情况;选 2.5 超过了三分类熵的理论上限,不可能出现。
Q5. 代表性采样选择样本时主要考察什么?
- A.样本所在区域的样本密度← 正确答案
- B.样本的标注成本高低
- C.样本字段的缺失比例
- D.样本出现的绝对时间先后
答案:A。代表性采样的核心依据是样本落在数据分布稠密区域的程度,密度高、邻居多就代表性高。B 是工程成本因素,C 是数据质量问题,D 与分布无关。
Q6. 下列哪些手段可以有效提升一批标注样本的多样性?
- A.对相似度超阈值的样本去重← 正确答案
- B.按类别分配标注配额← 正确答案
- C.只用置信度最高的一条样本
- D.批次挑选时实时更新已选集合← 正确答案
答案:ABD。相似度去重、类别配额、批次约束(实时更新已选集合)都是标准多样性策略。C 错在“只用一条”舍弃了批次化约束的全局视角,且与多样性无关。
Q7. 融合策略中引入温度调度系数 λ 的目的是什么?
- A.让模型自动调整学习率
- B.动态调节探索与利用的偏好← 正确答案
- C.控制数据增强的强度
- D.加快 GPU 推理速度
答案:B。λ 控制不确定性权重和代表性权重的相对大小:初期调大 λ 偏向探索不确定性样本,后期调小 λ 偏向利用代表性样本。这与学习率、数据增强、推理速度无关。
Q8. 某项目连续三轮主动学习后验证准确率分别提升 1.2%、0.3%、0.1%,此时应如何决策?
- A.继续无限标注直到准确率 100%
- B.判定边际收益递减,触发停止准则← 正确答案
- C.调大标注预算翻倍继续冲刺
- D.随机换一批数据源重新标注
答案:B。三轮边际提升持续衰减且最后一轮仅 0.1%,已低于常见阈值(0.5%),应触发性能饱和停止。A 忽略成本;C 与 D 都没有诊断“边际收益已经枯竭”的根本问题。
Q9. 冷启动困境下,合理的应对策略有哪些?
- A.用公开预训练模型初始化特征← 正确答案
- B.仅标注模型最不确定的一批样本
- C.用少量种子样本获得初步判断力← 正确答案
- D.融合不确定性、代表性与多样性挑选← 正确答案
答案:ACD。预训练初始化、种子训练、融合挑选都是应对冷启动的合理手段。B 错在“仅标注最不确定的一批”忽略了代表性、多样性的价值,容易导致选择偏科。
Q10. 以下关于主动学习闭环的表述,正确的有哪些?
- A.准确性提升低于阈值时应触发停止← 正确答案
- B.预算耗尽必须先终止项目重新规划
- C.增量训练让模型每轮吸收新标注← 正确答案
- D.冷启动到热运行是渐进过渡过程← 正确答案
答案:ACD。性能饱和停止准则是标准做法;增量训练是每轮更新模型的核心机制;冷启动到热运行确实渐进过渡。B 错在“先终止项目”——预算耗尽只是结束标注循环,模型已经可用,无需推翻项目重来。