我正在为机器人应用程序运行一个SAC强化学习器,并取得了不错的成绩。我选择强化学习的原因之一是该领域的学习能力,例如调整以适应机械变化,例如磨损的轮胎或车轮稍微偏离对准状态。
我的加固学习器在启动时恢复了上次保存的权重和重播缓冲区,因此不需要在每次打开时都进行重新训练。但是,我最关心的是关于优化器的问题。
自ADAM以来,优化器已经走了很长一段路,但是我阅读的所有内容以及我看到的所有RL代码样本似乎仍然使用ADAM并具有固定的学习率。我想利用优化程序中的一些进步,例如一个周期的AdamW。但是,单周期优化器似乎不适合用于连续的现实世界中的强化学习问题:我认为这对于初始训练/校准来说是相当不错的,但是我希望最终的低学习率对机械变化的反应太慢。
我以为我可能会采用一种单周期方法进行初始训练,并且如果错误变化表明发生了某些变化,则触发较小的单周期重新启动(也许重新启动的大小可能基于错误更改的大小)。
除了ADAM之外,是否有人尝试过优化器以进行强化学习,或者对解决此类问题有任何建议?
答案 0 :(得分:1)
强化学习与传统的监督学习有很大的不同,因为随着政策的改进,培训数据的分布会发生变化。用优化术语来说,目标函数可以说是“非平稳的”。因此,我怀疑您的直觉可能是正确的-一段时间后,“单周期”优化器在您的应用程序中将无法正常运行。
我的问题是,亚当怎么了?通常,优化器的选择只是深度强化学习的次要细节;探索策略,算法超参数或网络体系结构等其他因素往往会对性能产生更大的影响。
尽管如此,如果您真的想尝试其他优化器,则可以尝试使用RMSProp,Adadelta或Nesterov Momentum。但是,我的猜测是,您将看到逐步的改进(如果有)。也许寻找更好的与亚当一起使用的超参数会更有效地利用时间。
编辑:在我最初的回答中,我声称选择特定的优化器对于增强学习速度并不重要,而对概括性学习也不重要。我想添加一些讨论来帮助说明这些要点。
考虑最深层的策略梯度方法的工作方式:它们从环境中采样经验轨迹,估算收益,然后执行一个或多个梯度步骤以改进参数化策略(例如,神经网络)。重复此过程,直到收敛(达到局部最优策略)为止。
为什么我们必须不断从环境中汲取新经验?因为我们当前的数据只能在一个小的 trust区域中提供用于收集该数据的策略参数周围的合理一阶近似值。因此,无论何时更新该政策,我们都需要采样更多数据。
可视化此方法的一个好方法是考虑一个MM algorithm。每次迭代时,都会根据我们现在拥有的数据构造一个替代目标,然后将其最大化。每次,我们都会接近真正的最优值,但是我们接近它的速度仅取决于我们构造的替代物的数量- ,而不是由我们用来最大化每个替代物的特定优化器< / em> 。与RMSProp相比,Adam可以用更少的梯度步长最大化每个代理,但这并不影响代理的学习速度(相对于环境样本)。它只是减少了您需要执行的小批量更新的数量。
SAC比这稍微复杂一点,因为它以非策略方式学习Q值,并使用经验重播进行更新,但是总的想法仍然成立。最佳的策略取决于重放内存中的当前数据。无论我们使用哪种优化程序,我们都需要从环境中采样大致相同数量的数据以收敛到最佳策略。
那么,您如何制定更快(更有效采样)的策略梯度方法?您需要从根本上更改RL算法本身。例如,PPO的学习速度总是快于TRPO,因为约翰·舒尔曼(John Schulman)和合著者发现了一种不同的,经验性更好的方法来生成政策梯度步骤。
最后,请注意这里没有泛化的概念。我们有一个要优化的目标函数,一旦我们对其进行优化,我们就尽力解决了任务。这就是为什么我怀疑"Adam-generalizes-worse-than-SGD"问题实际上与RL无关。
答案 1 :(得分:0)
我的初始测试表明优化器的细节及其超参数很重要,至少对于非策略技术而言。我没有机会尝试PPO或策略技术,因此很遗憾,我不能为那些人代言。
稍微谈谈@Brett_Daley的深思熟虑的响应:优化器无疑是次重要的特征之一。探索的手段以及使用良好的优先级重播缓冲区无疑是至关重要的因素,尤其是在获得良好的初始结果方面。但是,我的测试似乎表明,优化器对于微调非常重要。
我一直在使用的非策略方法在稳定性方面存在问题。换句话说,RL找到了最正确的解决方案,但从来没有真正追求完美的解决方案(或者如果找到它的时间很短,就会逐渐消失)。我怀疑优化器至少是部分原因。
我做了一些测试,发现改变ADAM学习速率具有明显的效果。太高了,演员和评论家都在最低限额附近反弹,从不收敛于最佳政策。在我的机器人应用程序中,RL似乎总是做出次优的决定,好像每次操作都会有些随机探索,总是会略微遗漏标记。
OTOH,较低的学习率往往会卡在次优解决方案中,并且无法适应变化(例如,由于电池电量低而导致的电机响应变慢)。
我尚未针对学习率进行任何单周期时间表或AdamW的测试,但我进行了非常基本的测试,对Actor和Critic进行了两阶段学习率调整(从高速率开始,然后下降降低到较低的比率),结果显然是一种更精确的解决方案,可以在高学习率时迅速收敛,然后在低学习率时得到更好的磨练。
我认为AdamW更好的权重衰减正则化可能会产生类似的更好结果,从而避免过度拟合训练批次而导致缺少最佳解决方案。
基于我看到的改进,可能值得尝试单周期方法,而对于演员和评论家网络来说,使用AdamW来调整结果。我仍然担心周期结束时较低的学习率将如何适应环境的变化,但是一个简单的解决方案可能是监视损失并在学习率漂移太大时重新开始学习。无论如何,似乎都需要进行更多测试。