ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

优先回放不是多看难题:采样概率变了,训练目标也会悄悄变

优先回放不是多看难题:采样概率变了,训练目标也会悄悄变

训练日志里有一条轨迹反复出错,于是把它放进高优先级回放池。这个做法可能有效,也可能把整个批次拉向一小类异常数据。问题不只是“该不该重看”,还包括重看以后希望优化哪个分布。

Prioritized Experience Replay 是 2015 年提出的经验回放方法,并非今年新出现的大模型技巧。它讨论了非均匀抽样及偏差修正。把思路搬到推理轨迹之前,还要处理策略版本、奖励有效期和重复轨迹;旧策略下生成的数据不能天然当成当前策略的无偏样本。

设缓冲区有 N 个样本,优先级为 p_i,抽样概率为 P(i)=p_i^α/Σp_j^α。若目标仍是缓冲区上的均匀平均,完整的重要性权重为 1/(N·P(i))。常见的 β 次幂修正,在 β<1 时只做部分修正;再把权重除以最大值,又会改变整体尺度。这些选择要与学习率、损失归约方式一起看。

import math priority = [1.0, 1.0, 2.0, 4.0] losses = [1.0, 2.0, 4.0, 8.0] total = math.fsum(priority) probs = [p / total for p in priority] n = len(probs) weights = [1.0 / (n * p) for p in probs] uniform_target = math.fsum(losses) / n biased_expectation = math.fsum(p * x for p, x in zip(probs, losses)) corrected_expectation = math.fsum( p * w * x for p, w, x in zip(probs, weights, losses)) assert probs == [0.125, 0.125, 0.25, 0.5] assert math.isclose(corrected_expectation, uniform_target) assert not math.isclose(biased_expectation, uniform_target) print("uniform=", uniform_target) print("prioritized=", biased_expectation) print("corrected=", corrected_expectation)

程序算的是有限池的精确期望,避开随机抽样误差。均匀目标为 3.75,直接按优先级平均为 5.375,完整修正后回到 3.75。这不能推出学习一定更快;实际随机梯度的方差、估计优先级的噪声和数据时效都会影响训练。

尤其不要把“长回答”“高 token 数”“被模型自己打低分”直接等同于有价值难例。前者可能只是冗长,后者可能是评分器偏好。可按错误类型、题目来源和生成策略分桶,限制单一轨迹的回放占比,同时保留均匀采样通道。最终在未进入回放池的独立集合上判断收益。

这个例子没有实现完整离策略校正,没有接入语言模型,也没有执行强化学习更新。它只证实一件可以精确算清的事:抽样概率改变后,未经修正的平均损失通常不再代表原来的均匀目标。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进