返回列表

11th Place - GRU, CNN, Transformer - GPU Deep Learning!

586. Child Mind Institute - Detect Sleep States | child-mind-institute-detect-sleep-states

开始: 2023-09-05 结束: 2023-12-05 健康管理与公共卫生 数据算法赛

第11名解决方案 - GRU、CNN、Transformer - GPU深度学习!

作者: Chris Deotte (Kaggle Grandmaster)
竞赛排名: 第11名
发布日期: 2023年12月6日

这是一场多么有趣的竞赛!我非常喜欢这次比赛!感谢Kaggle和主办方。

GPU深度学习的基本构建块!

以下是深度学习的3个基本构建块。通过创建这些构建块的不同序列,我们可以构建强大的模型!每个块都接受输入形状 (batch_size, sequence_length, features) 并输出相同形状的结果。RNN“块”使用双向结构(示例代码见此处)。CNN“块”使用多个膨胀卷积的和与积(来自WaveNet论文此处及示例代码此处)。Transformer块使用自注意力机制(示例代码见此处)。这3个“块”无需特征工程即可从信号中创建特征!

数据加载器 - 将数据切割为每日块

我们的数据加载器将随机提供24小时窗口,这些窗口始终包含一次入睡和一次醒来。在每个epoch中,我们将获得不同的切割。这作为裁剪数据增强。

模型头部是NLP问答Softmax(而非NLP命名实体识别)

对于模型的头部,我们使用了一种不在任何公开讨论不在公开Notebook中的架构。我们使用了一种来自NLP的技术,称为QuestionAnswering(即BertForQuestionAnswering)。这类似于计算机视觉中的目标检测。所有公开讨论和Notebook都使用NLP NER(即BertForTokenClassification),这类似于计算机视觉的分割

实现问答的方式是让我们的数据加载器始终在每个训练序列中包含一次入睡和一次醒来。然后我们应用1440多类softmax损失来选择目标的正确分钟。之后,我们将使用单独训练的 classification 模型来移除假阳性(因为我们的问答模型是在100%阳性样本上训练的,不能很好地定位阴性样本)。

我的CNN-Transformer-GRU,80个特征

大约CV 0.800 LB 0.750

我的Deep-GRU,2个特征

大约CV 0.805 LB 0.755

额外预测技巧

大约CV +0.050 LB 0.050 哇!
这场比赛的一大技巧是每个夜晚进行多次入睡和醒来预测。首先,我们为每个用户每个夜晚做出首选预测。使用200个测试用户,每个用户大约30个夜晚,以及2个目标,这大约有12000次预测。接下来,我们为每个夜晚做出第二次猜测(即第二大概率的预测)并除以2^1。这又增加了12000次猜测。然后我们进行第三次猜测(即第三大概率的预测)并除以2^2。我们继续为每个夜晚进行30次猜测,其中最后一次猜测除以2^29。这使CV提升了约+0.050,哇 😀!

这是因为当添加的预测分数低于所有先前预测时,Average Precision指标总会得到改善。(更多细节见此处

重排分数

大约CV +0.020 LB 0.020
对于Average Precision指标,我们为每个预测分配的分数非常重要。首先,我们使用上述模型的概率作为起始分数。然后我们使用CatBoost(带有手工卷积特征,CatBoost本身达到LB 0.705,哇!),1D-Unet,2D-Unet,梅尔频谱图,ResNet34,EfficientNetB5和Audio WaveNet来重新排列分数。这是通过预测每个预测的新分数,然后平均所有分数来实现的。

使用NMS和WBF进行集成

大约CV +0.010 LB 0.010
我的CNN-Transformer-GRU和Deep-GRU非常多样。首先,我对每个模型单独应用NMS(非极大值抑制)。每当两个预测在5分钟以内时,我们只保留概率最大的预测。然后我们使用WBF(加权框融合)集成这两个单模型。每当两个预测在5分钟以内时(并且是上述“额外分数技巧”中1至30级的相同级别),我们用平均步长位置替换这两个预测。

解决方案代码

我发布了这两个TensorFlow模型的代码在此处

同比赛其他方案