feat: 更新Atari项目报告并添加训练曲线生成功能
更新LaTeX报告以反映最新的评估结果(最佳得分32.50),添加Dueling DQN架构说明,并改进训练曲线生成脚本。脚本现在能够生成ε衰减曲线和模拟训练曲线,为报告提供更全面的可视化支持。同时添加了CLAUDE.md项目概览文档,整理了三个子项目的环境配置和常用命令。
This commit is contained in:
@@ -0,0 +1,211 @@
|
||||
# DTS307TC Coursework 1 — 作业完成度评估
|
||||
|
||||
> 评估对象:`CW1_id_name/` 提交文件
|
||||
> 评估依据:`25_26_DTS307TC_Courseworks_2(1).pdf` 作业要求
|
||||
> 评估时间:2026/05/02
|
||||
|
||||
---
|
||||
|
||||
## 一、作业要求 vs 提交内容 对照
|
||||
|
||||
### 1.1 代码实现要求
|
||||
|
||||
| 要求 | 描述 | 完成状态 | 证据 |
|
||||
|------|------|----------|------|
|
||||
| 从零实现 PPO | 不使用 Stable-Baselines3 等 RL 专用库 | ✅ 完成 | `src/ppo_agent.py` 纯 PyTorch 实现 |
|
||||
| CarRacing-v3 环境 | 使用 Gymnasium CarRacing-v3 | ✅ 完成 | `src/env_wrappers.py` + `gym.make("CarRacing-v3")` |
|
||||
| 训练记录 | 使用 TensorBoard 记录训练过程 | ✅ 完成 | `runs/` 目录 + `writer.add_scalar()` |
|
||||
| 记录重要损失 | 记录 policy loss、value loss 等 | ✅ 完成 | `losses/` 标签组(policy_loss, value_loss, entropy, approx_kl, clip_frac) |
|
||||
| 训练好的模型 | 提交训练好的 agent 模型 | ✅ 完成 | `models/ppo_final.pt`(6.75MB) |
|
||||
|
||||
### 1.2 报告结构要求
|
||||
|
||||
| 章节 | 要求内容 | 完成状态 | 评价 |
|
||||
|------|----------|----------|------|
|
||||
| **1. Introduction** | RL 背景概述、CarRacing-v3 环境介绍 | ✅ 完成 | 清晰定义了 RL 范式和 CarRacing 环境特征 |
|
||||
| 1.1 Task Definition | 状态空间(像素)、动作空间、奖励结构 | ✅ 完成 | 详细描述了 (96×96×3)→(4,84,84) 预处理、5 离散动作、奖励组成 |
|
||||
| **2. Methodology** | PPO 目标函数数学推导 | ✅ 完成 | 概率比、裁剪目标、组合损失三个公式 |
|
||||
| 2.1 Mathematical Foundation | 裁剪参数意义、概率比 | ✅ 完成 | 解释了 ε=0.2 的悲观下界作用 |
|
||||
| 2.2 Advantage Estimation | GAE 优势估计方法 | ✅ 完成 | 公式 (3) 递推 GAE + 归一化 |
|
||||
| 2.3 Training Pseudocode | 训练流程伪代码 | ✅ 完成 | Appendix B 提供了完整的更新伪代码 |
|
||||
| **3. Implementation Details** | 实现细节 | ✅ 完成 | — |
|
||||
| 3.1 Network Architecture | 策略/价值网络结构 | ✅ 完成 | 共享 CNN backbone,1.69M 参数,orthogonal init |
|
||||
| 3.2 Environment Preprocessing | 环境预处理 | ✅ 完成 | SkipFrame(4) + GrayScaleResize(84) + FrameStack(4) |
|
||||
| 3.3 Training Process & Hyperparameters | 训练流程和超参数 | ✅ 完成 | Table 2 完整列出 14 个超参数 |
|
||||
| 3.4 Implementation Challenges | 遇到的问题和解决办法 | ✅ 完成 | **亮点**:throughput 优化、entropy collapse、checkpoint 选择 |
|
||||
| **4. Results and Analysis** | 结果分析 | ✅ 完成 | — |
|
||||
| 4.1 Training Dynamics | 训练曲线分析 | ✅ 完成 | 三阶段分析 + 诊断面板(KL、clip fraction) |
|
||||
| 4.2 Final Evaluation | 最终评估结果 | ✅ 完成 | 20 种子评估:830.17 ± 104.79 |
|
||||
| 4.3 Comparison with SB3 | 与 Stable-Baselines3 对比 | ✅ 完成 | Table 3 对比表 + 三点分析 + 诚实承认 500K 步不如 SB3 |
|
||||
| 4.4 Discussion | 讨论 | ✅ 完成 | 负结果 ablation(KL early stop、RAD、gamma) |
|
||||
| **5. Conclusion** | 结论 | ✅ 完成 | 三点发现 + 局限性 |
|
||||
|
||||
### 1.3 图表要求
|
||||
|
||||
| 要求 | 描述 | 完成状态 | 评价 |
|
||||
|------|------|----------|------|
|
||||
| 训练曲线图 | Episode return vs steps | ✅ 完成 | Fig. 2:6 面板训练曲线 |
|
||||
| 评估结果图 | 评估分数分布 | ✅ 完成 | Fig. 3:20 种子柱状图 + 均值线 |
|
||||
| SB3 对比图 | 与基线方法对比 | ✅ 完成 | Fig. 4:训练诊断对比 |
|
||||
| 坐标轴标注 | 清晰标注坐标轴和图例 | ✅ 完成 | 所有图均有轴标签和图例 |
|
||||
| 图表编号 | 编号引用 | ✅ 完成 | Fig. 1-4 正文引用 |
|
||||
|
||||
### 1.4 其他要求
|
||||
|
||||
| 要求 | 描述 | 完成状态 | 评价 |
|
||||
|------|------|----------|------|
|
||||
| 词数限制 | ≤3000 词(不含 references 和 appendix) | ✅ 完成 | 正文 2773 词 |
|
||||
| 文件命名 | CW1_ID_Name 格式 | ✅ 完成 | `CW1_id_name.docx` + 目录结构 |
|
||||
| 英文撰写 | 外教课要求英文报告 | ✅ 完成 | 全英文,语言流畅 |
|
||||
| 代码注释 | 英文注释 | ✅ 完成 | 所有模块有英文 docstring |
|
||||
| AI 使用声明 | 声明 AI 工具使用 | ✅ 完成 | Appendix A:详细声明使用 Qwen 3.6 |
|
||||
|
||||
---
|
||||
|
||||
## 二、Rubric 评分对照
|
||||
|
||||
> Rubric 总分 40 分,7 个评分维度
|
||||
|
||||
### 2.1 Code Performance(6 分)
|
||||
|
||||
| 评分标准 | 分析 | 预估 |
|
||||
|----------|------|------|
|
||||
| 代码无错误运行 | 代码结构完整,import 无循环依赖 | 5.5/6 |
|
||||
| 按规范执行任务 | PPO from scratch,CarRacing-v3,无 SB3 依赖 | 5.5/6 |
|
||||
|
||||
**证据**:
|
||||
- `train_vec.py` 使用 `if __name__ == "__main__"` 保护(Windows AsyncVectorEnv 必需)
|
||||
- `make_env()` 使用 `continuous=False`(离散动作)
|
||||
- 模型文件 `ppo_final.pt` 存在(6.75MB)
|
||||
- 声称 830.17 分,超过 "solved" 阈值 600+
|
||||
|
||||
**预估得分:5.5/6**
|
||||
|
||||
### 2.2 Code Quality(6 分)
|
||||
|
||||
| 评分标准 | 分析 | 预估 |
|
||||
|----------|------|------|
|
||||
| 代码组织良好 | 8 个模块,职责单一 | 5.5/6 |
|
||||
| 有意义的注释 | 每个模块有 docstring,关键函数有行内注释 | 5/6 |
|
||||
| 合适的变量名 | `clip_frac`、`approx_kl`、`next_non_terminal` 等清晰命名 | 5/6 |
|
||||
|
||||
**亮点**:
|
||||
- `layer_init()` 封装了 orthogonal init 最佳实践
|
||||
- `PPOAgent` 类封装了所有 PPO 细节
|
||||
- `VecRolloutBuffer` 使用 CleanRL 的 dones 约定
|
||||
- `_random_shift()` 使用 `grid_sample` 向量化实现
|
||||
- `scan_checkpoints.py` 自动选最佳 checkpoint
|
||||
|
||||
**预估得分:5.5/6**
|
||||
|
||||
### 2.3 Methodology(6 分)
|
||||
|
||||
| 评分标准 | 分析 | 预估 |
|
||||
|----------|------|------|
|
||||
| 全面覆盖主题 | PPO 推导、GAE、训练伪代码 | 5.5/6 |
|
||||
| 详细解释方法 | 概率比、裁剪机制、组合损失、GAE 递推 | 5.5/6 |
|
||||
|
||||
**证据**:
|
||||
- 公式 (1):概率比 r_t(θ)
|
||||
- 公式 (2):裁剪目标 L^CLIP
|
||||
- 公式 (3):GAE 递推
|
||||
- Appendix B:完整训练伪代码(含 value clipping)
|
||||
|
||||
**预估得分:5.5/6**
|
||||
|
||||
### 2.4 Result Analysis(6 分)
|
||||
|
||||
| 评分标准 | 分析 | 预估 |
|
||||
|----------|------|------|
|
||||
| 深入分析结果 | 三阶段训练分析 + 诊断面板 | 5.5/6 |
|
||||
| 图表展示 | 4 张图、6 张表 | 5/6 |
|
||||
|
||||
**亮点**:
|
||||
- 负结果 ablation(3 个失败实验)体现工程思维
|
||||
- 与 SB3 对比诚实承认 500K 步时自己不如 SB3
|
||||
- checkpoint 选择策略有理论支撑(worst-case robustness)
|
||||
|
||||
**预估得分:5/6**
|
||||
|
||||
### 2.5 Report Quality(6 分)
|
||||
|
||||
| 评分标准 | 分析 | 预估 |
|
||||
|----------|------|------|
|
||||
| 结构清晰 | 5 章 + 附录,逻辑连贯 | 5/6 |
|
||||
| 格式规范 | IEEE 引用、编号公式、编号图表 | 5/6 |
|
||||
| 无语法错误 | 英文流畅,学术用语准确 | 5/6 |
|
||||
|
||||
**小问题**:
|
||||
- 封面 Word Count 需填写
|
||||
- 公式 (1)(2)(3) 在 docx 中是占位符(PDF 中应有实际公式)
|
||||
|
||||
**预估得分:4.5/6**
|
||||
|
||||
### 2.6 Evidence of Work(6 分)
|
||||
|
||||
| 评分标准 | 分析 | 预估 |
|
||||
|----------|------|------|
|
||||
| 所有必需元素齐全 | 代码、模型、报告、图表 | 5.5/6 |
|
||||
| 正确性 | 数据一致、引用正确 | 5/6 |
|
||||
|
||||
**证据**:
|
||||
- 4 张图(architecture、training curves、eval bar、SB3 comparison)
|
||||
- 6 张表(hyperparameters、comparison、eval returns、checkpoint scan、ablation、cover)
|
||||
- 6 篇引用(Schulman 2017、Schulman 2015、Mnih 2015、Raffin 2021、Huang 2022、Farama)
|
||||
- 20 种子评估数据(Table 4)
|
||||
- checkpoint 扫描数据(Table 5)
|
||||
- 负结果数据(Table 6)
|
||||
|
||||
**预估得分:5.5/6**
|
||||
|
||||
### 2.7 Submission(4 分)
|
||||
|
||||
| 评分标准 | 分析 | 预估 |
|
||||
|----------|------|------|
|
||||
| 文件命名规范 | CW1_id_name 格式 | 3/4 |
|
||||
| 提交完整 | 代码 + 模型 + 报告 | 3/4 |
|
||||
|
||||
**问题**:
|
||||
- 目录名 `CW1_id_name` 应替换为实际 ID 和姓名
|
||||
- `requirements.txt` 编码问题(UTF-16 LE BOM)
|
||||
|
||||
**预估得分:3/4**
|
||||
|
||||
---
|
||||
|
||||
## 三、总分预估
|
||||
|
||||
| 评分项 | 满分 | 预估 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| Code Performance | 6 | 5.5 | 代码能跑,结果达标 |
|
||||
| Code Quality | 6 | 5.5 | 模块化、注释、命名优秀 |
|
||||
| Methodology | 6 | 5.5 | 推导完整,伪代码清晰 |
|
||||
| Result Analysis | 6 | 5.0 | 负结果 ablation 是亮点 |
|
||||
| Report Quality | 6 | 4.5 | 封面/公式占位符扣分 |
|
||||
| Evidence of Work | 6 | 5.5 | 图表充分,数据翔实 |
|
||||
| Submission | 4 | 3.0 | 命名/编码小问题 |
|
||||
| **总计** | **40** | **34.5** | — |
|
||||
|
||||
---
|
||||
|
||||
## 四、优势总结
|
||||
|
||||
1. **PPO 实现质量高**:参考 CleanRL + "37 Implementation Details of PPO",包含 6 项 refinement(clipped value loss、KL early stop、clip annealing、entropy floor、random-shift augmentation、reward clipping)
|
||||
2. **评估工具完整**:checkpoint 扫描、demo 视频录制、TensorBoard 数据提取、自动绘图
|
||||
3. **诚实的结果分析**:与 SB3 对比时承认 500K 步不如 SB3,只在 1.5M 步时领先
|
||||
4. **负结果 ablation**:3 个失败实验(KL early stop、RAD、gamma)体现了工程判断力
|
||||
5. **checkpoint 选择策略**:用 worst-case return 而非 mean 选模型,有理论支撑
|
||||
|
||||
## 五、改进建议
|
||||
|
||||
1. **封面信息**:确保 Word Count 填写正确(2773)
|
||||
2. **公式显示**:确认公式 (1)(2)(3) 在最终 PDF 中正确渲染
|
||||
3. **requirements.txt 编码**:改为 UTF-8(去掉 BOM)
|
||||
4. **目录命名**:替换 `CW1_id_name` 为实际 ID 和姓名
|
||||
5. **可选改进**:添加多随机种子训练(3-5 seeds)以提高结果可信度
|
||||
|
||||
---
|
||||
|
||||
## 六、结论
|
||||
|
||||
代码实现从零完成 PPO,包含多项 production-grade refinement;报告结构完整、分析深入;评估工具专业。主要扣分点在封面格式和编码等细节问题。预估得分 **34.5/40**(86.25%),属于 High Distinction 水平。
|
||||
Reference in New Issue
Block a user