在开始机器学习之前我希望知道的事情
在开始机器学习之前我希望知道的事情
towardsdatascience.com/things-i-wish-i-had-known-before-starting-ml/
哎呀,大海。
在地中海的一次急需的假期中,我发现自己躺在海滩上,凝视着波浪。幸运女神今天心情不错:阳光从一片晴朗无云的蓝天中照射下来,加热了我周围的沙子和咸海水。一段时间以来,我第一次有了空闲时间。在我所在的偏远地区,没有与机器学习相关的东西,那里的崎岖道路会吓跑那些习惯于西方国家平坦人行道的任何人。
然后,远离工作和,部分地,文明,在心不在焉和全神贯注的白日梦之间,我的思绪开始飘散。在我们的日常事务中,我们也太忙了,没有时间做些无意义的事情。但“无意义”这个词在这里用得有点过分:当我的思绪飘散时,我首先回忆起最近的事件,然后思考工作,最终,来到了机器学习。
也许我之前文章的痕迹——我在这里反思了 6.5 年的“做”机器学习——仍然在我脑海中若隐若现。或者,也许是因为周围完全没有技术性的东西,只有大海是我的唯一伴侣。无论是什么原因,我开始在心理上回顾我背后的岁月。哪些事情做得好?哪些事情出了问题?最重要的是——我希望能有人在我开始时告诉我什么?
这篇文章是那些事情的集合。它不是要列出一些愚蠢的错误,我强烈建议其他人不惜一切代价避免。相反,这是我尝试写下那些会使我的旅程变得稍微顺畅一些(但只有一点点,不确定性是使未来成为未来的必要条件)的事情。我的列表中的一些部分与我的上一篇文章重叠,这是有充分理由的:有些教训值得重复,值得再次阅读。
这是那个列表的第一部分。第二部分目前还埋在我那沙子和海水浸染的笔记本里。我的计划是在接下来的几周内跟进它,一旦我有足够的时间把它写成一篇高质量的文章。
1. 做机器学习主要意味着准备数据
我尽量避免过多地思考这个问题,否则它会告诉我:你没有做你的作业。
当我开始的时候,我的内心独白是这样的:“我只想做机器学习。”无论那意味着什么;我幻想着连接神经网络,结合方法,并运行大规模的训练。虽然我在某个时候都做过这些事情,但我发现“做机器学习”通常意味着花费大量时间仅仅是为了准备数据,以便你最终能够训练一个机器学习模型。讽刺的是,模型训练往往是整个过程中最短和最后的一部分。
因此,每次当我最终到达模型训练步骤时,我都会在心理上松一口气,因为这意味着我已经通过了无形的部分:准备数据。在“仅仅准备数据”中没有什么“可销售的”。根据我的经验,只要做得足够好,准备数据在各方面都是不明显的。
这就是它的通常模式:
-
你有一个项目。
-
你得到了一个现实世界的数据集。(如果你使用一个精心整理的基准数据集,那么你很幸运!)
-
你想要训练一个模型。
-
但首先……数据清理、修复、合并、验证。
让我给你举一个个人例子,一个我曾经当作有趣故事讲过的例子(现在也是。当时,它意味着在时间压力下重新做几天机器学习工作……)。
我曾经在一个项目中工作,我想从 ERA5 气象数据中预测植被密度(使用 NDVI 指数)。ERA5 是一个巨大的网格化数据集,可以从欧洲中期天气预报中心免费获得。我将这个数据集与 NOAA(基本上是美国气象机构)的 NDVI 卫星数据合并,仔细对齐分辨率,一切看起来都很正常——没有形状不匹配,没有抛出错误。
然后,我宣布数据准备完成,并在合并的数据集上训练了一个视觉 Transformer 模型。几天后,我可视化了结果,……惊喜!模型认为地球是倒置的。字面上——我的输入数据是正立的,但目标植被密度在赤道处被翻转了。
发生了什么?我在分辨率转换中的一个细微的 bug 翻转了植被数据的纬度方向。我没有注意到它,因为我已经在数据准备上花了大量时间,并想尽快进入“有趣的部分”。
这种错误聚焦于一个重要的观点:现实世界的机器学习项目是数据项目。特别是在学术研究之外,你不会使用 CIFAR 或 ImageNet。你正在处理混乱、不完整、部分标记、多源数据集,这些数据集需要:
-
清理
-
对齐
-
归一化
-
调试
-
视觉检查
更重要的是,这个列表不是详尽的。然后重复上述所有内容。
获取数据正确是工作本身。其他所有东西都是建立在那个(不幸地看不见的)基础之上的。
2. 写论文就像准备销售提案
一些论文只是“读起来很好”。你可能无法解释为什么,但它们有节奏、逻辑、清晰度,很难忽视。这很少是偶然的。对我来说,写论文就像制作一个非常具体的销售提案。你正在向一个怀疑的受众推销你的想法、方法和洞察力。
这对我来说是一个惊人的认识。
当我开始的时候,我假设大多数论文看起来和感觉都一样。对我来说,它们都是“科学写作”。但随着时间的推移,当我阅读了更多的论文,我开始注意到它们之间的差异。就像那句俗语:对局外人来说,所有的绵羊看起来都一样;对牧羊人来说,每一只都是独特的。
例如,比较我最近遇到的这两篇论文:
-
在顶级机器学习场合的机器学习论文:
arxiv.org/pdf/2206.06243 -
一篇使用机器学习但发表在顶级运营管理期刊上的论文:
arxiv.org/pdf/2304.11910
它们都使用机器学习。但它们针对不同的受众,具有不同的抽象层次、不同的叙事风格,甚至不同的动机。第一个假设技术新颖性是核心。第二个关注应用的关联性。显然,两者之间也存在视觉上的差异。
随着你阅读的论文越多,你越会意识到:没有一种写“好”论文的方法。有许多方法,而且方法取决于受众。
除非你是那些非常罕见的天才之一(比如特伦斯·陶或那个水平的人),否则你很可能需要支持才能写得好。特别是当为特定的会议或期刊定制论文时。在实践中,这意味着与一位理解该领域的资深机器学习人员紧密合作。
撰写一篇好的论文就像准备一个销售提案。你需要:
-
正确地界定问题
-
了解你的受众(即目标场合)
-
强调最能引起共鸣的部分
-
并且润色,直到信息深入人心
3. 修复错误是前进的道路
几年前,我对机器学习有一个浪漫的想法,那就是探索优雅的模型,发明新的激活函数,或者精心设计损失函数。这可能对一小部分研究人员来说是正确的。但对我来说,进步往往看起来像:“为什么这段代码运行不了?”或者,甚至更令人沮丧:“那段代码刚才还运行过——为什么现在不运行了?”
假设你的项目需要使用视觉转换器处理环境卫星数据(即上面第一部分中的模型方面)。你有两个选择:
-
从头开始实现一切(除非你特别有冒险精神,或者需要为课程学分而做,否则不建议这样做)。
-
找到一个现有的实现并对其进行修改。
在 99%的情况下,选项 2 是明显的选择。但“只是插入你的数据”几乎从未奏效。你会遇到:
-
不同的计算环境
-
对输入形状的假设
-
预处理怪癖(例如数据归一化)
-
硬编码的依赖关系(我也有责任)
很快,你的日子可以变成一系列无休止的调试、回溯、测试边缘情况、修改数据加载器、检查 GPU 内存**,以及重新运行脚本。然后,慢慢地,事情开始工作。最终,你的模型开始训练。
但这并不快。这是通过修复错误来前进。
4. 我(非常确定)不会做出那个突破
你肯定听说过它们。那篇关于 Transformer 的论文。GANs。稳定扩散。我内心有一部分想:也许我会是下一个写出变革性论文的人。当然,有人必须这么做。但统计上,可能不会是我。或者你,抱歉。但这没关系。
导致一个领域迅速变化的成果在定义上就是非凡的。这些非凡的成果直接意味着大多数成果,即使是好的成果,也几乎不被认可。有时,我仍然希望我的某个项目能够“爆炸”。但是,到目前为止,大多数都没有。有些甚至没有发表。但是,嘿,那不是失败——那只是起点。如果你期望每一篇论文都能一炮打响,那么你很快就会失望。
收尾思考
对我来说,机器学习常常看起来是一个光鲜、前沿的领域——突破就在眼前,而“做”意味着聪明人用 GPU 和数学创造魔法。但在我日常的工作中,很少是这样。
更常见的是,我的日常工作包括:
-
处理杂乱的数据库
-
调试从 GitHub 获取的代码
-
反复重写论文
-
再次没有产生新颖的结果
而这是可以接受的。
脚注
前一篇文章提到:towardsdatascience.com/lessons-learned-after-6-5-years-of-machine-learning/
- 如果你对这个感兴趣,我最喜欢的论文是这篇:
arxiv.org/abs/2103.09762。我是在去年一个周五的下午读的。
**时至今日,我仍然会收到关于在 TensorFlow 中清除 GPU 内存不可能的邮件通知。这个 5 年前的 GitHub 问题提供了详细信息。

浙公网安备 33010602011771号