非常感谢 Lux AI 和 Kaggle 组织了如此精彩的比赛。这非常有趣和好玩,几乎就像玩游戏一样。
我的资源非常有限:不到3周的时间、Kaggle 的配额以及一张 1060 6Gb 显卡的显卡。因此,我的主要目标是学习一点 RL(强化学习)。我决定从基本的 Unet IL(模仿学习)开始,因为在上一届 Halite 比赛中,一些团队成功地使用了这种方法,然后我打算将其作为 RL 的初始策略。但是多亏了很棒的 DeepMind RL 课程和一些实验,我意识到由于每场比赛的推理时间需要几秒钟,找到合适的奖励塑造(reward shaping)需要大量的时间和运气,而且对于带有自举(bootstrapping)的离策略方法来说,成功的几率并不高。所以我坚持改进我的 IL 模型。
我的基本 Unet 模型有 3 个层级和 64 个通道,使用 CSE 加权损失进行训练,no-op 的权重为 1/10。特征非常基础,我甚至没有使用距离度量指标。
起初,由于内存限制,我只使用了 1 个 Toad 团队的提交数据,共 300 个回合。然后我将标量特征移到单独的输入中,对它们进行嵌入,并在 Unet 的顶层作为附加通道进行拼接。加上自定义的后台加载器,这使我能够高效地训练包含 3 个提交、共 1100 个回合的模型。
我的基础模型仅对工人使用确定性动作预测,得分为 1350。
以下每一项更改都带来了 +60 的分数提升:
获胜的提交稍微好一点,噪音也更少。它使用了 3 个模型分别对应早期、中期和后期游戏;每个模型使用不同的损失权重进行训练。此外,我堆叠了当前和之前时间戳的状态,但不得不使用 fp16 模式。
Focal loss(焦点损失)、双头模型和附加特征对我来说效果并不理想。
我使用 catalyst framework 进行训练。
结论:资源有限也有可能获得金牌。如果你想使用 RL,你必须尽早开始,因为你需要所有可用的时间。