深度RL课程文档

自博弈:一种在对抗性游戏中训练竞争性智能体的经典技术

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

自博弈:一种在对抗性游戏中训练竞争性智能体的经典技术

既然我们已经学习了多智能体的基础知识,我们就可以深入研究了。正如引言中提到的,我们将在 SoccerTwos 这个 2v2 游戏中训练对抗性游戏的智能体

SoccerTwos
这个环境是由 Unity MLAgents 团队 创建的

什么是自博弈?

在对抗性游戏中正确地训练智能体可能相当复杂

一方面,我们需要找到如何获得一个训练有素的对手来与你的训练智能体对战。另一方面,如果你找到了一个非常优秀的训练有素的对手,当对手太强大时,你的智能体将如何改进其策略?

想想一个刚开始学习踢足球的孩子。与一个非常优秀的足球运动员比赛将是无用的,因为它太难赢得比赛,或者至少时不时地从对手那里拿到球。因此,孩子会不断地输球,而没有时间学习好的策略。

最好的解决方案是拥有一个与智能体水平相当的对手,并且随着智能体自身水平的提高而提高对手的水平。因为如果对手太强,我们将一无所获;如果对手太弱,我们就会过度学习对付更强对手的无用行为。

这个解决方案被称为自博弈。在自博弈中,智能体使用它自己以前的副本(其策略)作为对手。这样,智能体将与水平相当的智能体(具有挑战性但又不会太难)对战,有机会逐步改进其策略,然后在自身变得更好时更新其对手。这是一种引导对手并逐步增加对手复杂性的方法。

这与人类在竞争中学习的方式相同

  • 我们开始与水平相似的对手进行训练
  • 然后我们从中学习,当我们获得一些技能后,我们可以与更强大的对手进一步发展。

我们对自博弈也做同样的事情

  • 我们首先使用我们智能体的副本作为对手,这样,这个对手就处于相似的水平。
  • 我们从中学习,当我们获得一些技能后,我们使用我们训练策略的更新版本来更新我们的对手

自博弈背后的理论并不是什么新鲜事物。早在 50 年代,Arthur Samuel 的跳棋玩家系统和 1995 年 Gerald Tesauro 的 TD-Gammon 就已经使用了它。如果您想了解更多关于自博弈的历史,请查看 Andrew Cohen 的这篇非常好的博文

MLAgents 中的自博弈

自博弈已集成到 MLAgents 库中,并由多个超参数管理,我们将对此进行研究。但正如文档中所解释的那样,主要重点是最终策略的技能水平和泛化性与学习稳定性之间的权衡

针对一组变化缓慢或不变且多样性低的对手进行训练会导致更稳定的训练。但如果变化太慢,则存在过拟合的风险。

因此我们需要控制

  • 我们更换对手的频率,通过 swap_stepsteam_change 参数。
  • 使用 window 参数保存的对手数量window 的值越大,意味着智能体的对手池将包含更多样化的行为,因为它将包含训练运行早期阶段的策略。
  • 使用 play_against_latest_model_ratio 参数与当前自我对弈与从池中抽取的对手对弈的概率play_against_latest_model_ratio 的值越大,表明智能体将更频繁地与当前对手对弈。
  • 使用 save_steps 参数保存新对手之前的训练步数save_steps 的值越大,将产生一组涵盖更广泛技能水平和可能的游戏风格的对手,因为策略会接受更多的训练。

要获得关于这些超参数的更多详细信息,您绝对需要查看文档的这一部分

用于评估我们智能体的 ELO 分数

什么是 ELO 分数?

在对抗性游戏中,跟踪累积奖励并不总是跟踪学习进度的有意义的指标:因为这个指标仅取决于对手的技能

相反,我们使用 ELO 评分系统(以 Arpad Elo 命名),该系统计算零和博弈中给定人群中 2 名玩家之间的相对技能水平

在零和博弈中:一名智能体获胜,另一名智能体失败。这是对一种情况的数学表示,在这种情况下,每个参与者的效用收益或损失恰好被其他参与者的效用收益或损失所平衡。我们谈论零和博弈是因为效用总和等于零。

这个 ELO(起始于特定分数:通常为 1200)最初可能会下降,但应该在训练期间逐步增加。

Elo 系统是从与其他玩家的失败和平局中推断出来的。这意味着玩家评分取决于其对手的评分以及与他们对战的结果

Elo 定义了一个 Elo 分数,该分数是零和博弈中玩家的相对技能。我们说是相对的,因为它取决于对手的表现

中心思想是将玩家的表现视为正态分布的随机变量

2 名玩家之间评分的差异可作为比赛结果的预测指标。如果玩家获胜,但获胜概率很高,那么它只会从对手那里赢得少量积分,因为这意味着它比对手强大得多。

每场比赛结束后

  • 获胜的玩家从失败的玩家那里获得积分
  • 积分数量由2 名玩家评分的差异(因此是相对的)决定
    • 如果评分较高的玩家获胜 → 从评分较低的玩家那里获得的积分将很少。
    • 如果评分较低的玩家获胜 → 从评分较高的玩家那里获得的积分将很多。
    • 如果是平局 → 评分较低的玩家从评分较高的玩家那里获得少量积分。

因此,如果 A 和 B 的评分分别为 Ra 和 Rb,则预期分数由下式给出

ELO Score

然后,在比赛结束时,我们需要更新玩家的实际 Elo 分数。我们使用线性调整,与玩家表现超出或未达预期量的量成正比

我们还定义了每场比赛的最大调整评分:K 因子。

  • 大师级为 K=16。
  • 较弱的玩家为 K=32。

如果玩家 A 有 Ea 分,但实际得了 Sa 分,则玩家的评分使用以下公式更新

ELO Score

示例

如果我们举个例子

玩家 A 的评分为 2600

玩家 B 的评分为 2300

  • 我们首先计算预期分数EA=11+10(23002600)/400=0.849E_{A} = \frac{1}{1+10^{(2300-2600)/400}} = 0.849 EB=11+10(26002300)/400=0.151E_{B} = \frac{1}{1+10^{(2600-2300)/400}} = 0.151

  • 如果组织者确定 K=16 且 A 获胜,则新评级将为ELOA=2600+16(10.849)=2602ELO_A = 2600 + 16*(1-0.849) = 2602 ELOB=2300+16(00.151)=2298ELO_B = 2300 + 16*(0-0.151) = 2298

  • 如果组织者确定 K=16 且 B 获胜,则新评级将为ELOA=2600+16(00.849)=2586ELO_A = 2600 + 16*(0-0.849) = 2586 ELOB=2300+16(10.151)=2314ELO_B = 2300 + 16 *(1-0.151) = 2314

优势

使用 ELO 分数有多个优势

  • 积分始终是平衡的(当出现意外结果时,会交换更多积分,但总和始终相同)。
  • 它是一个自我修正的系统,因为如果玩家战胜弱玩家,他们只会赢得少量积分。
  • 适用于团队游戏:我们计算每个团队的平均值,并在 Elo 中使用它。

缺点

  • ELO 没有考虑团队中每个人的个人贡献
  • 评分通货紧缩:良好的评分需要随着时间的推移保持技能才能保持相同的评分
  • 无法比较历史评分.
< > 在 GitHub 上更新