变形金刚可以生成NFL比赛:介绍QB-GPT
变形金刚 从QB-GPT看NFL比赛的未来
弥合GenAI和体育分析之间的鸿沟
自从我写了关于StratFormer的第一篇文章以来,我收到了相对大量的反馈和想法(非常感谢!)。这推动我深入研究并尝试更进一步:建立一个足球战术生成器。在本文中,我介绍了QB-GPT,一个可以根据一些因素有效生成足球战术的模型。可以在这里找到一个专门的HuggingFace空间来进行操作。本月晚些时候,我将分享使用这种生成模型作为支撑如何更好地预测NFL比赛战术的工作和发现。DeepMind Safety Research目前正在与利物浦足球俱乐部合作研究足球运动员在场上的移动方式,行业也在关注这个领域。


Stratformer是我于2021年10月开始的第一个想法,它是一个只有编码器的模型,输入一个轨迹,试图完成该轨迹,并预测与之相关的一些上下文元素(团队、位置和战术)。尽管这个模型展示了一些有趣的模式(比如理解何为真正区分RB和WR),但它依赖于对战术的“事后”观察。更有趣的是深入了解球员的阵容设置以及一些上下文元素,如何实际影响团队的走向。换句话说,当球队在对峙线上面对彼此时,会发生什么?
通过构建这样的算法,我们现在能够构建一个“真正”理解足球比赛的模型,因为它基本上是通过少量元素来重新创建比赛。这就是QB-GPT的目标。GPT在这里表示它依赖于使用任何GPT模型的解码概念。
本文将介绍模型以及我不得不实现的一些必要技巧,以使其“可行”。如果您愿意,可以在这里的附加的HuggingFace空间中生成一些比赛战术,我将根据成本限制时间。尽管我承认它有限且有许多改进空间,但我认为这样的应用值得与更广泛的受众分享。如果有兴趣讨论或深入某些方面,我的联系方式可以在应用程序中找到,也可以在文章结尾处找到。再次强调,我是独自完成这项工作的,依靠我能找到的数据和与之相关的不完美(如果NFL/NGS团队的人员看到这篇文章,非常欢迎私信交流)。
第1部分:数据
执行此任务所需的数据非常难以找到。我依靠NFL的Next Gen Stats(NGS)工具提供的一种特定的数据类型,在任何给定的比赛中,我可以跟踪到场上的最多22名球员。问题在于,无法通过经典的API请求访问这些数据。然而,自2019年以来,NFL在Kaggle上提供了广泛的数据竞赛,通常提供了来自NGS的数据集。此外,GitHub上的一些人在过去进行了有关NGS浏览器的数据抓取。我没有尝试去做,而是只依赖于有可用格式的现有数据。
一个广泛的时间花费在合并他们之间的数据上(大约200小时)。最重要的任务是:
- 使用nflVerse找到场上的球员
- 关联他们的位置
- 使用nflVerse的逐行播放数据来定义界限线
- 通过减去每个轨迹实例的球员初始位置来将轨迹标准化。因此,轨迹的每个元素都是时间i和时间0之间的距离。
- 将距离转换为索引(类似于为BERT构建词汇表)
- 应用一些合理性检查(例如删除在球场上找不到的球员)
- 将数据转换为TensorFlow的数组和字典格式
在整个过程中我使用了Polars。我强烈建议任何数据科学家、ML工程师、数据工程师或处理大量表格数据的人将这个令人印象深刻的包快速添加到他们的工具包中。简而言之,Polars在小数据集上比pandas更好,在大数据集上比pypsark更好。
总而言之,我编译了47,991个不同的游戏,代表了870,559个不同球员的轨迹(平均每场比赛监控18名球员,但可惜从未有过中锋…)。
我以每0.2秒的帧率监测每个球员的位置,总共在场上记录了28,147,112个位置。我将数据限制在最初的10秒,因为轨迹在此后愈发混乱,从概率角度来看更难以建模。
我的数据集起始时间为2018年到2022年,涵盖了3,190名独特的球员。数据并不完美,但可以提供一个很好的样本,可能足以评估transformers是否有帮助。
总结起来,我的数据来源如下:
以下是一个表示单个球员输入嵌入的示意图:

然后将十一名球员在每场比赛中连接起来,然后通过帧来截断,始终保持令牌数量为256。我将一个球员的帧数限制为21(最大= 21 * 11 = 231),以确保每个球员的帧数始终一致。因此,我不得不创建新的轨迹,直接从比赛的某一时刻开始,因为我的大多数比赛都有超过21个帧。我创建了一个填充步骤,每次将轨迹分成子轨迹,每个轨迹相对于上一个轨迹移动12帧。这个过程会使12、24、36和48帧的预测任务变得更加困难,我们将在后面看到。

各个元素可以进行讨论。例如,将场地以1码为基准分割的相关性,或者为什么使用0.2秒的帧率。我认为模型(因此其训练数据)是一个开端,我想承认并不是一切都完美。只要相关,欢迎提供反馈和意见。
第2部分:模型
该模型完全借鉴了OpenAI GPT架构。它依靠一个嵌入层,为输入令牌添加不同的上下文元素。然后,嵌入向量被送入一个带有3个头的单个transformers模块的多头注意力机制中。在大型模型中,应用了第二个transformers模块。然后,输出被输入到一个具有”relu”激活函数的全连接层中。为了获得预测结果,我们应用了softmax激活。
为了适应体系结构和训练,需要使用两个技巧:
- 多时期因果掩码:在经典的GPT中,位置i处的嵌入注释只能参考从位置0到i-1的标记。在我们的情况下,由于我正在完整解码团队,我需要时间i的标记来参与到时间0和i-1之间所有可用的标记中。你不再有所谓的“下三角掩码”,而是得到一个多角形掩码。



- 预层归一化:受到Sik-Ho Tsang的工作启发,我实现了他提出的在多头注意力和前馈网络之前进行归一化的Transformer模块。
该模型不需要高数量的注意力层,因为要建模的基本模式相当简单。我使用相同的设置训练了4种不同模型的架构。结果显示,嵌入的维度在我们能达到的准确性水平中起到了重要作用,而注意力模块的数量并没有显著改善准确性:
- 微型:64维的嵌入,代表着1,539,452个参数
- 小:128维的嵌入,代表着3,182,716个参数
- VoAGI:256维的嵌入,代表着6,813,308个参数
- 大:128维的嵌入,但有两个注意力模块,代表着7,666,556个参数
我认为通过对调度器进行深入审查,大型模型可以达到更好的性能。
(供比较,GPT3具有1750亿个参数)
下面的图表显示了不同模型在训练过程中准确性和损失的比较:

第三部分:训练
训练集由80%的轨迹组成,共计205,851个示例。测试集由20%的轨迹组成,共计51,463个示例。
模型使用简单的回调调度器进行训练,共9个时期,学习率从1e-3开始,到5e-4结束,批大小为32。
损失函数是基于训练集上的出现次数阈值而设计的分类交叉熵(在损失中经常出现的整数权重较小)。标签设为-100的不计入损失。
使用的指标有:
- 准确性:下一个团队动作的预测是否与标记的动作完全相同?
- 前3准确性:下一个标记的动作是否在前3个预测中?
- 前5准确性:下一个标记的动作是否在前5个预测中?

最终,在每个动作的x、y坐标上进行了均方根误差(RMSE)的检查。这个检查使我们能够监测到除了不准确预测外,它不会离真实值太远(预测一个1码正方形轨迹可能很困难)。
第四部分:结果
总体而言,不同模型仍然学习到了潜在的动态模式,并在我的数据集上表现相对良好。我们可以看到,增加嵌入维度会提高模型的准确性。在一个足球场上猜测一个1码正方形的任务绝对是具有挑战性的,因为移动范围并不那么小。
我决定将这些预测分为三个类别:时间、比赛类型和位置。

前5个帧对于模型来说相对容易预测,因为经常有相似的移动开始。在第5帧和第10帧之间准确性下降了40-50%。这是各个比赛开始有不同路径的时刻。在四个模型中,小型模型最不稳定,尤其在轨迹的末尾。VoAGI模型表现非常出色,即使在长期(超过20个帧)也如此。峰值与填充轨迹的开始相关,因为在没有任何轨迹过去知识的情况下进行输入。

相对静态的比赛(毫不奇怪地)更容易预测。跑、传、开球和踢球都是(毫不奇怪地)最难猜测的,因为球员的移动更多,可能呈现出混乱的模式。各个模型之间没有明显的差异。

位置是一个非常有区别性的因素,具有10至20%的准确度差异。总体而言,移动较多的位置也是最难预测的。小型模型在整体上比其他模型更不准确。
第五部分:通过尝试而观察到的情况
模型的理想温度似乎在1.5至2.5之间。我测试了10、20和50的选择。您越推动温度和选择,它就越容易变得混乱,并产生奇怪的模式(球员离开场地、改变方向、两个帧之间出现巨大间隙)。
然而,它似乎给出了有趣的模式,可以用于模拟和剧本识别。
下一步是什么?
这个模型是原始的。它后续可以用于探索对手的策略,制定新的策略,甚至用于改进球员搜索系统。
然而,核心思想是看看这个模型是否能够有效地预测比赛结果,即码距的获得。我将很快分享关于基于QBGPT发现的NFL比赛预测框架的工作。通过使用这种模型的生成能力,您可以从中得出大量场景,从而更容易地预测比赛;)
在此期间,如果您喜欢本文、工作和发现,请不要忘记分享和点赞!
(除非另有说明,所有图片均为作者所有)
Samuel Chaineau: Linkedin





