---
title: 详细数据
description: PushT 上 DP、SFP 与 SFPJ 的训练日志、推理评测结果和字段定义。
---

本页记录 SFP 实验的原始结果和统计口径。结果文件来自仓库中的 `blog/tmp/result/`，图表见[评估结果摘要](./data-summary/)。

## 数据文件

| 文件 | 内容 |
| --- | --- |
| <a href="/downloads/sfp/dp_train.json" download>`dp_train.json`</a> | DP 训练日志，共 500 条记录。 |
| <a href="/downloads/sfp/sfp_train.json" download>`sfp_train.json`</a> | SFP 训练日志，共 1000 条记录。 |
| <a href="/downloads/sfp/sfpj_train.json" download>`sfpj_train.json`</a> | SFPJ 训练日志，共 500 条记录，包含历史噪声的有效尺度。 |
| <a href="/downloads/sfp/dp_eval.json" download>`dp_eval.json`</a> | DP 在 20 个 seed 上的逐步奖励和推理耗时。 |
| <a href="/downloads/sfp/sfp_eval.json" download>`sfp_eval.json`</a> | SFP 在 20 个 seed 上的逐步奖励和推理耗时。 |
| <a href="/downloads/sfp/sfpj_eval.json" download>`sfpj_eval.json`</a> | SFPJ 在 20 个 seed 上的逐步奖励和推理耗时。 |

文件中的 checkpoint 字段保留了生成结果时使用的 checkpoint 名称；其中的机器本地绝对路径不作为复现实验所需路径。

## 评测协议

- 环境为 PushT，设备为 CUDA。
- 三种方法均使用 seed `600` 到 `619`，共 20 个 episode；每个 episode 最多运行 200 步。
- `max_reward` 是单个 episode 运行期间的最大奖励；本实验将 `max_reward = 1` 记为成功，`success` 字段是该判定的布尔值。
- `inference_time_ms_per_step` 是该 episode 的总推理耗时除以步数，单位为毫秒。表中的均值和标准差是在 20 个 episode 上计算的。
- SFP 使用 `integration_steps_per_action = 1`；DP 和 SFPJ 的该字段不适用。

## 评测汇总

| 方法 | checkpoint | 平均最大奖励 | 最大奖励标准差 | 成功率 | 成功数 | 单步推理耗时（ms） | 约等效推理频率（Hz） |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| DP | `epoch_0200.pt` | 0.9528 | 0.0572 | 35% | 7/20 | 91.87 ± 0.83 | 10.9 |
| SFP | `epoch_0500.pt` | 0.9086 | 0.2122 | 25% | 5/20 | 6.31 ± 0.25 | 158.5 |
| SFPJ | `last.pt` | 0.9008 | 0.1930 | 35% | 7/20 | 8.47 ± 0.44 | 118.0 |

相对于 DP 的单步推理耗时，SFP 约快 **14.56 倍**，SFPJ 约快 **10.84 倍**。SFPJ 比 SFP 慢约 1.34 倍，但两者的平均最大奖励接近；在这组 20 个 seed 的评测中，DP 的平均最大奖励最高，DP 与 SFPJ 的成功率均为 35%，高于 SFP 的 25%。推理频率是 `1000 / inference_time_ms_per_step` 的换算值，只表示模型推理吞吐，不等同于环境最终控制频率。

## 训练日志汇总

训练日志按 `epoch` 记录一次损失和学习率。下表的“最低损失”是在完整日志中逐条取最小值，而不是只取最后一条。

| 方法 | 记录数 | 首条损失 | 最后一条损失 | 最低损失（epoch） | 学习率首值 → 末值 |
| --- | ---: | ---: | ---: | ---: | ---: |
| DP | 500 | 0.73450 | 0.00798 | 0.00781（485） | 1.90e-5 → 1.00e-4 |
| SFP | 1000 | 1.08143 | 0.02421 | 0.02301（968） | 9.60e-6 → 0 |
| SFPJ | 500 | 1.30794 | 0.00250 | 0.00248（492） | 1.86e-5 → 0 |

SFPJ 额外记录 `history_noise_effective_scale`，从第 1 条的 `0.00465` 逐步增加到第 500 条的 `0.25`，用于表示训练时动作历史噪声的实际尺度。

## JSON 字段

### 训练日志

| 字段 | 说明 |
| --- | --- |
| `epoch` | 日志记录对应的训练轮次。 |
| `loss` | 当前轮次的训练损失。 |
| `learning_rate` | 当前轮次使用的学习率。 |
| `history_noise_effective_scale` | SFPJ 的动作历史噪声有效尺度；DP 和 SFP 不包含此字段。 |

### 评测文件顶层

| 字段 | 说明 |
| --- | --- |
| `schema_version` | 结果文件格式版本，当前为 `2`。 |
| `method` | `dp`、`sfp` 或 `sfpj`。 |
| `checkpoint` | 生成评测结果时加载的 checkpoint。 |
| `device` | 推理设备，当前为 `cuda`。 |
| `seeds` | 本次评测使用的随机种子列表。 |
| `max_steps` | 每个 episode 的最大步数。 |
| `integration_steps_per_action` | SFP 的每个动作使用的积分步数；不适用时为 `null`。 |
| `episodes` | 每个 seed 的逐步奖励、成功状态和推理耗时记录。 |
| `summary` | 对 `episodes` 聚合得到的平均值、标准差和成功率。 |

### `episodes` 中的字段

| 字段 | 说明 |
| --- | --- |
| `seed` | 当前 episode 使用的随机种子。 |
| `rewards` | 每个环境步的奖励序列。 |
| `max_reward` | `rewards` 中的最大值。 |
| `steps` | 实际运行步数。 |
| `success` | 是否达到成功判定。 |
| `inference_time_seconds` | 当前 episode 的总推理耗时，单位为秒。 |
| `inference_time_ms_per_step` | 总推理耗时除以 `steps`，单位为毫秒。 |

### `summary` 中的字段

| 字段 | 说明 |
| --- | --- |
| `mean_max_reward` / `std_max_reward` | 20 个 episode 的 `max_reward` 均值 / 标准差。 |
| `success_rate` | `success = true` 的 episode 数除以 episode 总数。 |
| `mean_inference_time_ms_per_step` / `std_inference_time_ms_per_step` | 单步推理耗时的均值 / 标准差。 |

评测 JSON 保留逐步数据，因此图表中的奖励曲线、最大奖励分布、成功率和延迟分布都可以从原始文件重新生成。训练 JSON 同样保留每条日志记录，图表中的损失和学习率曲线不依赖手工录入的汇总值。

