Machine learning 最佳强化学习优化器

Machine learning 最佳强化学习优化器,machine-learning,reinforcement-learning,Machine Learning,Reinforcement Learning,我正在为一个机器人应用程序运行一个SAC强化学习程序,结果相当不错。我选择强化学习的一个原因是为了在现场学习的能力,例如适应机械变化,如磨损的轮胎或车轮稍微失准 我的强化学习器会在启动时恢复上次保存的权重和重放缓冲区,因此无需每次打开它时重新训练。然而,我关心的一个问题是优化器 自ADAM以来,优化器已经取得了长足的进步,但我读到的所有内容和看到的所有RL代码示例似乎仍然以固定的学习率使用ADAM。我想利用优化器的一些进步,例如单周期AdamW。然而,单周期优化器似乎不适合于连续的真实强化学习问

我正在为一个机器人应用程序运行一个SAC强化学习程序,结果相当不错。我选择强化学习的一个原因是为了在现场学习的能力,例如适应机械变化,如磨损的轮胎或车轮稍微失准

我的强化学习器会在启动时恢复上次保存的权重和重放缓冲区,因此无需每次打开它时重新训练。然而,我关心的一个问题是优化器

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

我的一个想法是,可能对初始训练采用一个周期的方法,如果错误变化表明发生了变化,则触发较小的一个周期重新启动(重新启动的大小可能基于错误变化的大小)


除了ADAM,是否有人尝试过使用优化器进行强化学习,或者对处理此类问题有什么建议?

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

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

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


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

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

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

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

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

那么,如何使策略梯度方法更快(更有效)呢?您需要从根本上改变RL算法本身。例如,几乎总是比其他人学得更快,因为约翰·舒尔曼(John Schulman)及其合著者找到了一种不同的、经验上更好的方法来生成政策梯度步骤


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

我的初始测试表明优化器的细节及其超参数很重要,至少对于非策略技术是如此。我没有机会对PPO或政策技巧进行太多的实验,所以很遗憾,我不能代表那些人说话

对于@Brett_Daley深思熟虑的回答,可以说:优化器当然是不太重要的特性之一。探索的方法和使用良好的优先级重放缓冲区无疑是关键因素,尤其是在获得良好的初始结果方面。然而,我的测试似乎表明优化器对于微调变得非常重要

我一直使用的非策略方法在细粒度稳定性方面存在问题。换句话说,RL找到了最正确的解决方案,但从来没有真正磨练出完美的解决方案(或者,如果它确实短暂地找到了,它就会偏离)。我怀疑优化器至少要承担部分责任

我做了一些测试,发现