下面的含义就是训练中常用的yaml文件:
behaviors:
waffle:
trainer_type: ppo #训练器类型,默认ppo。还有sac和poca
hyperparameters:
batch_size: 64 # 梯度下降每次迭代的经验数。应确保该值总是比 buffer_size小几倍。 在使用连续动作的情况下,该值应该很大(≈1000s),若只使用离散动作,该值应该更小(≈10s)。常用取值范围:Continuous - PPO,512 ~ 5120;Continuous - SAC,128 ~ 1024;Discrete, PPO & SAC,32 ~ 512
buffer_size: 1000 # PP0:在更新策略模型之前要收集的经验数量,介于2048 ~ 409600,默认值10240。代表进行任何学习或更新之前至少应该收集的经验数量。 应该比 batch_size 大几倍。较大的 buffer_size对应于更稳定的训练更新。SAC:经验缓冲区的最大大小,介于50000 ~ 1000000,默认值为50000。以便 SAC 可以从旧经验和新经验中学习
learning_rate: 0.0003 # 梯度下降的初始学习率,介于1E-5 ~ 1E-3,默认为3E-4。 对应于每个梯度下降更新步骤的强度。 如果训练不稳定并且奖励不会持续增加,则通常应该减少此值
beta: 0.001 # 默认值是5e-3,代表熵正则化强度,让策略随机。增加此值代表更多随机操作。熵下降太快,增加β。如果熵下降太慢,请减小β。Typical range: 1e-4 - 1e-2
epsilon: 0.2 # (默认值=0.2)影响策略的训练速度。代表在梯度下降更新期间新旧策略之间的可接受的差异阈值。将此值设置得较小将导致更稳定的更新,但也会减慢训练过程。Typical range: 0.1 - 0.3
lambd: 0.99 #(默认值=0.95)计算(GAE)时使用的正则化参数(lambda)。代表代理在计算更新的价值估计时对其当前价值估计的依赖程度。低值对应于更多地依赖于当前价值估计(可能是高偏差),高值对应于更依赖于环境中获得的实际回报(可能是大偏差)。Typical range: 0.9 - 0.95
num_epoch: 3(默认值=3)代表执行梯度下降优化时要通过体验缓冲区的次数。batch_size越大,可以接受的次数越大。越小学习速率越慢。Typical range: 3 - 10
learning_rate_schedule: linear # PPO:确定学习率如何随时间变化,默认值为linear。对于 PPO而言,将学习率衰减至到 max_steps能够使学习更稳定地收敛。SAC:确定学习率如何随时间变化,默认值为constant。对于 SAC而言,建议保持学习率不变。注:linear表示learning_rate在学习过程中线性衰减,在 max_steps 处达到 0,而若选择 constant ,在整个训练过程中learning_rate恒定。
network_settings:
normalize: true # 是否对向量观察输入应用归一化,默认值为false。 这种归一化基于矢量观察的运行平均值和方差。连续动作选true,离散选false
hidden_units: 128 # 神经网络隐藏层中的单元数,介于32 ~ 512,默认值为128。对应于神经网络的每个全连接层中有多少个单元。 对于正确操作是观察输入的直接组合的简单问题,应设置较小数值。 对于动作是观察变量之间非常复杂的相互作用的问题,应设置较大数值
num_layers: 2 # 神经网络中隐藏层的数量,介于 1 ~ 3 ,默认值为2。对应于观察输入后或视觉观察的CNN 编码后存在多少隐藏层。对于简单的问题,较少的层数可能训练得更快、更有效。对于更复杂的控制问题,则需要更多的层
vis_encode_type: simple # 用于编码视觉观察的编码器类型,默认值为simple
conditioning_type: hyper # 使用目标观察的策略的条件类型,默认值为hyper。none将目标观察视为常规观察,hyper(默认值)使用带有目标观察的超网络作为输入来生成策略的一些权重。应注意的是,当选择 hyper 时,网络的参数数量会大大增加,因此建议同时减少hidden_units的数量
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
threaded: false # 在更新模型时允许环境步进,默认为false。 这可能会导致训练加速,尤其是在使用 sac时。为获得最佳性能,请在使用自玩游戏时将设置保留为 false
checkpoint_interval: 10 # Trainer在每个检查点之间收集的经验数量。在删除旧的检查点之前,最多保存keep_checkpoints个检查点
keep_checkpoints: 5 # 默认为5,要保留的模型检查点的最大数量。 在checkpoint_interval选项指定的步数之后保存检查点。 一旦达到最大检查点数,保存新检查点时将删除最旧的检查点
max_steps: 500000 # 介于5E5 ~ 1E7,默认5E5。场景训练次数
time_horizon: 1000 #介于32 ~ 2048,默认为64。将Agent添加到经验缓冲区之前,所必须经历的训练步的数量。当在场景(用户自定义的训练场景,episode)结束之前达到此限制时,将使用价值估计来预测智能体当前状态的总体预期奖励。因此,该参数在偏差较小但方差较高的估计(长期)和偏差较大但变化较小的估计(短期)之间进行权衡。 在场景中经常有奖励的情况下,或者场景非常大的情况下,建议选较小的数字。通常, 这个数字应该足够大,以捕获Agent动作序列中的所有重要行为
summary_freq: 12000 #默认为50000,定义每次生成、显示训练统计数据之间需要收集的训练结果数量。该参数也决定了 Tensorboard 中图表的粒度
参考:https://github.com/Unity-Technologies/ml-agents/blob/release_19_docs/docs/Training-Configuration-File.md
学习资料:https://wenku.baidu.com/view/9971d911a02d7375a417866fb84ae45c3b35c226.html?wkts=1676517597779&bdQuery=ml-agent%E8%AE%AD%E7%BB%83%E5%8F%82%E6%95%B0