机器学习很难,直到我学会了这 5 个秘密!

内容简介:

数学是我们很多人的噩梦。

我自己没有学过高等数学,意外点开了这篇文章。正准备离开的时候,看到了一则这篇文章的评论:“你破解理解数学和代码的秘密的方式非常棒”。

于是,就决定阅读这篇文章。 虽然懵懂,但感觉挺有用。

重点总结:

1. 数学只是将人类想法形式化的工具(Math is just the formalization of a human idea.)。

2.我意识到每一步都只是应用了一个特定的规则或定义。我意识到,这些数学推导或变换,到了一定程度,只需要你收集一系列的规则和技巧,然后简单地应用就行了。

3.写代码实际上不是编程的全部。调试才是编程的核心。

4.人们为什么放弃?因为他们有错误的期望,不享受学习的过程

原作者:Boris Meinardus,叶赛文编译。 推荐理由:观点新奇

原文链接: https://pub.towardsai.net/machine-learning-was-hard-until-i-learned-these-5-secrets-0ad594de0bec


image.png (图片数学老师由Midjourney生成)

这些技巧可能没人告诉过你,但它们确实能让学习机器学习(ML)变得简单且有趣。

学习机器学习意味着要搞懂复杂的数学和编程。这可真不容易!至少对我来说,直到我发现了这5个技巧,虽然它们并不是什么秘密,但很少有人会教你,尽管每个人都应该了解它们……

我花了3.5年的时间研究机器学习,自己摸索这些技巧花了太多时间。 现在,我要把它们分享给你,免得你也走弯路!

数学的秘诀#1

你对数学的看法可能本末倒置了,这让你一开始就陷入困境,但这并不是你的错!

回想我刚开始学习ML时,教授们只是在屏幕上展示公式,说这是决策树的损失函数,然后就结束了。

我和很多同学都迷茫了。我们只能盯着公式,希望突然有一天能够豁然开朗。

我总是问自己,那些聪明的科学家如何能够如此深入地理解数学,从而开发新的算法,并用“数学语言”进行思考。直到我意识到我的想法是错误的。

我太专注于数学公式本身,而不是退一步,像科学家那样去思考。

我曾试图去理解一个公式的全貌,但现在我明白了这个技巧之后,这种做法已经毫无意义了!

不要把数学看作是抽象的东西,然后试图让它变得易于理解。你应该反其道而行之。想象人类最初的想法,理解它,然后考虑如何将其翻译为数学语言。

这听起来可能很混乱,但数学并不是人们独立的思考语言。科学家和你我一样,用自然语言思考,他们只是知道如何将想法转化为数学的形式,这样才能实现并进一步发展。

正如我之前提到的,我曾经把公式当成一个整体来看。但实际上,公式中的每个部分都是人类想法的一部分。比如,求和或乘积实际上就是一个可以包含条件的for循环,这些条件在编程中就相当于if-else语句。

当然,理解数学概念背后的人类思想并不容易,需要有人逐步教你。但根据我的经验,通常有两种情况:

  1. 老师已经在做这个了,但你没有意识到,因为你从未被教过这种思考方式;
  2. 老师确实只关注公式和推导。这时,你需要自己去寻找背后的原始思想,比如上网查找。但好消息是,现在你知道了这不是你的错,你可以找到数学的直观理解!

数学只是将人类想法形式化的工具。

实际上很少有人真的用数学语言来思考。它只是一个工具。但是在进行中间推导步骤时,你通常需要用数学语言思考,这很难。除非你知道下一个技巧。

数学的秘诀#2

这个技巧从根本上改变了我对复杂数学推导的看法。

image.png
image.png

回到大学时,教授会解释ML算法的直观理念,展示如何将其转化为数学语言,然后告诉我们希望公式达到的最终形式,以提高效率或使其成为可实施的算法。但在某个点,他开始连续推导,一步步写下来,期望我们明白他为什么这么做。

大家都很困惑,当然也感到害怕和烦恼。

但这些推导比你想的简单。不是说它们容易,但在学习了这个技巧后,执行起来就简单多了。

我意识到每一步都只是应用了一个特定的规则或定义。我意识到,这些数学推导或变换,到了一定程度,只需要你收集一系列的规则和技巧,然后简单地应用就行了。

image.png
image.png

在课上,每看到一步,我就会明确寻找他们用的规则或定义,并把它记在我的清单上。

当我自己解决或阅读数学推导时(比如做作业或考试时),我通常就是在做模式匹配。我会看看我现在的位置,检查我的规则和定义清单,然后应用符合模式的规则。

当然,有些模式、规则和定义比其他的难以识别,但经过足够长时间的练习,你就会开始记住某些模式。但总的来说,对于大多数ML数学,这个技巧非常有效。

你需要收集你的数学工具箱,并学会识别何时可以应用哪个规则。

这意味着,需要不断练习。

但是,数学远远不是ML的全部。编程也是一个极具挑战性的技能。

编程的秘诀

学习Python基础知识,然后是像PyTorch这样的ML库非常酷,也很有趣。你只需要按照在线教程一步步来,学习曲线非常陡峭。你按照步骤实现大量代码!

你真的可以看到并感受到自己的进步!

但当你想进一步学习如何自己实现实际的算法或ML流程时,你可能会遇到障碍。突然之间,你可能会在一个棘手的问题上纠结几个小时,也许只写了五行代码,感觉自己没有取得任何进展。

这非常令人沮丧,很多人在这一点上就认为编程太难了,他们永远不可能真正学会编程。

“三小时才写出五行代码,真是太失败了。”

我曾经认为自己很笨,因为写出的代码总是要花几小时调试才能运行。这种感觉可能会让你连开始编程的勇气都没有,因为你知道自己会失败。

但这其实不是真的。实际上,编程一个小时很可能意味着需要三小时的调试时间。

当我意识到这才是编程的真正含义时,我突然感到轻松多了,也不再觉得自己愚蠢。因为我正在做的正是正常和预期的事情!现在,有了像Github Copilot这样的神奇工具,我就离不开了,它可以帮你生成代码,还能帮你解释代码。

有很多东西你只能通过自己的经验或他人的经验来学习。这就是为什么我有一个完全免费的每周新闻通讯,在那里我分享我的机器学习研究经验,包括实用的技巧、AI新闻等等。

不管怎样。你必须明白,写代码实际上不是编程的全部。调试才是编程的核心。

这个认识真的可以帮助你逐步实现自己的想法。

但是当你必须处理一个现有的代码库时,面对一大堆代码,你可能还是会感到不知所措。所以,让我们来看看下一个“秘密”技巧。

理解代码的秘诀

有两种情况下你需要理解复杂的代码。

第一种情况是在现有的代码库上进行开发。

我记得当我开始我的第一个大型项目时,我是在现有的代码库上进行开发的。代码量太大了,我根本不知道从哪里开始。

就像前面提到的秘密一样,我再次觉得学习阅读代码和编写代码一样不可能。所有那些教程和小型个人项目都没有为我准备好面对如此庞大的代码量。

我试图阅读每个源文件,并尽快开始编写代码到我认为合理的地方。但这不出所料地导致了很多头痛,浪费了很多时间编写注定要失败的代码。我必须通过艰难的方式学习,有一个非常简单的策略可以理解大型代码库。

我希望有人能简单地告诉我一次如何应对这样的挑战。

在大多数大型ML代码库中,你会有一个train.py和一个eval.py文件。这些应该始终是你的起点。我找到这些文件,在开始处设置一个断点,然后开始用调试器逐步执行代码。

我无法足够强调这种技术是多么简单却又有效。这简直就像作弊。

你可以逐步查看数据预处理、训练循环、实际模型、评估指标和其他每一个细节。

根据代码库和你的经验,这只需要几个小时,你就会对代码库有一个惊人的概述,并且会对在哪里添加你自己想法的新代码有更好的感觉。

话虽如此,你可能不总是想要在现有的高度优化的代码库上构建,而只是想要更好地理解一个算法。例如,当你想理解PPO,一个著名的强化学习算法时,我不建议查看优化的实现。

那太过复杂了。

幸运的是,对于许多重要的模型,都有最简单的、教育性的实现,只实现了主要想法,以便人们可以理解模型。

在这里,同样,最好的方法是在main函数的开始处设置一个断点,然后开始调试。

最后,有一个掌握机器学习的基本秘密你需要知道。

掌握ML的秘密

这个最终的秘密将我们刚才讨论的所有内容联系在一起,是决定你在掌握ML方面成功或失败的一个原因。

根据IBM 2022年的一项研究,34%的组织认为糟糕的AI技能、专业知识或知识是阻碍成功采用AI的首要原因。

你认为人们为什么学不会ML,并且属于AI技能差的那一类人?

是因为它很难吗?是的,但对于现在已经掌握它的每个人来说也是困难的。人们未能掌握ML是因为他们学习ML的时间太短,放弃了

人们为什么放弃?

因为他们有错误的期望,不享受学习的过程。他们认为掌握ML很难,因为他们没有在几周内学会ML。或者,因为他们第一次没有理解一个解释ML概念的视频,他们就永远不会理解它。

大约3.5年前,我参加了我第一个介绍性的AI大学课程。那个学期之后,我参加了我的第一个真正的ML课程,并开始了我的第一个ML项目。那个学期之后,我继续我的第一个深度学习课程,并继续进行项目工作,阅读了很多论文。

我绝对不是第一次就理解了一切。但我知道那是正常的。随着时间的推移,我学会了之前提到的秘密,而且掌握ML需要时间。

我在亚马逊、Nuro和谷歌DeepMind的第一个ML面试失败了。但现在我正在与一位前Meta教授合作,并与一位谷歌DeepMind研究员合作。

它。需要。时间。句号。

这不是一个周末就能学会的技能。

这里也适用10000小时定律。如果你在一个特定的技能上花费10000小时,你将掌握它。

我绝对不是想要打击你,而是相反,我不想成为某种奇怪的“影响者”,想要卖给你几周内掌握ML的梦想。

我想鼓励你真正学习ML,学习理论,并真正积累实践经验。

而ML的“精通”是在学习基础知识之后,通过真正的项目工作,遇到现实世界的问题,阅读真正的最新论文或相应的博客文章而来的。

通过对它需要时间的期望,你会放松得多,学习过程变得更加容易、愉快,并最终成功。

所有这些秘密都是普遍真实的,无论你决定如何学习ML。我之所以这么说,是因为主要有三种方式可以做到这一点,如果你想知道哪一种最适合你,你可能想接着阅读我的博客。我在那里谈论数据科学,但一切都同样适用于机器学习。

近期文章

发表评论