5.9 KiB
5.9 KiB
🚀 MAGAIL完整训练指南
✅ 已实现的功能
1. 完整训练循环
- ✅ 多智能体buffer存储
- ✅ GAIL判别器更新
- ✅ PPO策略优化
- ✅ TensorBoard日志记录
- ✅ 模型保存和加载
- ✅ 专家数据加载(7805条轨迹)
2. 环境系统
- ✅ 多智能体场景环境
- ✅ 车辆动态生成
- ✅ 多维度观测(108维)
- ✅ 渲染和可视化
🎮 快速开始
方法1:基础训练(推荐新手)
# 小规模测试(10个episode,无渲染)
python train_magail.py --episodes 10 --horizon 200
方法2:带可视化训练
# 5个episode,带渲染
python train_magail.py --episodes 5 --render --horizon 200
方法3:完整训练
# 长期训练(1000 episodes)
python train_magail.py \
--episodes 1000 \
--horizon 300 \
--rollout-length 512 \
--batch-size 128 \
--lr-actor 3e-4 \
--device cuda
方法4:使用测试脚本
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
# 启动TensorBoard
tensorboard --logdir outputs/
# 在浏览器打开
# http://localhost:6006
关键指标
- Episode/Reward - 每个episode的总奖励
- Training/GAILReward - GAIL提供的模仿奖励
- Loss/disc - 判别器损失
- Acc/acc_pi - 判别器识别策略数据的准确率
- Acc/acc_exp - 判别器识别专家数据的准确率
- Loss/actor - Actor损失
- 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)
检查模型文件
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: 减小参数:
python train_magail.py \
--batch-size 64 \
--rollout-length 256 \
--epoch-disc 3 \
--epoch-ppo 5
Q5: 训练太慢?
A:
- 去掉
--render(可视化很耗时) - 减小
--horizon - 使用更大的
--rollout-length
🎯 训练建议
初次训练
-
先测试小规模
python train_magail.py --episodes 5 --horizon 100 -
观察是否有错误
-
检查TensorBoard
tensorboard --logdir outputs/
正式训练
-
中等规模预热
python train_magail.py --episodes 100 --horizon 200 -
观察学习曲线
- 判别器准确率是否下降?
- GAIL奖励是否变化?
-
长期训练
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日志
🚀 下一步
训练完成后:
-
评估模型
# TODO: 创建评估脚本 python evaluate.py --model outputs/magail_*/models/best_model -
可视化行为
python train_magail.py --episodes 1 --render \ --load-model outputs/magail_*/models/best_model/model.pth -
分析日志
- 查看TensorBoard
- 对比不同超参数的效果
💡 提示
- 💾 定期备份
outputs/目录 - 📊 使用TensorBoard监控训练
- ⏰ 长期训练建议使用
nohup或screen - 🔍 出现错误时查看完整堆栈跟踪
祝训练顺利! 🎉
有问题查看:
技术说明文档.md- 技术细节MAGAIL算法应用指南.md- 使用指南问题解决记录.md- 常见问题