深度强化学习报道
文章作者:Keavnn(stepneverstop.github.io/)
编辑:DeepRL
https://arxiv.org/pdf/1707.01495.pdf
本文介绍了一个“事后诸葛亮”的经验池机制,简称为HER,它可以很好地应用于稀疏奖励和二分奖励的问题中,不需要复杂的奖励函数工程设计。强化学习问题中最棘手的问题之一就是稀疏奖励。本文提出了一个新颖的技术:Hindsight Experience Replay (HER),可以从稀疏、二分的奖励问题中高效采样并进行学习,而且可以应用于所有的Off-Policy算法中。
意为"事后",结合强化学习中序贯决策问题的特性,我们很容易就可以猜想到,“事后”要不然指的是在状态s下执行动作a之后,要不然指的就是当一个episode结束之后。其实,文中对常规经验池的改进也正是运用了这样的含义。
" HER lets an agent learn from undesired outcomes and tackles the problem of sparse rewards in Reinforcement Learning (RL).——Zhao, R., & Tresp, V. (2018). Energy-Based Hindsight Experience Prioritization. CoRL."
使智能体从没达到的结果中去学习,解决了强化学习中稀疏奖励的问题。
二分奖励 binary reward
简言之,完成目标为一个值,没完成目标为另一个值。如:
奖励 sparse reward
简言之,完成目标的episode太少或者完成目标的步数太长,导致负奖励的样本数过多
文中精要
在机器人领域,要想使强化学习训练它完美执行某任务,往往需要设计合理的奖励函数,但是设计这样的奖励函数工程师不仅需要懂得强化学习的领域知识,也需要懂得机器人、运动学等领域的知识。而且,有这些知识也未必能设计出很好的奖励函数供智能体进行学习。因此,如果可以从简单的奖励函数(如二分奖励)学习到可完成任务的模型,那就不需要费心设计复杂的奖励函数了。
文中介绍了一个例子来引入HER:
当序列长度大于40时,传统的强化学习算法就算有各种探索机制的加持,也不能学会解决这个问题,因为这个问题完全不是缺乏探索,而是状态太多,探索不完,导致奖励极其稀疏,算法根本不知道需要优化的目标在哪里。
为了解决这个问题,作者指出了两个思路:
,即奖励函数为当前状态与目标状态的欧氏距离的负数),将训练的算法逐步引导至奖励函数增大的决策空间。但是这种方法可能很难应用于复杂的问题中。
HER
"The pivotal idea behind our approach is to re-examine this trajectory with a different goal — while this trajectory may not help us learn how to achieve the state g, it definitely tells us something about how to achieve the state ."
HER的主要思想就是:为什么一定要考虑我们设定的目标呢?假设我们想让一个智能体学会移动到某个位置,它在一个episode中没有学到移动到目标位置就算失败吗?假定序列为,目标为,我们何不换一种思路考虑:如果我们在episode开始前就将目标状态设置为,即,那么这样看来智能体不就算是完成目标了吗?
就是运用了这个思想对经验池进行了扩充,将稀疏奖励问题给转化成非稀疏奖励,大大的扩展了经验池中完成任务的经验数量。
HER主要特点:
tf.concat(s,g)
HER的几种扩展方式:
训练结果
final模式与future模式对比
结果分析:
结果分析:
前文已经说过,reward shaping可以简单理解为将奖励函数设置为某些变量的函数,如,即奖励函数为当前状态与目标状态的欧氏距离的负数
结果分析:
1. 判定完成目标的条件和要优化的问题有巨大的矛盾(虽然我也不理解这到底是什么意思,索性就直接抄了过来)
2. reward shaping阻碍了探索
研究结果表明,与领域无关的reward shaping效果并不好
结果分析:
注:作者根据 future 模式提出了最近邻的 future 模式,即把设置为,并且进行了实验,实验结果不如 future 模式。
原文内容请查看Github仓库(欢迎Star, Fork)
https://github.com/NeuronDance/DeepRL/tree/master/DRL-PaperWeekly
Keavnn Blog: https://stepneverstop.github.io
GitHub仓库
https://github.com/NeuronDance/DeepRL