[错误] MIN_ADAPTIVE_BASELINE 取值未针对 v2.0.7 标准化反向传播奖励尺度进行调整 — 政策/技能提升收益被永久性地限制
作者: chiefmojo创建于 2026年9月14日更新于 2026年9月14日
标签types:bugarea:coreai:pr-readystatus:in-progress
概要
core/memory/l2/gain.ts 的 adaptiveBaseline() 将 MIN_ADAPTIVE_BASELINE = 0.2 设为下限。在 v2.0.7 奖励反向传播重写(使用正常化信用分配而不是从右向左衰减)之后,典型的池均值跟踪值大约下降了一个数量级(从旧的 ~0.5–0.85 范围降至 ~0.01–0.06)。由于 adaptiveBaseline(poolMean) = max(MIN_ADAPTIVE_BASELINE, min(V7_NEUTRAL_BASELINE, poolMean)),在重写后的池均值中,该函数总是返回 0.2 的下限 - 这是死代码,它再也不会适应实际奖励分布。具体的后果有两点:
- 增益上限:
computeGain()(effectiveWith − shrinkTowardBaseline(...))被限制得远低于候选策略可以实现的水平,因为effectiveWith值现在集中在 0.01–0.06 附近,而shrinkTowardBaseline则朝着卡住的 0.2 基准线拉伸。 - 低
without计数策略的负增益偏差:shrinkTowardBaseline使用WITHOUT_PRIOR_PSEUDOCOUNT = 5来向 (现在系统性地过高的) 0.2 基准线混合,当策略具有少量 "without" 观察时 - 这使得增益对那些最需要推广门限来公平评估它们的策略强烈负面。
根本原因
// core/memory/l2/gain.ts
export const V7_NEUTRAL_BASELINE = 0.5;
export const MIN_ADAPTIVE_BASELINE = 0.2;
// 适应基准值
export function adaptiveBaseline(poolMean: number): number {
if (!Number.isFinite(poolMean)) return V7_NEUTRAL_BASELINE;
return Math.max(MIN_ADAPTIVE_BASELINE, Math.min(V7_NEUTRAL_BASELINE, poolMean));
}在 poolMean ≈ 0.01–0.06(v2.0.7 典型范围)时,Math.min(0.5, poolMean) ≈ poolMean,而 Math.max(0.2, poolMean) 总是解析为 0.2,因为 poolMean < 0.2。这些常量以及它们周围的文档注释是为前 v2.0.7 奖励量级写的,并且在重写 core/reward/backprop.ts 时从未重新讨论过。
内容来源: MemTensor/MemOS