返回列表

Public 14th Solution - Transformer

356. NFL Big Data Bowl | nfl-big-data-bowl-2020

开始: 2019-10-09 结束: 2020-01-06 赛事预测 数据算法赛
Public 14th Solution - Transformer

公开第14名方案 - Transformer

作者:nyanp
比赛排名:公开榜第14名 / 私有榜第22名

感谢主办方举办了如此有趣的比赛!这是我第一次将神经网络(NN)作为主要模型,在这次比赛中学到了很多 ;)

在快速浏览了训练数据后,我觉得这次比赛与“CHAMPS Predicting Molecular Properties”竞赛非常相似——所以我决定在比赛早期阶段就使用 Transformer 模型。

模型

Model Architecture

我的架构包含 3 层逐点卷积层(类似 PointNet),加上 4 个 Transformer 编码器,后面连接几个全连接层。我尝试了多头注意力机制,但对我并没有效果。Transformer 的实现基于 PyTorch 1.3,但稍作修改(将 post-LN 架构改为 pre-LN,详见此处论文)。

特征

我总共使用了 17 个特征。除了 YardLine 和 Distance 外,每个球员都计算了 15 个特征(因此 15 x 22 的特征向量被输入到 Transformer 编码器中)。所有特征都很简单,但最重要的是相对于跑卫(Rusher)移动方向的角度。

Feature Diagram

这种基于跑卫方向的极坐标给了我很大的提升(约 0.0003)。我还计算了给定时间 0.001s 后的这个角度,并计算 θ(t) 和 θ(t+0.001) 之间的差值。

使用的所有特征列表:

  • YardLine(码线)
  • Distance(距离)
  • X, Y, S, A, Dis, PlayerWeight(球员体重)
  • IsBallCarrier(是否持球)
  • IsOffence(是否进攻方)
  • sin(Dir), cos(Dir)
  • dX, dY, atan(dY, dX) from Rusher(相对于跑卫)
  • angle, angle variation from Rusher's direction(角度,相对于跑卫方向的角度变化,如上所述)

就是这样 :) 使用了交叉验证(CV)和对抗验证来移除不相关或可疑的特征。

验证

除了标准的 GroupKFold 外,我还尝试了时间分割验证(讨论见 此处)。两者对我都很有效,但验证分数差异很大。所以我从每种验证策略中各选了一个用于最终提交。

其他(可能)有效的技巧

  • AdamW 优化器(比 Adam 稍好)
  • 球员向量上的高斯噪声和 Y 轴偏移数据增强
  • TTA(测试时增强,20倍增强并在 Y 和 Dir 上添加高斯噪声)
  • 快照集成
  • 下采样 2017 年数据(每个 epoch 随机丢弃 40% 的数据)
  • 保持 epoch 的长度恒定(12,000 个样本 = 1 个 epoch),无论训练样本总数如何
    • 这有助于我在第二阶段估算运行时间
同比赛其他方案