混沌代理——Breakout基线 #3
正如莎士比亚曾写道:
利用还是探索,这是个问题。
是默然忍受已知安全策略的微薄回报,
还是挺身反抗未知状态的海洋,
通过探索发现更好的策略?
这家伙真是超前于他的时代啊!今天我们将深入探讨,在我们仍不完美的MinAtar Breakout智能体中,熵奖励如何影响策略动态。希望到最后,我们能找到一些明确的迹象,以判断熵奖励是过高还是过低。
上回回顾
如果你错过了前几篇文章,这里快速回顾一下:
我们在Gymnax MinAtar Breakout环境中运行了一个PPO Actor-Critic智能体(过程中学习了JAX)。结果起初很差,平均回合奖励仅为3.98,而基线是28。通过一些系统可视化,我们发现PPO损失中排除了熵奖励的错误。修复这个错误后,智能体的平均回合奖励大幅提升至9.81!呃……好吧,也许“大幅”用词不当。
但我们仍有一些疑问:是否有迹象能更早告诉我们熵奖励太低?下次我们能更快发现这类问题吗?
单一思维模式
让我们从类似上回处理的错误 regime 开始,设置极低的熵奖励。既然我们知道要关注什么——一个没有探索欲望的智能体,让我们重新检查已有的一些数据。我将熵系数设置为0.0005。在所有实际目的中,熵在PPO损失中将不起作用。
首先,播放和显著图。我们将在播放中添加一个小补充:在帧的右侧添加另一个图表,显示智能体随时间的熵。也许我们能从中获得一些额外见解。
分析
关于这个播放,有几件事立即引起了我的注意:
首先,看右上角的图表。动作概率几乎总是100%。右下角随时间变化的熵图表进一步证明了这一点,它基本上一直保持在0。
我们还看到价值估计完全平坦。让我们也留意这一点,也许随着熵奖励的调优,这会改变。
最后,我们看到非常僵化的注意力通道,就像我上一篇文章中看到的那样。
嗯……还有其他我认为可以明确归因于极低熵系数的吗?我认为没有。
要点
当查看动作概率时,过低的熵奖励立即变得明显,因为智能体总是100%确定要采取的动作。
可能还有其他迹象,但我还不确定。像非常僵化的注意力这样的事情可能对于低熵奖励的智能体是常见的。我们必须在处理其他基线时重新讨论这一点。
这里还有我好奇的事情。就像我上一篇文章中为失败状态制作的热图一样,如果我们为熵制作一个热图呢?那会告诉我们什么吗?
我用Matplotlib快速编写了一个热图,根据球和挡板的位置给出平均熵,并按最大平均值归一化。让我们看看:
分析
嗯,乍一看,这个热图似乎信息量不大。但这本身就是一个发现。智能体的熵几乎处处接近零,所以只有少数几个点我们得到一些熵,意味着热图看起来非常稀疏。
要点
过低的熵奖励很容易通过熵热图识别,因为它看起来非常斑点状。
松散模式
好吧,现在让我们完全转向光谱的另一端。我们刚刚看了极低的熵奖励,现在看看极高的熵奖励。智能体应该想要大量探索,这应该导致一个非常不同的故事。
我将熵系数设置为0.5。我期望熵奖励完全饱和PPO损失,并淹没实际的环境奖励。
让我们看看我们的播放,看看智能体在做什么:
分析
哇,这是一个很短的推演!智能体基本上无法在任何动作之间决定,因此只是随机执行。我们可以看到所有动作概率基本上始终相等。不确定性图表基本上一直保持在最大熵。
价值估计再次完全平坦。像上次一样,让我们注意它,看看是否随着更好的调优而改善。
有趣的是,我们还看到注意力基本上是随机的。我想当最佳奖励来自熵奖励和选择随机动作时,模型没有理由学习任何有用的注意力。
要点
当查看动作概率时,过高的熵奖励立即变得明显,因为智能体总是完全不确定要采取的动作。
此外,随机注意力是学习信号有问题的迹象,尽管它可能不是过高熵奖励独有的。
好吧,那里有一些可靠的要点。不过没有什么太令人惊讶的。有趣的是,如果你记得我们上一篇文章的最终播放,注意力看起来非常相似。我在这里冒险猜测,我们上一篇文章留下的熵系数0.1太高了。
好吧,让我们看看熵热图,看看那里是否有任何有趣的事情:
分析
这是一个可靠的结果!因为智能体的熵在它去的所有地方都很高,地图没有向我们展示不确定性的有趣变化。相反,它本质上只是一个访问地图,突出了智能体被困的状态集。
要点
过高的熵奖励在查看熵热图时立即变得明显,因为它只是一个访问地图。
很明显,两种极端都会导致糟糕的性能。一个智能体什么也没学到,因为它从未离开舒适区,而另一个智能体什么也没学到,因为奖励信号完全被随机激励淹没。显然,我们需要在探索和利用之间找到健康的平衡。
平衡行为
好吧。我们已经看到了光谱的两个极端,即熵奖励过多或过少。现在让我们看几个中间的例子,看看是否能从这些 regime 中收集到任何信息。
对于这两个,我将熵系数设置为0.5,我们称之为强例子,和0.005,我们称之为弱例子。这应该能让我们很好地看到极端之间的景观。
首先,让我们观看我们的智能体以强熵奖励玩耍。
还有我们的弱熵奖励。
分析
好吧,这些智能体看起来比我们的两个极端好多了。它们都能够玩更长的游戏(并因此获得更高的奖励)。
但除此之外,还有其他一些要注意的事情。首先,结果似乎是我们两个极端情况的灰色阴影。这说得通:弱智能体,熵奖励较低,偏向利用,而强智能体偏向探索。我们正在看到经典的权衡在行动。
强熵奖励智能体仍然大部分时间处于最大熵,直到非常特定的时刻,它突然决定一个动作是正确的,然后熵极低。
我们还看到看似随机的注意力,就像我们的极端高情况一样,尽管我假设那里有一些结构,因为智能体在跟随球。
另一方面,弱熵奖励智能体通常对其动作非常自信,并且大部分时间处于0熵,尽管我们看到其他动作的峰值。
它仍然有非常静态的注意力,就像极端低情况一样,尽管你可以看到注意力随着球移动而明显波动。
最后,第一次,我们看到了两个智能体价值估计的微小变化!除了更长的推演之外,这是我们朝着正确方向前进的最大迹象。
弱智能体在这个推演中似乎比强智能体表现更好。我们必须等待,看看最终平均回合奖励是否得出相同的结果。
要点
不确定性的波动是健康熵奖励的标志。
那些智能体现在看起来真的很好。我们似乎已经为我们的智能体找到了一个良好的熵系数范围。让我们看看熵热图,看看它们讲述了什么故事。
首先是强智能体:
还有我们的弱智能体:
分析
球熵热图看起来都健康得多。熵似乎遵循一些固定模式,在边缘和砖块附近熵较高,在环境中间熵较低。这种模式的一个可能解释是,当球在可预测的、开放的屏幕中间时,智能体更确定。当球靠近边缘或砖块时,它变得更不确定,那里的反弹更难预测。
另一件要注意的事情:强智能体似乎让球在更多的位置。所以不像我们的单一环境推演,这个热图指向强智能体表现更好!嗯……我们必须看看平均回合奖励告诉我们什么。
挡板熵图没有提供太多信息。
要点
完整但有结构的熵热图是熵奖励处于健康范围的良好指标。
一点点熵
所以,似乎有一些明显的区别,如果你知道要寻找什么,就很容易识别。希望有了今天的要点,我们将能够更好地发现健康与不健康的熵奖励。
还有最后一件事要做。让我们决定使用这些熵系数中的哪一个继续前进。目前,随着我们上一篇文章随机选择的熵系数0.1,我们处于9.81平均回合奖励,而基线是28。让我们再次运行所有智能体,看看它们的平均回合奖励是多少。
| 熵系数 | 平均回合奖励(1024次运行) |
|---|---|
| 0.5 | 6.33 |
| 0.1 | 9.81 |
| 0.05 | 15.53 |
| 0.005 | 6.47 |
| 0.0005 | 5.07 |
分析
0.05是我们的明显赢家,平均奖励为15.53!
这里有一个漂亮的曲线,极端值导致糟糕的性能,中间值改善性能。有趣的是,似乎偏爱较高的熵奖励比较低的更有益。
这些结果中有些地方让我不太满意。基于我们的可视化,0.005系数智能体,我们的弱智能体,似乎比我们的0.5单一思维模式智能体健康得多。但在平均回合奖励表中,它们似乎性能相当。也许平均没有讲述整个故事。让我们也看看最大值和最小值。
| 系数 | 平均 | 最小值 | 最大值 |
|---|---|---|---|
| 0.5 | 6.33 | 4 | 9 |
| 0.1 | 9.81 | 5 | 14 |
| 0.05 | 15.53 | 15 | 16 |
| 0.005 | 6.47 | 6 | 7 |
| 0.0005 | 5.07 | 4 | 6 |
分析
好吧,这有助于澄清事情!高熵系数智能体的性能方差很大,因为它们只是执行随机动作,所以它们的平均值可能具有误导性。
要点
也许相当明显,为智能体选择较高的熵奖励将导致其最终性能的较高方差。
这澄清了事情。0.05智能体不仅提供最高的平均奖励,而且提供强大而一致的性能。
15.53!再次,从上一次我们所在的位置取得了巨大的改进收益。我们正在逐渐接近那个28基线。在仔细探索熵奖励之后,我们获得了一些关于如何识别智能体在光谱中位置的重要见解。然后,使用这些信息,我们能够就调整熵的方向做出明智决定,从而产生性能更好的智能体!
不过,我们还没有达到基线。所以,让我们看看下次是否能达到它。虽然我们到目前为止一直在使用MLP,但我认为是时候转向一个更适合空间数据的架构,即我们从MiniAtar Breakout获得的像素输入。下次让我们深入探讨CNN,看看如何最好地调整它们以打破那个基线!