You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity ML Agent部分示例训练效果差,求合适超参数配置

针对Unity ML-Agents Beta中Area/Basic示例的超参数调优建议

我之前在折腾Unity ML-Agents Beta版的Area和Basic示例时,也碰到过和你一模一样的问题——训练半天平均奖励死活超不过0.2,远达不到官方说的0.9+水平。后来调整了几个核心超参数,情况就好转了,分享下我的经验和配置:

先指出你现有配置里的小问题

首先注意到你在hyperparameter_dict里有两个拼写错误:buffe_size应该是buffer_sizeleaning_rate应该是learning_rate,虽然这可能不直接影响训练,但会导致日志记录不准确,建议先修正。

关键超参数调整思路

针对Basic和Area这类场景,这几个参数是影响收敛的核心:

  • 状态归一化(normalize:一定要设为True!这类依赖连续状态输入的场景,归一化能让模型的梯度更新更稳定,收敛速度至少快一倍。
  • 学习率(learning_rate:你当前的3e-4对于简单场景来说有点高,训练后期容易出现奖励震荡,建议降到1e-4
  • 时间步长(time_horizon2048太长了,这类简单任务不需要收集这么长的轨迹,调到1024能让批次迭代更快,模型更早看到更新效果。
  • 熵正则化强度(beta:初期可以拉高到2e-3,鼓励智能体多探索;训练到50万步左右再降到1e-4,让模型专注于利用已学到的策略。
  • 批量大小(batch_size:从64增大到256,更大的批量能让梯度更新更平滑,减少噪声影响。

我亲测有效的完整超参数配置

### General parameters
max_steps = 1e6 # 适当增加训练步数,给模型足够的收敛时间
run_path = "ppo_basic_tuned" # 自定义路径方便区分不同训练版本
load_model = False
train_model = True
summary_freq = 5000 # 更频繁保存统计数据,方便用TensorBoard监控
save_freq = 25000
env_name = "basic"
curriculum_file = None

### Algorithm-specific parameters for tuning
gamma = 0.995 # 稍微提高折扣率,让模型更关注长期奖励
lambd = 0.95
time_horizon = 1024
beta = 2e-3 # 训练到5e5步后可手动改为1e-4
num_epoch = 5
num_layers = 2 # 2层隐层足够,过多反而容易过拟合
epsilon = 0.15 # 缩小阈值,让策略更新更保守,避免大幅波动
buffer_size = 4096 # 配合time_horizon调整,保证缓冲区有足够的训练数据
learning_rate = 1e-4
hidden_units = 128 # 增加隐层单元数量,提升模型的状态表达能力
batch_size = 256
normalize = True # 必开选项!

### Logging dictionary for hyperparameters
hyperparameter_dict = {
    'max_steps':max_steps, 
    'run_path':run_path, 
    'env_name':env_name, 
    'curriculum_file':curriculum_file, 
    'gamma':gamma, 
    'lambd':lambd, 
    'time_horizon':time_horizon, 
    'beta':beta, 
    'num_epoch':num_epoch, 
    'epsilon':epsilon, 
    'buffer_size':buffer_size, 
    'learning_rate':learning_rate, 
    'hidden_units':hidden_units, 
    'batch_size':batch_size
}

额外训练小技巧

  • 课程学习:如果是Area示例,可以尝试写一个简单的curriculum配置文件,从最小的区域开始训练,逐步扩大范围,这样智能体更容易掌握基础策略。
  • TensorBoard监控:训练时一定要打开TensorBoard,观察policy_lossvalue_lossentropy的变化。如果熵下降太快,说明智能体探索不足,及时调高beta;如果loss震荡厉害,就再降一点学习率。
  • 奖励函数核对:确认你的奖励逻辑和官方示例完全一致,有时候不小心改了奖励权重,会直接导致训练目标偏离。

内容的提问来源于stack exchange,提问作者CerushDope

火山引擎 最新活动