为什么 Q-Learning 在测试时使用 epsilon-greedy?

机器算法验证 机器学习 强化学习 q学习
2022-01-30 14:52:55

在 DeepMind 关于 Atari 视频游戏的深度 Q-Learning 的论文(此处)中,他们在训练期间使用 epsilon-greedy 方法进行探索。这意味着当在训练中选择一个动作时,它要么被选为具有最高 q 值的动作,要么被选为随机动作。在这两者之间进行选择是随机的,并且基于 epsilon 的值,并且 epsilon 在训练期间被退火,因此最初会采取许多随机动作(探索),但随着训练的进行,会采取许多具有最大 q 值的动作(开发)。

然后,在测试过程中,他们也使用了这种 epsilon-greedy 方法,但 epsilon 的值非常低,因此对探索有很强的偏见,倾向于选择具有最高 q 值的动作而不是随机动作。但是,有时仍会选择随机动作(5% 的时间)。

我的问题是:

  1. 既然已经完成了培训,为什么此时还需要进行任何探索?

  2. 如果系统已经学习了最优策略,那么为什么不能总是选择具有最高 q 值的动作呢?

  3. 不应该只在训练中进行探索,然后一旦学习了最优策略,代理就可以反复选择最优动作吗?

4个回答

他们在自然论文中提到:

通过使用不同的初始随机条件('noop';参见扩展数据表 1)和 e-greedy 策略与 epsilon 0.05 玩每个游戏 30 次,每次最多 5 分钟来评估训练有素的代理。采用此过程是为了最大限度地减少评估过程中过度拟合的可能性。

我认为他们的意思是“消除过拟合/欠拟合的负面影响”。使用 0 的 epsilon 是一种完全剥削性的选择(正如您所指出的),并且做出了强有力的声明。

例如,考虑一个迷宫游戏,其中代理的当前 Q 估计收敛到最优策略,除了一个网格,它贪婪地选择向一个边界移动,导致它保持在同一个网格中。如果代理达到任何这样的状态,并且它正在选择 Max Q 动作,它将永远卡在那里。但是,在其策略中保留一个模糊的探索性/随机性元素(如少量的 epsilon)可以让它摆脱这种状态。

话虽如此,从我在实践中查看(并自己编写代码)的代码实现来看,由于您在问题中列出的确切原因,通常使用贪婪策略来衡量性能。

答案就在论文本身。他们用ϵ =0.05以避免过拟合。该模型用作基线。并且 yobibyte 在评论中提到他们出于同样的原因随机启动。然后针对人类专家评估算法的性能。该算法没有其对手的模型,因此很小的 epsilon。如果你有对手的模型,你的问题将是确定性的,而不是随机的。我希望这回答了你的问题

我认为测试的目的是了解系统在现实世界中的反应。

选项 1:
他们实际上可能会在现实世界的游戏中加入一些噪音——做出真正随机的动作。这可以使ϵ- 策略切换完美地反映了实际游戏。

选项 2:
如果他们担心自己脆弱,与不那么“原始理性”的球员比赛,那么他们可能会“退火”他们的训练成绩,以免高估他们。

选项3:
这是他们的魔法烟雾。会有一些他们不能也不想分享的部分。他们可能会发布此信息,以掩盖他们不想分享的专有或与他们的业务特别相关的内容。

选项 4:
他们可以使用重复测试和不同的 epsilon 值来测试系统中还剩下多少“脂肪”。如果他们的随机化很弱,或者样本太多以至于即使是公平的随机化也开始重复自己,那么该方法可以“学习”对伪随机偏差造成的不真实行为。这可能允许在测试阶段进行检查。

我敢肯定还有六个其他有意义的原因,但这些都是我能想到的。

编辑:注意自我,我真的很喜欢“脆弱”的想法。我认为这可能是第一代中级人工智能存在的弱点。

使用原因ϵ- 测试期间的贪婪是,与监督机器学习(例如图像分类)不同,在强化学习中,没有可用于测试阶段的看不见的、保留的数据集。这意味着该算法在其训练过的相同设置上进行测试。现在论文提到(方法,评估程序部分):

通过在不同的初始随机条件('no-op';参见扩展数据表 1)和一个ϵ- 贪婪的政策ϵ=0.05. 采用此过程是为了最大限度地减少评估过程中过度拟合的可能性。

特别是由于预处理的输入包含先前遇到的状态的历史,因此需要担心的是,代理不会泛化到底层游戏玩法,而只是记住该特定游戏的最佳轨迹并在测试阶段重播它们;这就是“评估过程中过度拟合的可能性”的意思。对于确定性环境,这是显而易见的,但对于随机状态转换记忆(即过度拟合)也可能发生。在测试阶段使用随机化,以随机长度的无操作开始以及游戏期间的一部分随机动作的形式,迫使算法处理不可预见的状态,因此需要一定程度的泛化。

另一方面ϵ-greedy用于通过帮助算法脱离观察空间的训练不足的区域来潜在地提高算法的性能。尽管给定的策略总是只能被认为是最优策略的近似值(至少对于这类任务),但它们的训练远远超出了算法执行无意义动作的程度。使用ϵ=0在测试期间可能会提高性能,但这里的重点是展示泛化能力。此外,在大多数 Atari 游戏中,状态也是在无操作的情况下演变的,因此如果发生这种情况,代理自然会“解开”。考虑到其他地方提到的迷宫示例,环境不会在无操作时演变,代理会很快了解到,如果奖励形状正确(例如,每一步 -1),撞墙并不是一个好主意;特别是当使用乐观的初始值时,所需的探索自然会发生。如果您仍然发现您的算法在某些情况下会卡住,那么这意味着您需要增加训练时间(即运行更多集),而不是针对动作引入一些辅助随机化。

但是,如果您在系统动态不断变化的环境中运行(即基础状态转换或奖励随时间变化),那么您必须保留一定程度的探索并相应地更新您的策略以跟上变化。