unity 的 ml-agents 导弹(智能体)攻击无人机的场景 如何设置 time_horizon 参数值?
1:常用训练参数模块
-
time_horizon: (default =
64
) 这个参数决定了在多少步数之后,开始把收集到的经验数据放入到经验池(experience buffer)。这个量同样也决定了使用多少步后的采样来对当前动作的预期奖励进行训练。简单来说,这个值如果越大,就相当于你更接近于一局(episode)游戏的真实回报,从而偏差更小。但是由于要进行一局游戏才能更新一个动作的奖励预期,这个过程相当的长,并且每局游戏可能情况变化很大。不同局之间,做同样的动作可能最终收益大相径庭(因为这个动作可能其实对这个游戏的影响根本没有那么大),从而导致方差较大。反过来,当你采样的步数太小,可能对最终的奖励预估会偏差很大,但是可能带来较小的方差。其实这也跟机器学习里面经典的简单模型复杂模型(过拟合欠拟合)问题一样,需要在方差和偏差当中取一个平衡。官方建议当你的环境太大(跑一步耗时太长)或者你设置的奖励比较密集的时候,可以把这个值设的低一点,反之则需要增大。比如在足球比赛这样奖励非常稀疏的任务当中,范例文档设置的该参数值为1000。 注意,这个参数决定了采样的步数,和batch_size、 buffer_size、 epoch等参数亦有联系。后面提到这些参数的时候会再对其中关系加以说明。常见范围:32 - 2048
在 Unity 的 ML-Agents 中,time_horizon
参数用于影响优势函数(advantage function)计算时,环境反馈的时间尺度。对于导弹攻击无人机的场景,time_horizon
设定的关键在于平衡即时反馈与长期结果:
考虑因素:
-
目标时间尺度:导弹追踪无人机的时间大多较短,因此
time_horizon
不应设得过大,否则会延缓奖励的传播,降低训练效率。较小的time_horizon
更有利于短期动作的学习。 -
场景复杂度:如果导弹在追踪过程中需要规避障碍,避开动态危险等,
time_horizon
可适当调大一些,以鼓励更长时间内的策略规划。 -
奖励延迟:如果奖励信号(如成功击中目标)是在完成多个复杂动作后才出现,建议调高
time_horizon
,确保智能体能根据长远的反馈调整策略。
建议值:
-
简单场景:如果场景较为简单,比如导弹只需要追踪无人机,且飞行距离较短,可以尝试较小的值,如 32 或 64。
-
复杂场景:如果场景包括规避障碍或飞行路线较长,则可以尝试 128 或更高,甚至 256。
你可以逐步调整 time_horizon
的值,观察智能体的表现,并结合训练稳定性和收敛速度来确定最合适的数值。