RL Evaluation、稳定性与可复现性
用多随机种子、置信区间、独立评测策略和资源指标报告结果。
学习目标
- 把训练随机性、评测波动与资源预算分别报告,避免用最好种子代表算法。
- 独立复核“相同均值可以掩盖不同种子稳定性”的输入、计算和解释。
- 均值相同不等于失败风险相同。
为什么重要
把训练随机性、评测波动与资源预算分别报告,避免用最好种子代表算法。
学习前需要掌握
背景与问题
一条漂亮训练曲线可能来自幸运初始化,末次评测也可能恰巧遇到容易任务。RL 的数据与策略相互影响,种子之间差异往往很大;只报告最好运行会系统性夸大可靠性。
概念定义
强化学习评测是在预先固定的环境、任务分布、交互预算和策略选择协议下,估计策略回报与其他目标。可复现记录包括环境与包装器版本、配置、种子、数据版本、检查点和评测动作方式,而不仅是一个随机种子数字。
直观理解
同一名运动员在多个场次的成绩,不能和多个独立训练出的运动员混为一谈。episode 波动是环境随机性,训练种子波动还包含学到不同策略的差异。
核心原理
每个训练种子可以有多个评测 episode,先明确统计单位再汇总。把全部 episode 当独立训练样本,会夸大有效样本量;不确定性估计需保留种子或任务层级,可按协议使用分层 bootstrap 等方法。
评测通常关闭训练探索噪声或明确使用采样策略,并保持无梯度、固定归一化统计。训练环境回报与独立评测回报分开,频繁根据测试分数选检查点会引入选择偏差。
样本效率以真实交互量衡量,墙钟时间还包括计算和模拟器开销,离线方法则需说明数据规模与调参边界。不同预算、环境版本和终止规则下的数字不能直接排成排行榜。
数学表达
按训练种子汇总均值
每个 Ĵ_i 是独立训练种子的评测估计;仍需报告不确定性与失败分布。
变量含义
N独立训练种子数Ĵ_i第 i 个策略按相同评测协议得到的回报
计算步骤
- 1两种方法的种子均值都为 10。
- 2A 的样本标准差约 17.3205,B 为 1。
- 3报告最好一次会把 A 的 30 当优势,却隐去两次失败。
代码对应位置
示例 1相同均值可以掩盖不同种子稳定性:A、B 均值均为 10,但种子间样本标准差约 17.321 与 1.000。
变量解释
| 变量 | 含义 |
|---|---|
N | 独立训练种子数 |
Ĵ_i | 第 i 个策略按相同评测协议得到的回报 |
完整数值示例
相同均值可以掩盖不同种子稳定性
已知条件
- 三次训练结果 A 为 [0,0,30],B 为 [9,10,11]。
- 每个数字已是一个种子的平均评测回报。
计算步骤
- 两种方法的种子均值都为 10。
- A 的样本标准差约 17.3205,B 为 1。
- 报告最好一次会把 A 的 30 当优势,却隐去两次失败。
计算结果
A、B 均值均为 10,但种子间样本标准差约 17.321 与 1.000。
处理前后对比
- 均值相同不等于失败风险相同。
- 三个种子只适合教学,不能据此给出精确可靠的性能结论。
计算与实现步骤
- 定义指标
- 多 seed 训练
- 周期评测
- 统计区间
- 复现实验
代码实现
示例 1
相同均值可以掩盖不同种子稳定性
example_01.py用途:A、B 均值均为 10,但种子间样本标准差约 17.321 与 1.000。
from statistics import mean, stdev
for name, seed_scores in [("A", [0.0, 0.0, 30.0]), ("B", [9.0, 10.0, 11.0])]:
print(f"{name} mean={mean(seed_scores):.3f} sample_std={stdev(seed_scores):.3f} best={max(seed_scores):.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
A、B 均值均为 10,但种子间样本标准差约 17.321 与 1.000。
mean- 训练特征逐列均值。
Step 1 · 1–3 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
from statistics import mean, stdev
for name, seed_scores in [("A", [0.0, 0.0, 30.0]), ("B", [9.0, 10.0, 11.0])]:
print(f"{name} mean={mean(seed_scores):.3f} sample_std={stdev(seed_scores):.3f} best={max(seed_scores):.3f}")代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
A mean=10.000 sample_std=17.321 best=30.000 B mean=10.000 sample_std=1.000 best=11.000
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 只报告最好种子或最好检查点,不说明选择协议。
- 把同一策略的多个 episode 当多个独立训练结果。
- 只比较最终回报,不对齐交互和计算预算。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 只报告最好种子或最好检查点,不说明选择协议。
- 把同一策略的多个 episode 当多个独立训练结果。
- 只比较最终回报,不对齐交互和计算预算。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Agarwal 等:Deep Reinforcement Learning at the Edge of the Statistical Precipice。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 只报告最好种子或最好检查点,不说明选择协议。
- 把同一策略的多个 episode 当多个独立训练结果。
- 只比较最终回报,不对齐交互和计算预算。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
固定一个 seed 就完全可复现吗?
不一定。并行调度、硬件算子、库与环境版本仍可能影响结果;应保存配置与版本,并区分数值确定性和统计结论可重复。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。