7.4_自我对弈:在对抗性游戏中训练竞争智能体的经典技术

现在我们已经学习了多智能体的基础知识,我们准备深入研究。正如在介绍中提到的,我们将在一个对抗性的游戏中训练智能体,使用 SoccerTwos 这个 2 对 2 的游戏

SoccerTwos
环境由Unity MLAgents 团队创建

什么是自我对弈 ?

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

一方面,我们需要找到一个经过良好训练的对手来与训练中的智能体对战。另一方面,即使你有一个非常好的训练对手,这也不是一个好的解决方案,因为当对手太强时,你的智能体如何改进其策略呢?

想象一下一个刚开始学习足球的孩子。与一位非常优秀的足球运动员比赛是没有意义的,因为赢得比赛或者至少偶尔得到球将会非常困难。所以这个孩子会不断地输掉比赛,没有时间学习一个好的策略。

最好的解决方案是找一个与智能体水平相当的对手,并且随着智能体提升自己的水平来提升对手的水平。因为如果对手太强,我们将一无所获;如果对手太弱,我们将学到与更强对手对抗时无用的行为。

这个解决方案被称为自我对弈。在自我对弈中,智能体将其之前的策略副本作为对手。这样,智能体将与一个相同水平的对手进行对战(具有一定挑战性但不过于困难),有机会逐渐改进其策略,并在自身提升时更新对手。这是一种逐步提升对手复杂性的方法。

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

我们在自我对弈中也是这样做的:

自我对弈的理论并不是什么新鲜事物。早在上世纪五十年代,Arthur Samuel 的跳棋程序和 1995 年 Gerald Tesauro 的 TD-Gammon 就已经使用了自我对弈。如果你想了解更多关于自我对弈的历史,请参阅 Andrew Cohen 的这篇非常好的博客文章

MLAgents 中的自我对弈

自我对弈已经整合到了 MLAgents 库中,并由多个超参数进行管理,我们将对这些超参数进行研究。但正如文档中所解释的那样,主要关注点是在最终策略的技能水平和广泛性以及学习的稳定性之间的权衡

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

因此,我们需要控制:

要获取有关这些超参数的更多详细信息,你肯定需要查看文档的这一部分

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

什么是 ELO 分数?

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

相反,我们使用了一个名为*** ELO 评分系统***(以 Arpad Elo 命名),它可以计算在零和游戏中给定人群中两个玩家之间的相对技能水平

在零和游戏中:一个智能体获胜,另一个智能体失败。这是一种数学表示,其中每个参与者的效用增益或损失恰好被其他参与者的效用增益或损失所平衡。我们之所以谈论零和游戏,是因为效用的总和等于零。

这个 ELO 分数(通常从一个特定的分数开始,比如 1200)可能一开始会降低,但在训练过程中应该逐渐增加。

Elo 系统是通过与其他玩家的失败和平局进行推断得出的。这意味着玩家的评级取决于他们的对手以及对手得分的结果

Elo 定义了一个Elo 分数,它表示在零和游戏中的玩家相对技能水平。我们之所以说相对技能,是因为它取决于对手的表现

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

两个玩家之间的评级差异被视为预测比赛结果的指标。如果玩家获胜,但获胜的概率很高,那么它只会从对手那里获得少量分数,因为这意味着它比对手强得多。

每场比赛之后:

所以如果 A 和 B 的评级分别为 Ra 和 Rb,那么预期得分如下

ELO Score

然后,在比赛结束时,我们需要更新玩家的实际 Elo 分数。我们使用一个与玩家表现超出或低于预期的程度成比例的线性调整

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

如果玩家 A 拥有 Ea 分,但获得了 Sa 分,那么玩家的评级将使用以下公式进行更新:

ELO Score

示例

如果我们举个例子:

玩家 A 的评级为 2600

玩家 B 的评级为 2300

\(E_{A} = \frac{1}{1+10^{(2300-2600)/400}} = 0.849 \)

\(E_{B} = \frac{1}{1+10^{(2600-2300)/400}} = 0.151 \)

\(ELO_A = 2600 + 16*(1-0.849) = 2602 \)

\(ELO_B = 2300 + 16*(0-0.151) = 2298 \)

\(ELO_A = 2600 + 16*(0-0.849) = 2586 \)

\(ELO_B = 2300 + 16 *(1-0.151) = 2314 \)

优点

使用 ELO 评分具有多个优点:

缺点