尝试设计奖励函数时有哪些最佳实践?

人工智能 强化学习 奖励设计 奖励函数 奖励塑造 逆rl
2021-11-12 08:56:27

一般来说,在尝试为强化学习代理定义奖励函数时,是否有可遵循的最佳实践程序?定义奖励函数时有哪些常见的陷阱,您应该如何避免它们?在处理问题时,您应该考虑问题中的哪些信息?

让我们假设我们的环境是完全可观察的 MDP。

2个回答

设计奖励函数

如果您了解问题,设计奖励函数有时很简单。例如,考虑国际象棋游戏。你知道你有三种结果:赢(好)、输(坏)或平局(中性)。所以,你可以奖励代理+1如果它赢得比赛,1如果它输了,并且0如果它平局(或任何其他情况)。

然而,在某些情况下,奖励函数的规范可能是一项艰巨的任务 [ 1 , 2 , 3 ],因为有许多(通常是未知的)因素会影响 RL 代理的性能。例如,考虑驾驶任务,即您想教代理驾驶例如汽车。在这种情况下,有很多因素会影响驾驶员的行为。我们如何将这些因素纳入奖励函数中?我们如何处理未知因素?

因此,设计奖励函数通常是一个反复试验和工程过程(因此没有神奇的公式可以告诉您如何在所有情况下设计奖励函数)。更准确地说,你根据你对问题的了解定义了一个初始奖励函数,你观察代理的表现,然后调整奖励函数以获得更好的性能(例如,在可观察的行为方面,所以在收集的奖励方面;否则,这将是一个简单的问题:您可以设计一个奖励函数,在所有情况下为代理提供无限奖励!)。例如,如果您训练了一个 RL 智能体下棋,也许您观察到该智能体需要很长时间才能收敛(即找到下棋的最佳策略),因此您可以设计一个新的奖励函数来惩罚代理每一个不赢的举动(也许它会快点!)

当然,这种试错法并不理想,而且有时可能不切实际(因为可能需要花费大量时间来训练智能体)并导致错误指定的奖励信号。

奖励指定错误

众所周知,错误指定奖励函数可能会产生意想不到的甚至危险的后果 [ 5 ]。为了克服奖励的错误指定或改进奖励功能,您有一些选择,例如

  1. 从演示中学习(又名学徒学习),即不直接指定奖励函数,而是让 RL 智能体模仿另一个智能体的行为,要么

    • 直接学习策略(称为模仿学习[ 8 ]),或
    • 先学习奖励函数,然后再学习策略(称为逆强化学习[ 1 ] 或有时称为奖励学习
  2. 在RL算法中加入人类反馈[ 9 ](以交互方式)

  3. 将在另一个但相似的环境中学习到的策略中的信息转移到您的环境中(即对 RL [ 10 ]使用某种转移学习)

当然,这些解决方案或方法也可能有其缺点。例如,交互式人工反馈可能很乏味。

奖励塑造

关于常见的陷阱,虽然奖励塑造(即用更多奖励增加自然奖励函数)通常被建议作为提高 RL 算法收敛性的一种方式,但 [ 4 ] 指出应该谨慎使用奖励塑造(和进度估计器)。如果你想执行奖励塑造,你可能应该使用基于潜力的奖励塑造(保证不会改变最优策略)。

进一步阅读

MathWorks 的文章Define Reward Signals讨论了连续离散的奖励函数(这也在 [ 4 ] 中进行了讨论),并指出了它们的一些优点和缺点。

最后但同样重要的是,RL 圣经的第 2 版包含一个完全致力于该主题的部分( 17.4 设计奖励信号)。

另一个类似的问题也被问到这里

如果您的目标是让智能体达到某个目标(例如,达到某个目标),那么有效的奖励函数是在达到目标时分配奖励 1,否则分配 0。这个奖励函数的问题是它太稀疏了,这意味着代理几乎没有关于如何修改他们的行为以更好地实现所述目标的指导,特别是如果首先通过随机策略很难实现目标(这可能大致是代理开始的内容)。

修改奖励函数以指导学习代理的做法称为奖励塑造

一个好的开始是奖励转换下的政策不变性: Ng 等人的奖励塑造的理论和应用。这个想法是在现有奖励之上创建奖励潜力(参见定理 1)。这种奖励潜力应该是给定状态的真实价值的近似值。例如,如果您有一个网格世界场景,其中目标是让代理到达某个目标方格,您可以根据到该目标的曼哈顿距离(不考虑障碍物)创建奖励潜力,这是真实情况的近似值给定位置的值。

直观地说,创建一个接近真实值的奖励潜力使学习代理的工作更容易,因为它减少了短视的缺点,并且代理更快地接近“有点好”的策略,从中更容易向最优策略爬行。

此外,奖励潜力具有与最优策略一致的特性。也就是说,在新的修改问题(使用新的奖励函数)下,真正问题的最优策略不会变得次优。