# 训练曲线对比工具

> 来源：https://dqn.cn/tools/curves ｜ 作者：DQN.CN 编辑部 ｜ 发布：2026-10-30 ｜ 更新：2026-10-30 ｜ 许可：CC BY-NC-SA 4.0（文字）/ MIT（代码）

强化学习的训练曲线噪声很大，比较算法或超参数时，把几条曲线放在同一张图上、适当平滑之后再看，往往比盯着日志里的数字更清楚。

> （此处为交互工具，请在网页中使用：https://dqn.cn/tools/curves）

## 数据格式

每行一个数据点，三列用逗号（或 Tab）分隔：`曲线名称,横轴值,纵轴值`。第一行可以是表头，以 `#` 开头的行会被忽略。例如：

```text
名称,步数,回报
PPO-seed0,2048,22.5
PPO-seed0,4096,31.0
PPO-seed1,2048,19.8
```

数据只在你的浏览器中处理，不会上传到任何服务器。

## 平滑方法

平滑采用与 TensorBoard 相同的“去偏指数滑动平均”：

$$
m_i = w\,m_{i-1} + (1-w)\,y_i,\qquad \tilde y_i = \frac{m_i}{1 - w^{i}}
$$

其中 $w$ 为平滑系数，$m_0 = 0$。除以 $1 - w^i$ 是为了消除初始值为 0 带来的偏差。注意：平滑会让曲线“滞后”，比较收敛速度时请同时查看原始曲线。

## 示例数据说明

默认载入的是本站 [A2C](https://dqn.cn/advanced/actor-critic)、[PPO](https://dqn.cn/advanced/ppo)、[TRPO](https://dqn.cn/advanced/trpo) 示例代码在 CartPole-v1 上的实测日志（每条记录为最近 20 回合的平均回报，单个随机种子）。它们只说明这几份代码在这一次运行中的表现，不能据此断言哪个算法更好——严肃的比较至少需要多个随机种子，并报告均值和置信区间（见 Henderson et al., 2018；Agarwal et al., 2021）。

## 从本站代码导出数据

本站的示例代码把训练进度打印到终端。你可以把输出重定向到文件，再用几行 Python 转成 CSV：

```python
import re, sys
print("名称,步数,回报")
for path in sys.argv[1:]:
    for line in open(path, encoding="utf-8"):
        m = re.search(r"steps\s+(\d+).*?平均回报\s+([-\d.]+)", line)
        if m:
            print(f"{path},{m.group(1)},{m.group(2)}")
```

用法：`python ppo_cartpole.py > ppo.log`，然后 `python to_csv.py ppo.log a2c.log > curves.csv`，最后在上方上传 `curves.csv`。

## 参考文献

- Henderson, P., Islam, R., Bachman, P., Pineau, J., Precup, D., & Meger, D. (2018). Deep Reinforcement Learning that Matters. *AAAI*. [arXiv:1709.06560](https://arxiv.org/abs/1709.06560)
- Agarwal, R., Schwarzer, M., Castro, P. S., Courville, A., & Bellemare, M. G. (2021). Deep Reinforcement Learning at the Edge of the Statistical Precipice. *NeurIPS*. [arXiv:2108.13264](https://arxiv.org/abs/2108.13264)
