sidsite

Transformer 神经网络通过示例学习运行 Conway's Game of Life

发布时间:2024年7月7日 最后编辑时间:2025年5月17日

我们发现,一个高度简化的 Transformer 神经网络仅通过学习游戏的示例,就能够完美地计算 Conway’s Game of Life

这个模型的简单性使我们能够观察它的结构,并确认它确实在计算 Game of Life —— 而不是一个基于已训练的所有示例来预测最可能的下一个状态的统计模型。

我们观察到,它学会使用其 attention 机制来计算 3x3 卷积 —— 3x3 卷积是实现 Game of Life 的一种 常见 方法,因为它可用于计算单元格的邻居数量,而邻居数量用于决定单元格是存活还是死亡。

我们将该模型称为 SingleAttentionNet,因为它由一个带有 single-head attention 的 attention block 组成。 该模型将 Life 网格表示为一组 tokens,每个网格单元格一个 token。

下图显示了由 SingleAttentionNet 模型计算的 Life 游戏: Life game computed by a SingleAttentionNet model 下图显示了 SingleAttentionNet 模型的 attention 矩阵在训练过程中的示例: Life game computed by a SingleAttentionNet model 这表明该模型正在学习通过其 attention 机制计算 3x3 平均池化(排除中心单元格)。

细节

完整的代码可在此处获得:here

问题建模如下:

model(life_grid) = next_life_grid

其中使用梯度下降来最小化损失:

loss = cross_entropy(true_next_life_grid, predicted_next_life_grid)

随机生成 Life 网格,以提供无限的训练对来源 (life_grid, next_life_grid)。 一些例子: Life game computed by a SingleAttentionNet model

模型图

该图中的模型处理 2x2 Life 网格,这意味着每个网格总共有 4 个 tokens。蓝色文字表示通过梯度下降学习的参数。数组标有它们的形状(省略了 batch 维度)。 Detailed diagram of SimpleTransformer

训练

在 GPU 上,训练模型需要几分钟到 10 分钟不等,或者可能会因为 seed 和其他训练超参数的原因而无法收敛。我们成功训练的最大网格大小为 16x16。 Life game computed by a SingleAttentionNet model

备注

我们尝试用手动计算的 Neighbour Attention 矩阵替换模型的 attention 层,发现该模型更快地学习了它的任务,并且推广到任意网格大小。我们发现用 3x3 平均池化层替换该层也是如此。

我们通过寻找具有完美预测的 1024 个训练批次,以及它可以完美运行 100 个 Life 游戏 100 步来检测模型是否已收敛。

我们发现仅在随机 Life 游戏的第一次和第二次迭代上训练模型就足够了,但仅在第一次迭代上训练是不够的。

Life 的规则

Life 发生在 2D 网格上,网格中的单元格要么是死的,要么是活的(用 0 或 1 表示)。 一个单元格有 8 个邻居,它们是网格上紧挨着它的单元格。

要进入下一个 Life 步骤,请使用以下规则:

这些规则如下图所示。 Life game computed by a SingleAttentionNet model

参考:

引用:

@misc{radcliffe_life_transformer_2024,
 title={Training a Simple Transformer Neural Net on Conway's Game of Life},
 url={https://sidsite.com/posts/life-transformer/},
 howpublished={Main page: \url{https://sidsite.com/posts/life-transformer/}, GitHub repository: \url{https://github.com/sradc/life-transformer}},
 author={Radclffe, Sidney},
 year={2024},
 month={July}
}