第6名方案:非常定制的GRU
第6名方案:非常定制的GRU
作者:Ahmet Erdem (Grandmaster) | 排名:第6名
首先恭喜 @keetar、@mamasinkgs 以及其他顶尖团队。我将简要解释我的解决方案。这里时间已晚,所以我可能会遗漏一些要点。
一些通用细节
- 仅使用了问题数据。加入讲座(Lectures)虽然提高了验证分数,但增加了训练集与验证集之间的差距,并且没有提升 Leaderboard(LB)分数。
- 没有使用 Dataframes。使用了按用户 ID 分区的 numpy 数组。
- 序列长度为 256。
- 训练 15 个 epoch。每次使用 1/3 的数据,并降低学习率。
- Batch size(批大小)为 8192。
- 集成方案:在全部数据上训练了 7 个不同随机种子的相同模型进行集成。
- 单模型验证分数 0.8136,LB 分数 0.813。集成后分数:0.815。
- 在 4 GPU 机器上训练了 8 小时。
- 使用了 Github,并提交了每一次改进,提交信息类似于:增加一个 GRU 层 (Val: 0.8136, LB: 0.813)。
输入
工程化特征
假设当前问题的正确答案是 X。计算以下各项的对数:
- 自上次出现 X 以来的问题数量。
- 当前 X 连续出现的长度(可以为零)。
- 当前任何非 X 答案连续出现的长度(可以为零)。
这有助于处理那些总是选择 A 作为答案等的用户情况。
嵌入
内容余弦相似度
- 有点类似于具有 16 个头的注意力机制。
- 对内容向量应用线性变换和 L2 归一化。
- 对于 16 种不同的变换,计算当前内容与历史内容之间的余弦相似度。
- 变换对于内容和历史内容是对称的。
U-GRU
- 具有 2 个方向的 GRU,但不是双向 GRU(BiGRU)。
- 首先进行反向传递,拼接输出,然后进行正向传递。
MLP (多层感知机)
- 2 层结构,每层包含 [Linear, BatchNorm, Relu]。
编辑:Part embedding 是可训练的。在 GRU 之前实际上还有一个 sigmoid x tanh 层。