可视化强化学习代理的进度

时间:2018-12-09 06:08:11

标签: visualization reinforcement-learning

我看到了很多帖子,这些帖子都显示了培训持续进行中增强剂的改进。他们通常跟踪所有奖励的总和或获胜百分比的移动平均值,但是我认为我从未读过他们实际上是如何做到的。我应该将所有会话的结果导出到CSV文件,然后可视化吗?当然,可视化部分并不难,但是我一直想知道他们是如何首先收集数据的。

1 个答案:

答案 0 :(得分:0)

您的问题实质上是关于收集情节中获得的奖励总和或评估业务代表的成功率。两种方法完全取决于程序员。

在第一种情况下,通常是通过实现一种方法来完成,该方法执行一个完整的情节并返回有关情节中发生的情况的信息。您可以返回几个不同的统计信息,而这仅与您的偏好有关-您想跟踪什么。对于奖励总和,您可以设置一个变量(即total_reward),初始值为0,然后在每个步骤中将观察到的奖励添加到该变量中。然后,您可以在剧集结尾返回此变量的值。您可以在外部循环中为每个情节收集这些值-如您所述,在学习完成后可视化它们并不困难。

在评估成功率的情况下,您可以尝试几种方法。您可以向上述方法添加其他信息-情节是否成功结束(即is_success)。如果您为每个情节收集了这样的布尔值,则可以通过计算“成功情节”的百分比(每10个或更多情节)来汇总信息,然后将其绘制出来。

此方法的缺点是,由于代理在执行情节时使用的探索技术,因此这些结果可能不准确。如果勘探技术的影响太大,已经学过的特工通常无法取得成功。这就是为什么经常使用另一种方法来提高成功率的原因:每隔指定的次数后,您就可以在评估循环中运行您的特工,让他在不增加任何探索技巧的情况下选择行动(并且在此过程中您不会培训特工!)。评估循环可以由任意数量的 N 个此类测试情节(测试情节越多,评估越准确)组成,您可以通过简单地计算成功情节并将该数字除以来计算成功率 N 。您可以保存评估的成功率,并在训练过程中记录下来/在训练结束后可视化它们。当然,您可以在绘制值之前计算移动平均值(不过我相信我不必在这里解释此计算)。

我个人更经常使用第二种方法-但您可以清楚地看到,这种方法增加了更多的时间开销。如果您每10个情节运行一次评估循环,并且该循环由10个测试情节组成,则您大约将程序执行时间加倍。因此,如果性能已经成为问题,并且勘探技术会随着时间的推移而逐渐衰减,那么您最好使用第一个更简单的版本。

我要说的最后一点是-请注意,对于总的奖励,您实际上可以执行相同的操作-而不是使用我所解释的收集的值,这里还可以选择评估循环。因为这些值通常都很嘈杂,并且不太希望它们精确(更重要的是了解趋势),所以我从未见过有人这样做。但是,尽管如此,您应该意识到一个选择很多,而这一切都取决于您需要这些值的精确程度以及可以承受的开销。