修改了算法代码,并建立了一个简单的训练脚本.修改bert处理二维输入,移除PPO的permute参数

This commit is contained in:
2025-10-22 16:56:12 +08:00
parent b626702cbb
commit 3f7e183c4b
101 changed files with 3837 additions and 39 deletions

286
完整训练指南.md Normal file
View File

@@ -0,0 +1,286 @@
# 🚀 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` - 常见问题