在使用广义时序差分的标准强化学习算法中(例如SARSA、Q-learning),一个常见的问题是对于特定任务应使用什么样的lambda和gamma超参数值。
我理解lambda与资格迹的长度有关,gamma可以被解释为对未来奖励的折扣程度,但是我如何知道我的lambda值对于某个任务来说是否太低,或者我的gamma值是否太高呢?
我意识到这些问题没有明确的答案,但了解一些关于不适当值的“红旗”将会非常有用。
以标准的推车摆或倒立摆任务为例。我应该将gamma设置得较高,因为完成任务需要很多步骤,还是设置得较低,因为状态信息是完全马尔可夫的?至于lambda值的合理设置,我甚至无法想象……
回答:
Gamma
通常,gamma被视为问题的一部分,而不是算法的一部分。强化学习算法试图为每个状态优化累积折扣奖励:
r1 + gamma*r2 + gamma^2*r3 + gamma^3*r4 ...
其中rn
是当前状态在时间步n
接收到的奖励。因此,对于一种gamma选择,算法可能优化一件事,而对于另一种选择,它将优化另一件事。
然而,当你定义了一个特定的高层次目标时,通常仍然存在建模选择,因为许多不同的gamma可能满足目标的要求。例如,在推车摆中,目标是无限期地平衡杆子。如果每一步平衡时给予+1的奖励,那么所有gamma > 0的策略(即始终平衡杆子的策略)都是最优的。然而,不同gamma值对次优策略的排序——这决定了朝向此目标的学习特性——将会不同。
一般来说,大多数算法在不需要看得太远的未来时学习得更快。因此,有时将gamma设置得相对较低有助于提高性能。一个普遍的经验法则是:确定最低的gamma min_gamma
,它仍然满足你的高层次目标,然后将gamma设置为gamma = (min_gamma + 1)/2
。(你不希望使用gamma = min_gamma
本身,因为这样一些次优目标将被认为几乎与所需目标一样好。)另一个有用的经验法则是:对于许多问题,gamma为0.9或0.95是可以的。然而,总是要考虑这样的gamma在结合你的奖励函数时对你正在优化的目标意味着什么。
Lambda
lambda参数决定了你对早期学习的值进行引导的程度,还是使用当前的蒙特卡洛展开。这意味着在更多偏差(低lambda)和更多方差(高lambda)之间进行权衡。在许多情况下,将lambda设置为零已经是一个不错的算法,但将lambda设置得稍高一些有助于加速过程。在这里,你不必担心你在优化什么:目标与lambda无关,这个参数仅有助于加速学习。换句话说,lambda完全是算法的一部分,而不是问题的一部分。
一个普遍的经验法则是使用0.9的lambda。然而,可能最好只是尝试几个设置(例如,0, 0.5, 0.8, 0.9, 0.95和1.0),并绘制学习曲线。然后,你可以选择看起来学习速度最快的设置。