645. NeurIPS 2024 - Lux AI Season 3 | lux-ai-season-3
我们选择多智能体强化学习 (Multi-agent RL) 来解决这个问题。我们的主要动机是研究多智能体学习行为并探索多智能体强化学习 (MARL) 研究的可能性。
我们的目标是尽量减少使用硬编码规则来改进代理。我们很好奇代理们能在这个具有挑战性的部分可观察环境中学得有多好。
最大的挑战是遗物碎片 (relic fragments) 在观察中总是隐藏的。它只能通过时间步收集的点数来观察。直接的方法是跟踪获得的点数并用数学方法解决问题。
我们没有使用数学方法,而是实验了元强化学习算法 [1]。如果代理记住它们在哪里获得点数(元强化学习的奖励),代理应该能学会遗物碎片的确切位置。我们的实验代码基于 xland-minigrid [2]。我们给每个代理一个带有 RNN 的记忆单元。想法是给每个单元记住过去时间步的能力并学习最优策略。
观察数据作为 7x7 自我中心信息通道输入,动作基于观察嵌入和 RNN 的隐藏状态。模型参数对所有代理共享。在推理期间,观察和记忆对每个代理是唯一的。
我们观察到了有趣的行为出现。对于一些难以找到遗物的地图,只有两三个代理在第一场比赛中找到遗物。在接下来的比赛中,只有那些代理前往遗物节点,而其他代理仍在搜索。
为了解决这个问题,我们添加了状态观察。在 LuxAI 中,环境维度是固定的,24x24。所以,我们可以采用 24x24 观察,而不是连接 individual 观察,这在多智能体强化学习中很常见。这解决了在所有代理之间共享信息的问题。
我们修改了仅用于状态观察的 RNN 隐藏状态。想法是卸下代理的记忆能力。状态观察 RNN 应该充当记住发生事情的蜂巢女王。
理论上,我们想象它像《明日边缘》(Edge of Tomorrow) [3],其中 Omega 记得团队如何被击败,并在接下来的比赛中提出自适应策略来击败对手团队。如果它起作用那就太酷了。[4]
结果不够好。代理没有弄清楚确切的碎片位置。有很多摇摆行为,代理在碎片簇中移动很多,因为它们不知道确切的奖励位置。经过相当长的训练时间后没有显著改善。我们假设当代理没有确切的碎片位置时,它们无法学习战斗行为。所以,任何移动到对手领土的人都会输,因为他们没有清晰的优势预测。
我们采用了 aDg4b 的开源基于规则的代理 [4]。我们用它来打第一场比赛。想法是获取碎片位置并从第 2 场比赛开始 feed 它们,此时 RL 代理接管。在训练期间,我们 feed 碎片的真实位置 (ground-truth locations)。那就是我们注意到与 RNN 解决方案相比,平均收集点数显著改善的地方。
RNN 实验收集的平均点数最多为每场 200 分,而 feed 真实碎片位置记录为每场 400 分。
有一点我们开始实验不同的架构和超参数 [5]。然而,它并不比 aDg4b 的基于规则的代理更好。
此时,我正处于放弃的边缘。失败的实验损害了我的信心。我们决定为了学习而 pivot。我们决定使用图神经网络 (graph neural network) 来建模代理之间的通信结构。我们决定这次需要手动计算碎片节点。之后,我们想最后一次运行以确保代码正确。我们不再在第 1 场比赛使用基于规则的代理。由于这是测试运行,我们移除了状态观察并实验代理特定的自我中心观察。我们将其设为 47x47,因为代理在中心,我们希望代理看到地图上的所有内容。这样就不再需要状态编码器了。缺点是任何时间步约 75% 的观察是 NULL。这 meant 是测试,所以它表现得好不好没关系。那是 2 月的第一周。然后,它在排行榜上奇迹般地表现良好。排名在一天的训练后从 150+ 跳到了 11-15。
我们尝试提供更多信息并为神经网络添加更多层。我没有注意奖励结构。奖励结构是总点数差。我们发现代理没有学会牺牲初始获得的点数。其他团队展示了从迷雾中 ambush 碎片簇的能力。我们的 RL 代理从未学会这种能力。我们推理这可能是由于奖励结构。对于一些失败的比赛,即使输了,奖励也更高。例如,其他团队牺牲了大约 20 个时间步,我们领先 30-50 点,然后其他团队 wiped out 所有代理并取得了领先。从奖励结构来看,尽管输了,我们的团队得到了更多奖励。我们修改了奖励结构,更侧重于赢得或输掉比赛。只剩下不到 20 天,我们无法探索太多。
我们使用多智能体近端策略优化 (multiagent proximal policy optimization) [8]。Actor 模型参数对所有代理共享。每个代理需要自己的推理和自己的观察来获得动作。Critic 看到两个团队。这是因为 Critic 需要在没有迷雾的情况下了解对手团队的完整情况 [9]。我们在 model_architecture.pdf [10] 中分享了更多细节。
我们应该在开始训练之前实施所有指标和监控。观看和分析 replays 效率不高。需要比赛统计数据来查看代理是否学习了特定策略。我们可以跟踪行为如何随时间演变。我相信我们应该拥有能想到的所有统计数据。
我们有基本的动作掩码。我们期望 RL 代理会在没有严格干预的情况下自己学习。在我们的案例中这是错误的。我们需要从一开始就掩码所有没有意义的内容。我相信添加我们确信的动作掩码规则是有益的。例如,我忘记掩码能量不足时的吸取 (sapping)。它们未能学会这一点。所以,我们不应该期望代理学会不做愚蠢的动作。研究表明动作掩码极大地改善了 RL 学习 [7]。那时,这是共同的智慧。
我独自负责实验不同的架构。我的建模技能欠佳。我相信模型架构是瓶颈。我尝试使其与 Vision Transformer 一起工作,但最终我选择了带有残差连接的卷积神经网络 (CNN)。在竞赛接近尾声时,我实验了带有 CNN 教师模型的 Vision Transformer。Vision Transformer 显示了一些希望,但需要更长时间。由于计算预算有限,这不可行。
由于所有代理自己决定动作,进攻和防守存在弱点。一个主要弱点是我们需要使用动作采样。如果我们采取最大可能动作,代理不会经常吸取 (sapping),性能比采样差得多。代理不知道哪些代理将吸取以及在做什么。我尝试用通信动作头来解决它,但没有成功。在下个赛季,我想探索通信协议以更好地协调动作,可能使用图神经网络。
我想感谢大家。我想感谢 Lux AI 的创作者和支持社区。这很有趣。我想赢得奖品。这很有压力且充满挑战。无论如何我玩得很开心。我学到了很多。我把这视为帮助我成长的失败。我希望我能成熟到只是为了 fun 和学习新事物而参与,而不是逼迫自己获胜。
我想感谢我的终身导师 @javelin1991,他在过去几个月里密集地教我 RL。因为你,我学得更快。在过去的几个月里,我学会了如何阅读研究论文,如何提出有趣的问题,以及如何追踪研究人员的思维模式。我很高兴能得到这个指导。我希望与任何想追求 RL 的人分享我所学到的东西。
我们分享 GitHub 仓库 https://github.com/L16H7/lux-3-comets/。抱歉代码凌乱。我有空时会清理仓库。对于最新的提交,我们在单个 4090 GPU 上连续训练了 15 天,大约 3000 万更新步数。就环境步数而言,合计总数超过 10 亿。我们使用 vast.ai 租用 GPU。所有实验的总成本约为 500 美元。对我来说现在这是一笔巨款,因为我正在紧缩开支。即使网上有很多免费资源学习,我们仍然需要支付 GPU 小时来学习。这是知识的代价。我正在寻找新机会,我会感激你的帮助。如果你觉得有用,在 github 上给个星对我来说意义重大。只有当你觉得有用时!请点赞和订阅。😃
如果你想的话,让我们在 LinkedIn 上联系。 https://www.linkedin.com/in/coderlight/