AlphaGo Zero 中使用的“训练循环”是否与“纪元”相同?

数据挖掘 深度学习 喀拉斯 张量流 训练 深思熟虑
2022-03-08 17:48:36

我对 AlphaGo Zero 的训练阶段使用自对战阶段收集的数据感到困惑。

根据我找到的AlphaGo 零备忘单,训练程序是:

  • 从 1 循环到 1,000:
    • 从最近 500,000 场比赛中抽取 2048 集的小批量样本
    • 使用这个小批量作为训练的输入(最小化他们的损失函数)
  • 在这个循环之后,将当前网络(训练后)与旧网络(训练前)进行比较

然而,在阅读了这篇文章之后,我没有看到任何关于他们在这些小批量中使用了多少个 epoch 的信息。

问题:

  1. 那 1,000 次训练迭代是算法的实际时期吗?然后,Keras 代码将被松散地转换为:
network.fit(x_train, y_train, batch_size = 2048, epochs = 1000, ...)
  1. 还是他们实际上有一个用于培训的 for 循环?然后,Keras 代码将被松散地转换为:
for _ in range(1000):
    x_train, y_train = sample_states_from_past_games(data_from_selfplay)
    network.fit(x_train, y_train, batch_size = ???, epochs = ???, ...)

如果是第二种选择,我想知道他们使用了多少批次和时代。

1个回答

我认为他们做了第二种选择。如果他们的网络适合 1,000 个 epoch 的 2,048 个状态的小批量,它将过度适合采样的 2,048 个状态。经过训练的网络不太可能击败旧网络。

有许多样本候选者。如果我们假设游戏的平均回合数为 150,则样本候选者为 75,000,000 个状态。每次训练迭代都会进行采样以反映许多状态。

在这种情况下,batch_size 将为 2,048,epochs 为 1。(实际上,他们使用了 64 个工作人员,每个工作人员的批量大小为 32。)