Files
MAGAIL4AutoDrive/完整训练指南.md

287 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 MAGAIL完整训练指南
## ✅ 已实现的功能
### 1. 完整训练循环
- ✅ 多智能体buffer存储
- ✅ GAIL判别器更新
- ✅ PPO策略优化
- ✅ TensorBoard日志记录
- ✅ 模型保存和加载
- ✅ 专家数据加载7805条轨迹
### 2. 环境系统
- ✅ 多智能体场景环境
- ✅ 车辆动态生成
- ✅ 多维度观测108维
- ✅ 渲染和可视化
## 🎮 快速开始
### 方法1基础训练推荐新手
```bash
# 小规模测试10个episode无渲染
python train_magail.py --episodes 10 --horizon 200
```
### 方法2带可视化训练
```bash
# 5个episode带渲染
python train_magail.py --episodes 5 --render --horizon 200
```
### 方法3完整训练
```bash
# 长期训练1000 episodes
python train_magail.py \
--episodes 1000 \
--horizon 300 \
--rollout-length 512 \
--batch-size 128 \
--lr-actor 3e-4 \
--device cuda
```
### 方法4使用测试脚本
```bash
bash test_training.sh
```
## 📊 训练过程
### 数据流
```
Episode开始
收集观测 (108维 × N辆车)
Actor采样动作 ([转向, 油门])
环境step
存储到Buffer (state, action, reward, next_state...)
每512步
├─ 更新判别器 (区分策略vs专家)
├─ 计算GAIL奖励
└─ 更新PPO (Actor + Critic)
Episode结束
保存模型(如果是最佳)
```
### 关键参数说明
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--episodes` | 1000 | 训练轮数 |
| `--horizon` | 300 | 每轮最大步数 |
| `--rollout-length` | 512 | 更新间隔 |
| `--batch-size` | 128 | 批次大小 |
| `--lr-actor` | 3e-4 | Actor学习率 |
| `--lr-critic` | 3e-4 | Critic学习率 |
| `--lr-disc` | 3e-4 | 判别器学习率 |
| `--epoch-disc` | 5 | 判别器更新轮数 |
| `--epoch-ppo` | 10 | PPO更新轮数 |
| `--render` | False | 是否可视化 |
## 📈 监控训练
### 使用TensorBoard
```bash
# 启动TensorBoard
tensorboard --logdir outputs/
# 在浏览器打开
# http://localhost:6006
```
### 关键指标
1. **Episode/Reward** - 每个episode的总奖励
2. **Training/GAILReward** - GAIL提供的模仿奖励
3. **Loss/disc** - 判别器损失
4. **Acc/acc_pi** - 判别器识别策略数据的准确率
5. **Acc/acc_exp** - 判别器识别专家数据的准确率
6. **Loss/actor** - Actor损失
7. **Loss/critic** - Critic损失
### 期望的训练曲线
```
Episode Reward → 逐渐上升从0开始增长
GAIL Reward → 先上升后稳定
Disc Accuracy → 趋向50%(说明策略接近专家)
Actor Loss → 逐渐下降
Critic Loss → 逐渐下降
```
## 🔍 训练状态检查
### 查看输出日志
训练时会打印:
```
📍 Episode 1/10
可控车辆数: 5
🔄 步数 512: 更新模型...
GAIL奖励: 0.5234
✅ Episode 1 完成:
步数: 200
总奖励: 0.00
平均奖励: 0.0000
车辆数: 5
💾 保存最佳模型 (奖励: 0.00)
```
### 检查模型文件
```bash
ls outputs/magail_*/models/
# 应该看到:
# - best_model/model.pth
# - checkpoint_50/model.pth
# - checkpoint_100/model.pth
```
## ⚠️ 常见问题
### Q1: 奖励一直是0
**A:** 这是正常的!
- 环境奖励设计为0
- 真正的奖励由GAIL提供内在奖励
- 查看 `Training/GAILReward` 指标
### Q2: 判别器准确率是什么意思?
**A:**
- `acc_pi`: 判别器识别策略数据为"假"的准确率
- `acc_exp`: 判别器识别专家数据为"真"的准确率
- 训练初期都接近100%(策略很差,容易区分)
- 训练后期都接近50%(策略接近专家,难以区分)
### Q3: 车辆为什么不动或乱动?
**A:**
- 训练初期:策略随机,车辆行为混乱
- 需要训练多个episode后才会改善
- 运行 `python test_vehicle_movement.py` 确认环境正常
### Q4: 显存不足?
**A:** 减小参数:
```bash
python train_magail.py \
--batch-size 64 \
--rollout-length 256 \
--epoch-disc 3 \
--epoch-ppo 5
```
### Q5: 训练太慢?
**A:**
- 去掉 `--render`(可视化很耗时)
- 减小 `--horizon`
- 使用更大的 `--rollout-length`
## 🎯 训练建议
### 初次训练
1. **先测试小规模**
```bash
python train_magail.py --episodes 5 --horizon 100
```
2. **观察是否有错误**
3. **检查TensorBoard**
```bash
tensorboard --logdir outputs/
```
### 正式训练
1. **中等规模预热**
```bash
python train_magail.py --episodes 100 --horizon 200
```
2. **观察学习曲线**
- 判别器准确率是否下降?
- GAIL奖励是否变化
3. **长期训练**
```bash
python train_magail.py --episodes 1000 --horizon 300
```
### 超参数调优
可以尝试调整:
- 学习率:`1e-4` 到 `1e-3`
- Rollout length`256` 到 `1024`
- Batch size`64` 到 `256`
## 📁 输出文件结构
```
outputs/
└── magail_YYYYMMDD_HHMMSS/
├── models/
│ ├── best_model/
│ │ └── model.pth
│ ├── checkpoint_50/
│ └── checkpoint_100/
└── logs/
└── events.out.tfevents.* # TensorBoard日志
```
## 🚀 下一步
训练完成后:
1. **评估模型**
```bash
# TODO: 创建评估脚本
python evaluate.py --model outputs/magail_*/models/best_model
```
2. **可视化行为**
```bash
python train_magail.py --episodes 1 --render \
--load-model outputs/magail_*/models/best_model/model.pth
```
3. **分析日志**
- 查看TensorBoard
- 对比不同超参数的效果
## 💡 提示
- 💾 定期备份 `outputs/` 目录
- 📊 使用TensorBoard监控训练
- ⏰ 长期训练建议使用 `nohup` 或 `screen`
- 🔍 出现错误时查看完整堆栈跟踪
---
**祝训练顺利!** 🎉
有问题查看:
- `技术说明文档.md` - 技术细节
- `MAGAIL算法应用指南.md` - 使用指南
- `问题解决记录.md` - 常见问题