在开始机器学习之前我希望知道的事情

在开始机器学习之前我希望知道的事情

towardsdatascience.com/things-i-wish-i-had-known-before-starting-ml/

哎呀,大海。

在地中海的一次急需的假期中,我发现自己躺在海滩上,凝视着波浪。幸运女神今天心情不错:阳光从一片晴朗无云的蓝天中照射下来,加热了我周围的沙子和咸海水。一段时间以来,我第一次有了空闲时间。在我所在的偏远地区,没有与机器学习相关的东西,那里的崎岖道路会吓跑那些习惯于西方国家平坦人行道的任何人。

然后,远离工作和,部分地,文明,在心不在焉和全神贯注的白日梦之间,我的思绪开始飘散。在我们的日常事务中,我们也太忙了,没有时间做些无意义的事情。但“无意义”这个词在这里用得有点过分:当我的思绪飘散时,我首先回忆起最近的事件,然后思考工作,最终,来到了机器学习。

也许我之前文章的痕迹——我在这里反思了 6.5 年的“做”机器学习——仍然在我脑海中若隐若现。或者,也许是因为周围完全没有技术性的东西,只有大海是我的唯一伴侣。无论是什么原因,我开始在心理上回顾我背后的岁月。哪些事情做得好?哪些事情出了问题?最重要的是——我希望能有人在我开始时告诉我什么?

这篇文章是那些事情的集合。它不是要列出一些愚蠢的错误,我强烈建议其他人不惜一切代价避免。相反,这是我尝试写下那些会使我的旅程变得稍微顺畅一些(但只有一点点,不确定性是使未来成为未来的必要条件)的事情。我的列表中的一些部分与我的上一篇文章重叠,这是有充分理由的:有些教训值得重复,值得再次阅读。

这是那个列表的第一部分。第二部分目前还埋在我那沙子和海水浸染的笔记本里。我的计划是在接下来的几周内跟进它,一旦我有足够的时间把它写成一篇高质量的文章。

1. 做机器学习主要意味着准备数据

我尽量避免过多地思考这个问题,否则它会告诉我:你没有做你的作业。

当我开始的时候,我的内心独白是这样的:“我只想做机器学习。”无论那意味着什么;我幻想着连接神经网络,结合方法,并运行大规模的训练。虽然我在某个时候都做过这些事情,但我发现“做机器学习”通常意味着花费大量时间仅仅是为了准备数据,以便你最终能够训练一个机器学习模型。讽刺的是,模型训练往往是整个过程中最短和最后的一部分。

因此,每次当我最终到达模型训练步骤时,我都会在心理上松一口气,因为这意味着我已经通过了无形的部分:准备数据。在“仅仅准备数据”中没有什么“可销售的”。根据我的经验,只要做得足够好,准备数据在各方面都是不明显的。

这就是它的通常模式:

  • 你有一个项目。

  • 你得到了一个现实世界的数据集。(如果你使用一个精心整理的基准数据集,那么你很幸运!)

  • 你想要训练一个模型。

  • 但首先……数据清理、修复、合并、验证。

让我给你举一个个人例子,一个我曾经当作有趣故事讲过的例子(现在也是。当时,它意味着在时间压力下重新做几天机器学习工作……)。

我曾经在一个项目中工作,我想从 ERA5 气象数据中预测植被密度(使用 NDVI 指数)。ERA5 是一个巨大的网格化数据集,可以从欧洲中期天气预报中心免费获得。我将这个数据集与 NOAA(基本上是美国气象机构)的 NDVI 卫星数据合并,仔细对齐分辨率,一切看起来都很正常——没有形状不匹配,没有抛出错误。

然后,我宣布数据准备完成,并在合并的数据集上训练了一个视觉 Transformer 模型。几天后,我可视化了结果,……惊喜!模型认为地球是倒置的。字面上——我的输入数据是正立的,但目标植被密度在赤道处被翻转了。

发生了什么?我在分辨率转换中的一个细微的 bug 翻转了植被数据的纬度方向。我没有注意到它,因为我已经在数据准备上花了大量时间,并想尽快进入“有趣的部分”。

这种错误聚焦于一个重要的观点:现实世界的机器学习项目是数据项目。特别是在学术研究之外,你不会使用 CIFAR 或 ImageNet。你正在处理混乱、不完整、部分标记、多源数据集,这些数据集需要:

  • 清理

  • 对齐

  • 归一化

  • 调试

  • 视觉检查

更重要的是,这个列表不是详尽的。然后重复上述所有内容。

获取数据正确是工作本身。其他所有东西都是建立在那个(不幸地看不见的)基础之上的。

2. 写论文就像准备销售提案

一些论文只是“读起来很好”。你可能无法解释为什么,但它们有节奏、逻辑、清晰度,很难忽视。这很少是偶然的。对我来说,写论文就像制作一个非常具体的销售提案。你正在向一个怀疑的受众推销你的想法方法洞察力

这对我来说是一个惊人的认识。

当我开始的时候,我假设大多数论文看起来和感觉都一样。对我来说,它们都是“科学写作”。但随着时间的推移,当我阅读了更多的论文,我开始注意到它们之间的差异。就像那句俗语:对局外人来说,所有的绵羊看起来都一样;对牧羊人来说,每一只都是独特的。

例如,比较我最近遇到的这两篇论文:

它们都使用机器学习。但它们针对不同的受众,具有不同的抽象层次、不同的叙事风格,甚至不同的动机。第一个假设技术新颖性是核心。第二个关注应用的关联性。显然,两者之间也存在视觉上的差异。

随着你阅读的论文越多,你越会意识到:没有一种写“好”论文的方法。有许多方法,而且方法取决于受众。

除非你是那些非常罕见的天才之一(比如特伦斯·陶或那个水平的人),否则你很可能需要支持才能写得好。特别是当为特定的会议或期刊定制论文时。在实践中,这意味着与一位理解该领域的资深机器学习人员紧密合作。

撰写一篇好的论文就像准备一个销售提案。你需要:

  • 正确地界定问题

  • 了解你的受众(即目标场合)

  • 强调最能引起共鸣的部分

  • 并且润色,直到信息深入人心

3. 修复错误是前进的道路

几年前,我对机器学习有一个浪漫的想法,那就是探索优雅的模型,发明新的激活函数,或者精心设计损失函数。这可能对一小部分研究人员来说是正确的。但对我来说,进步往往看起来像:“为什么这段代码运行不了?”或者,甚至更令人沮丧:“那段代码刚才还运行过——为什么现在不运行了?”

假设你的项目需要使用视觉转换器处理环境卫星数据(即上面第一部分中的模型方面)。你有两个选择:

  1. 从头开始实现一切(除非你特别有冒险精神,或者需要为课程学分而做,否则不建议这样做)。

  2. 找到一个现有的实现并对其进行修改。

在 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 问题提供了详细信息。

posted @ 2026-03-28 10:22  布客飞龙V  阅读(1)  评论(0)    收藏  举报