右图为reward曲线
于是找了很多该算法的复现来对比到底是哪里出了问题。花了大量的时间确认了复现的DDPG算法的决策和更新流程都没有问题之后,我把目光转向了超参数的设定上,最终发现
critic
的学习率通常需要设置的比
actor
大一点。在将
critic net
的学习率改大之后,DDPG算法终于表现出很好的性能,得到了漂亮的
reward
曲线,如图2所示。
图2 修改critic lr之后的学习效果,左图为critic loss,右图为reward曲线
在解决了该问题后,引出了一个问题,DDPG算法中的
actor
和
critic
的学习率为什么需要不同才可我使该算法很好的work。为此我也在网上找到了关于该问题的探讨。总结下来大概有如下几种解释:
actor
和
critic
的学习率是两个需要调整的超参数,这样设置是在实践中发现比较好的结果
如果
actor
比
critic
更新的更快,那么估计的Q值不能够真实反映动作的价值,因为
critic
的Q值函数是基于过去的策略估计出的
因为
actor
输出的是具体动作,通常是
bounded
,因此学习率可以小一点,而
critic
学习的目标是折扣奖励的期望,通常是无界的,需要学习率大一点。
source:
Why
different learning rates for actor and critic : r/reinforcementlearning
(reddit.com)
为了进一步探究这两个参数的设置对于学习的影响,我用DDPG算法在
Pendulum-v1
进行了一系列的实验。
固定
actor
的学习率为
3e-4
,改变
critic
的学习率,得到实验结果如下图:
固定
critic
的学习率为
3e-4
,改变
actor
的学习率,得到实验结果如下图:
保持
actor
和
critic
的学习率相同,同时改变两者的学习率,得到实验结果如下图:
由以上实验结果可以得出以下结论:
在
actor
学习率不变的情况下,
critic
的学习率适当增大可以加快收敛速度,
critic
如果设置过小可能会导致收敛较慢甚至学习不收敛。
在
critic
学习率过小导致网络很难收敛时,只调整
actor
的学习率无法使网络收敛
actor
和
critic
的学习率在一致的情况下也是可以收敛的,但需要选择合适的参数才可以得到较好的学习效果。
因此,在使用DDPG算法时,
critic
网络相比于
actor
网络的学习率可以适当调大,可以得到一个较好的收敛效果。