技术演练

来自 NVIDIA Kaggle Grandmasters 的竞争和社区洞察

在这篇文章中,我们总结了 GTC 与 NVIDIA 的Kaggle大师级团队在 GTC 课程中的问题和答案。此外,我们还回答了在这些课程中没有机会回答的观众问题。

问:你如何决定参加哪些比赛?

Ahmet:我阅读了比赛描述和评估指标。然后,我给自己几天的时间来思考我是否有任何新颖的想法可以尝试。如果我没有任何有趣的想法,那么我不会加入。但有时我只是为了学习和提高我的技能而加入。

问:要赢得比赛,数学是必修课吗?

Kazuki:不是强制性的,但您可能希望了解竞争指标以及机器学习模型的工作原理。例如,线性模型和树模型是完全不同的。因此,在进行集成时,这些将产生良好的结果。

问:你是如何看待比赛的?

Bojan:在第一天,我总是提交一份样本,这样我就可以登上排行榜。传统上,我对数据分析或 EDA 不是很在行,这是我的弱点之一。但最近,我开始做更多的事情,改变我的方法。

我经常做的一件事就是看看在比赛中集成不同的模型是多么容易。这决定了我的长期战略。如果将稍有不同的模型进行集成可以带来很好的提升,那就意味着构建许多不同的模型非常重要。然而,如果 ensembling 不能给您带来巨大的提升,那么从长远来看,功能工程或提出创造性的功能更为重要。

其中一个策略是尽可能多地改进单个模型,并且只有当您对它感到满意时才进行集成。

Jean-Francois:在每一场比赛中,阅读人们在论坛上分享的内容是一个好主意。这意味着读取主机写入的内容,包括注释。并阅读最近类似比赛中的顶级解决方案。令人惊讶的是,有些比赛是由以前的比赛中公开分享并适应新比赛的模型赢得的。人们读得不够。你也可以试着找到关于这个主题的论文,特别是在科学竞赛中,那里经常有相关的论文。

Giba:下载数据并运行一些EDA。获取关于特征和目标分布的信息,以便找到最佳验证策略。随机KFold通常适用于大多数问题,但通常需要分组KFold或时间分割KFold。找到最佳验证策略后,使用它运行一个简单的模型并提交以检查排行榜分数。通常,这是竞争中最重要的事情,如果验证是可靠的且正确的,则所有在本地进行的度量改进都应转化为Kaggle排行榜。之后,您必须从事特征工程,并使用不同的数据集和训练算法构建一组不同的模型。通常,使用ANN和GBDT训练的模型的集合足以在LB中排名靠前。不幸的是,搜索目标泄漏是Kaggle竞争的一部分。

问:您建议从哪个深度学习框架开始?

Jean-Francois:我认为最好的是 Keras ,因为它非常抽象。您可以构建相当复杂的模型,并用几行代码对其进行训练。然后,出于两个原因,您可能希望转到 PyTorch 或 TensorFlow :更好地控制您的模型和自定义您的层,以及重用预训练模型的能力。在这方面,我的印象是 PyTorch 处于领先地位。我们在 Kaggle 上所做的主要是模型原型。也许今天, TensorFlow 在模型部署方面更好,但它在 Kaggle 中并不相关。

Jiwei:我想补充一点, PyTorch Lightning 是一个基于 PyTorch 的用户友好软件包,特别是对于新用户。它抽象了培训的细节,并为诸如 Multi- GPU 、 TPU 和混合精度等高级功能提供了方便的 api 。

观众调查显示, 66% 的人喜欢 PyTorch , 31% 的人喜欢 TensorFlow 。

问:在使用伪标签时,如何防止过度装配?把这种策略用于合奏可以吗?

Bo:在最近的 RANZCR 比赛中,我们的团队使用伪标记和集成两种方法获得了胜利。两者都可以使用,但为了防止过度安装,您应该非常小心。

  • 首先,要将原始数据拆分为五个折叠,并将外部数据拆分为五个折叠。在这两个阶段,将有五个模型。
  • 在第一阶段,在原始数据上训练模型,并对外部数据进行推理,以进行外部数据预测。这样做五次。
  • 在第 2 阶段,将原始数据(带有原始标签)和外部数据(带有作为伪标签的第 1 阶段预测)组合起来,并再次训练模型。

重要的是,当我们制作伪标签时,我们要制作伪标签的五个副本。对于阶段 2 的 fold0 模型(在组合 fold1 , 2 , 3 , 4 上进行培训,并在组合 fold0 上进行验证),我们希望确保它从未拥有 fold0 的信息,因此用于此模型的伪标签需要来自阶段 1 的 fold0 模型(在原始 fold1 , 2 , 3 , 4 上进行培训)。这样你就不会有任何泄漏。

可以将集合与伪标记一起使用。在 RANZCR 比赛中,我们在两个阶段都使用了合奏。

Chris:伪标签是我在 Kaggle 特别学到的东西之一,因为我读过的书中没有一本提到过它。 Kaggle 是学习伪标签等实用技巧的好地方。

问:什么是常用的后处理技术?如何提高我在多标签分类问题上的分数?

我先试试这个。最近,一位Kaggler称我为后处理大师,因为我刚刚获得了第五枚专门使用后处理的金牌。这是一枚个人金牌。[竞赛特级大师的标准是五枚金牌,包括至少一枚个人金牌。]我将分享一些秘密。

首先是研究竞争指标。有些指标称为排名指标(如 AUC )。对于这些指标,绝对预测值并不重要。只有相对顺序才重要。对于多标签分类问题,首先要问的是预测是按标签排序,还是全部排序。在最近的雨林竞赛中,我们预测雨林中的动物声音,所有的预测都是跨标签排列的。因此,重要的是,模型知道哪些动物是常见的,哪些是稀有的。

其他类型的度量基于平均值,如均方误差。如果测试数据的平均值与训练数据的平均值不同,则改变预测值可以改进度量。

对于召回率和精确度等指标,您应该知道它们的含义。始终了解您的指标。每个指标都要求您做不同的事情并应用不同的后处理。就我个人而言,我真的很喜欢这样做。我有数学背景。指标是数学方程式,我喜欢思考什么对优化很重要。

我想补充一点。如果度量是对数损失,有时它有助于剪裁极值。模型可以用接近0或1的值进行可靠的预测,但如果存在标签错误,日志丢失的代价可能会非常大。因此,最好将预测值剪裁为0.01/0.99或0.02/0.98。但总是在局部验证中找到最佳剪辑阈值。

问:在与深度学习团队合作时,如何使用可解释性?

Christof:我想说,这在很大程度上取决于集合方法。我经常使用单一模型的简单平均值。因此,如果单个模型是可以解释的,那么作为它们的简单组合的集合也可能是可以解释的。但另一方面,我同意,合奏引入了另一个方面来解释,比如为什么尽管个人表现平平,但特定的模型比其他模型对合奏的贡献更大。

问:您如何在实践中进行超参数优化、特征工程和特征选择循环?

Chris:就个人而言,我不会花太多时间优化超参数。我将探讨构建 XGB 或 NN 模型时的重要参数。(例如,我将使用 XGB 调整 max _ depth 、 subsample 和 colsample _ bytree ,使用 NN 调整 loss 、 learning rate 和 scheduler )。但在尝试改进模型时,我将花更多的时间探索使用 XGB 的特性工程和使用 NN 的数据增强、体系结构设计和/或 TTA 。

问:你如何从神经网络中获得最佳性能?

Jean-Francois:数据预处理(包括增强)和后处理工作。新来的人往往过于关注超参数优化或优化器的选择。我几乎总是坚持亚当的余弦学习计划。

Jiwei:多水头多损耗函数是提高神经网络性能的另一个常见技巧。它是一种正则化的方法。

Bo: I want to point to this great post by Andrej Karpathy where he shared many NN tricks: http://karpathy.github.io/2019/04/25/recipe/

问:作为初学者,向卡格尔学习的最佳方式是什么?

Bojan:查看人们发布的笔记本,阅读正在讨论的主题,尝试运行共享的模型,并使用讨论的想法改进模型。如果不是你的 Kaggle 表现,这些是可以让你在机器学习技能方面走得相当远的几个步骤。

Bo:初学者开始学习的一个好方法是合作。当然,这取决于个性。有些人喜欢独自工作,比如说最适合自己。但对很多人来说,我认为合作是一种很好的学习方式,因为不同的人有不同的技能。它们通常可以相互补充。你总能从每个队友身上学到一两样东西。当然,在请求团队合并之前,您需要做一些工作。不要要求排名靠前的人在没有做很多事情的情况下与你合作。试着问问那些接近你排行榜位置的人。

我同意。我参加过很多个人比赛,但最近我参加了更多的团队合作。在每一个团队中,我都学到了很多东西。即使只是观察人们如何组织他们的代码,或者他们使用的是什么计算机语言。它可以只是学习他们如何处理问题,或者他们如何进行实验。当你和别人一起工作时,有很多东西可以帮助你成为一名更好的数据科学家。

不要害羞。跳入水中。你将学会游泳。我最后推荐一件事。当您加入Kaggle时,系统会要求您创建一个用户名。如果你害怕你的朋友或同事在你开始时看到你挣扎,你可以使用别名。我就是这么做的。我只是在感到舒服后才透露我的真实姓名。所以只要注册,选择一个笔名,学习,然后尝试。比赛结束后,不要只参加下一场比赛。阅读人们分享的内容。试着想想你本可以做得更好的是什么,为什么你会想到你刚刚读到的这个很酷的想法。比赛结束后的几天是你学习最多的时候。

问:你建议自己建造机器还是购买预建系统进行深度学习?

Jean-Francois:构建通常更便宜,但它需要更多的技能和时间。如果你两者都有,那么就构建你的装备。有一些商店会根据你的配置为你构建定制 PC 。我个人没有时间和技能,买了一台带有 GTX 1080 Ti 的定制 PC ,对此非常满意。如今,你可以从主要 PC 制造商那里找到性能良好 GPU 的 PC ,包括笔记本电脑。

季伟:另一个选项是外部 GPU 框。我曾经在笔记本电脑上训练深度学习模型,笔记本电脑与带有桌面级 GPU 卡的外部 GPU 盒相连。

问:你最喜欢 Kaggle 的什么?

Chris:社区。 Kaggle 是一个独特的地方,你可以在其他地方遇到高质量的数据科学家。

Jean-Francois:如果你想了解使用机器学习建模实际问题的最新技术, Kaggle 绝对是一个好去处。而且它让人上瘾。

Jiwei:在实践中学习新算法、新建模技术。当我能够应用论文中的新模型来解决现实世界的问题时,我发现自己更有动力、更专注。

Bo:阅读 Kagglers 在每次比赛后发布的顶级解决方案。每次我都能学会一些新技巧。

Bojan:这是一个令人惊叹的学习平台。我不认为有任何其他平台可以让你像在 Kaggle 上一样快速地学到很多东西。

Giba:处理各种各样问题的能力,同时学习并应用最先进的算法来解决这些问题。

Kazuki:我喜欢获得我感兴趣的知识。

Christof:解决非常复杂的问题并提出创新的解决方案。

Ahmet:我喜欢 Kaggle 的问题多样性,我喜欢攀登排行榜。

 

Tags