我训练了一个 DQN,它通过与自己对战来学习井字游戏,输/平/赢的奖励为 -1/0/+1。每 500 集,我通过让它与随机玩家播放一些集(也是 500 集)来测试进度。
如图所示,网络很快学会了对抗随机玩家获得 0.8-0.9 的平均奖励。但是在6000集之后表现似乎恶化了。如果我在 10000 集之后手动玩网络游戏,它会播放得很好,但绝不是完美的。
假设没有隐藏的编程错误,有什么可以解释这种行为的吗?与针对固定环境训练网相比,自我游戏有什么特别之处吗?
这里有更多细节:网络有两层,有 100 个和 50 个节点(以及一个有 9 个节点的线性输出层),使用 DQN 和一个具有 4000 个状态转换的重播缓冲区。显示的 epsilon 值仅在自我游戏期间使用,在针对随机玩家探索进行评估期间关闭。自我游戏实际上是通过训练两个具有相同架构的独立网络来实现的。为简单起见,一个网始终是 player1,另一个始终是 player2(因此他们学到的东西略有不同)。然后使用 player1 网络与为 player2 生成移动的随机玩家进行评估。
谢谢