首页 > 解决方案 > 最佳强化学习优化器

问题描述

我正在为机器人应用程序运行 SAC 强化学习器,结果相当不错。我选择强化学习的原因之一是能够在该领域进行学习,例如适应机械变化,例如磨损的轮胎或车轮有点不对齐。

我的强化学习器会在启动时恢复它上次保存的权重和重播缓冲区,因此每次打开它时都不需要重新训练。但是,我担心的一个问题是优化器。

自 ADAM 以来,优化器已经走了很长一段路,但我阅读的所有内容和我看到的所有 RL 代码示例似乎仍然使用具有固定学习率的 ADAM。我想利用优化器的一些进步,例如一个循环 AdamW。然而,单周期优化器似乎不适合连续的现实世界强化学习问题:我认为它对于初始训练/校准非常好,但我预计低最终学习率会对机械变化做出反应太慢。

我的一个想法可能是为初始训练做一个单周期方法,如果错误的变化表明某些事情发生了变化,则触发一个较小的单周期重新启动(也许重新启动的大小可能基于错误变化)。

是否有人尝试过 ADAM 以外的优化器来进行强化学习,或者对处理此类问题有任何建议?

标签: machine-learningreinforcement-learning

解决方案


强化学习与传统的监督学习有很大不同,因为训练数据分布随着策略的改进而变化。在优化方面,目标函数可以说是非平稳的。出于这个原因,我怀疑您的直觉可能是正确的——“单周期”优化器在您的应用程序中运行一段时间后会表现不佳。

我的问题是,亚当有什么问题?通常,优化器的选择是深度强化学习的一个次要细节。探索策略、算法超参数或网络架构等其他因素往往会对性能产生更大的影响。

不过,如果您真的想尝试其他优化器,您可以尝试使用 RMSProp、Adadelta 或 Nesterov Momentum。但是,我的猜测是,如果有的话,您会看到增量改进。也许寻找更好的超参数与 Adam 一起使用会更有效地利用时间。


编辑:在我最初的回答中,我声称特定优化器的选择对于强化学习速度并不重要,泛化也不重要。我想添加一些有助于说明这些观点的讨论。

考虑大多数深度策略梯度方法是如何运作的:它们从环境中采样经验轨迹,估计回报,然后执行一个或多个梯度步骤来改进参数化策略(例如神经网络)。这个过程重复直到收敛(到局部最优策略)。

为什么我们必须不断地从环境中汲取新的体验?因为我们当前的数据只能在用于收集该数据的策略参数周围的一个小的信任区域内提供合理的一阶近似值。因此,每当我们更新策略时,我们都需要对更多数据进行采样。

将其可视化的一个好方法是考虑MM 算法。在每次迭代中,都会根据我们现在拥有的数据构建一个替代目标,然后将其最大化。每次,我们都会更接近真正的最优值,但我们接近它的速度仅取决于我们构建的代理项的数量——而不是我们用来最大化每个代理项的特定优化器。与 RMSProp 相比,Adam 可以在更少的梯度步骤中最大化每个代理,但这不会影响代理的学习速度(相对于环境样本)。它只是减少了您需要执行的小批量更新的数量。

MM 算法

SAC 比这要复杂一些,因为它以非策略方式学习 Q 值并使用经验回放进行更新,但总体思路是成立的。最佳可达到的策略取决于我们重放内存中的当前数据是什么;无论我们使用哪种优化器,我们都需要从环境中抽取大致相同数量的数据以收敛到最优策略。

那么,如何制定更快(更高效)的策略梯度方法?你需要从根本上改变 RL 算法本身。例如,PPO几乎总是比TRPO学得更快,因为 John Schulman 和合著者发现了一种不同的、经验上更好的方法来生成策略梯度步骤。

最后,请注意这里没有泛化的概念。我们有一个我们想要优化的目标函数,一旦我们优化它,我们就已经尽可能地解决了这个任务。这就是为什么我怀疑“Adam-generalizes-worse-than-SGD”问题实际上与 RL 无关。


推荐阅读