X大神:高中生如何学习 ML/AI ?


自称首席量化分析师.贾斯汀·斯凯查克分享:
  • 我不是优化股票市场的回报,而是优化学生大脑中的学习效率。
如何从高中数学走向尖端的 ML/AI:一份详细的 4 阶段路线图,其中包含我所知道的最佳学习资源的链接。

我最近与一些从事软件工作的人进行了交谈,他们希望能够阅读严肃的 ML/AI 论文,例如《去噪扩散概率模型》。

  • 但即使他们在高中数学、甚至 AP 微积分方面表现出色,甚至可能学过一些本科数学......
  • 这些前沿的机器学习论文中的数学看起来仍然像象形文字。

那么,如何从高中数学过渡到尖端的机器学习

这是一个分为四个阶段的路线图。

我将首先简要描述所有阶段,然后我将回到每个阶段进行深入探讨,充分解释其基本原理并向您指出可以用来指导您学习的资源。

  • 第一阶段:基础数学。所有支撑机器学习的高中和大学水平的数学。所有代数、大量单变量微积分/线性代数/概率/统计,以及一些多变量微积分。
  • 第二阶段:经典机器学习。编写基本回归和分类模型的精简版本,从线性回归到小型多层神经网络。
  • 第三阶段:深度学习。具有许多参数的多层神经网络,其中网络架构根据您尝试让模型执行的特定任务类型进行定制。
  • 第 四 阶段:尖端机器学习。Transformers、LLM、扩散模型以及现在出现的所有疯狂的东西,一开始就吸引了你的兴趣。

请注意,我花了 5 年多的时间致力于为第 1-2 阶段的学习者提供资源支持,但这些阶段普遍缺乏严肃而友好的资源,所以我将在其中加入我自己的资源(以及其他一些资源)。

但在第 3-4 阶段,我将参考的所有资源都与我没有任何关联。

好吧,让我们开始吧!

===第一阶段:基础数学===

机器学习需要大量的数学知识:全部高中代数、大量的单变量微积分/线性代数/概率/统计学,以及一些多变量微积分。

去年,我花了一些时间逐个主题地规划了所有这些数学知识。在许多数学课程中,有些主题对于机器学习来说是绝对必要的,而其他主题则没有必要。

例如,在多元微积分中:

  • 您必须知道如何计算梯度(在训练 ML 模型时,它们总是出现在梯度下降的上下文中),并且您需要熟练掌握多变量链式法则,这是训练神经网络的反向传播算法的基础。
  • 但另一方面,许多其他多变量微积分主题,如散度、旋度、球面坐标和斯托克斯定理实际上并没有出现在 ML 的任何地方。
当我列出必修主题列表后,我们便组织了一门机器学习数学课程,其目录可在此处查看
  • (要查看所有 242 个单独主题的列表,请单击“内容”,然后单击展开单元框。)

您也可以通过免费的在线资源来学习这些主题。例如,

  •  可汗学院涵盖算术直至高中数学,
  • OpenStax 涵盖高中和大学早期的一些数学,
  • MIT 开放式课程涵盖大量大学数学,并且
  • 对于任何给定的数学主题,网上都有大量的笔记,YouTube 上通常也有大量的视频。

然而,要想使用免费资源顺利完成第一阶段,您必须将零散的教育内容拼凑在一起,而且还会产生更多无效的摩擦,这不仅会减慢您的速度,还可能使您更容易不知所措并放弃。

(就我个人而言,我在高中时通过麻省理工学院的开放式课程和各种教科书自学了许多数学科目。这些都是很好的资源,我通过它们取得了很大的进步,但就我投入学习的努力而言,如果我能更有效地利用时间,我本可以走得更远。为什么不直接通过教科书、麻省理工学院开放式课程、可汗学院等来学习呢?

对于大多数人来说,基础数学学习的这个阶段是成败的关键时刻,也是机器学习之旅中最艰难的部分。

学习机器学习的基础数学就像学习阅读:获得读写能力会为你打开一个进一步学习体验的世界,但如果没有读写能力,这个世界就会对你完全关闭。

===第二阶段:经典机器学习===

一旦掌握了数学基础,您就可以开始编写基本 ML 模型的精简版本,从线性回归到小型多层神经网络。
但是,不要急着进入花哨的尖端 ML 模型——如果这样做,你会被许多来自传统机器学习的模式所困扰。

让我举一个具体的例子来说明我的意思。让我们回到那篇论文《去噪扩散概率模型》( arxiv.org/pdf/2006.11239 )。

如果你看一下第 3 页的底部,你会看到公式 (8) 看起来类似于以下内容,但具有更多的下标和函数参数(为了简单起见,我将其省略):

L = E[ 1/2σ || μ~ – μ ||^2 ] + C


即使你知道

  • E 的含义(概率/统计中的“expectation期望”),
  • σ 的含义(“标准差standard deviation”也来自概率/统计),
  • ||的含义(线性代数和多变量微积分中的“向量范数vector norm”),
  • “C” 的含义(任意的“constant of integration积分常数”,在求导时消失,在微积分中介绍过),
  •  等等...
这些符号的排列方式可能看上去很令人困惑。

但是如果你了解传统的机器学习,你就会立即发现这个等式类似于“损失函数”:

  • 用于测量两个量之间的平均平方差。
  • (作者在等式左边使用字母“L”并非巧合——“L”代表“Loss”)

在经典机器学习中,两个量之间的平均平方差中,一个量来自模型,另一个量来自数据集,因此从某种意义上说,损失函数衡量了模型对整个数据集的预测有多“错误”。

  • (粗略地说,“训练” ML 模型的目标是最小化损失函数,也就是调整模型的参数以最小化模型对数据的“错误”程度。)

我的观点是,如果您了解来自经典 ML 的这些建模模式,那么您会立即对在尖端 ML 论文中看到的方程式产生直觉。
好比如:

  • 如果一个音乐家练习过弹奏音阶和识别音调,他们通常就可以开始演奏任何歌曲——即使是他们从未听过的歌曲——并以听起来不错的方式即兴演奏,因为他们对底层音乐模式的理解让他们对自己所处的新音乐结构有了一定程度的“感觉”或“直觉”。
  • 类似地,一位了解各种设计模式的经验丰富的软件开发人员可能仅通过注意高级结构中的模式就能了解一段代码是如何运行的——即使他们实际上并没有逐行去理解代码中正在发生的精确操作。
  • 如果您了解经典机器学习,那么在阅读现代机器学习论文时也会发生同样的事情。只需看一眼方程式和图表,您就会发现有意义的特征以直观的方式呈现在您面前。

阅读论文就像看一幅“图画”,你可以从总体上了解正在发生的事情,然后再放大细节。

但是如果你不了解经典的机器学习,那么祝你阅读现代机器学习论文时好运,因为作者不会为你详细说明这一切!

那么,一旦你掌握了数学基础,如何才能快速掌握经典机器学习呢?

许多机器学习课程的一个问题是,它们不让学生从头开始实现关键模型。

现在,我并不是说你必须实现一个功能齐全的 ML 库,其中包含 scikit-learn、pytorch、tensorflow、keras 等的所有功能……

但简单地编写一个从线性回归到小型多层神经网络的每个基本 ML 模型的精简版本就会对您的理解产生很大的帮助。

这是我在 2020-23 年间开发和教授的一系列定量编码课程的前提。

  • 首先,学生从头开始实现基本的 ML 算法,编写多项式和逻辑回归、k-最近邻、k-均值聚类和通过梯度下降进行参数拟合的精简版本。
  • 然后,他们实现了更先进的 ML 算法,例如决策树和神经网络(仍然是精简版本),并重现了人工智能领域的学术研究论文,最终发明了 Blondie24,一个自学下跳棋的人工智能计算机程序。

我为这些课程写了一本教科书,《算法与机器学习简介》,其中包含我在课程中使用的所有教学材料和练习。可在此处免费获取: justinmath.com/books/#introdu…

  • 教科书是独立的,一旦我学完,我的课程几乎完全是自助式的。学生自己阅读指定章节并完成练习。
  • 在课堂上,我没有进行传统的授课,而是回答问题并帮助学生调试他们的代码。

(我的学生刚入学时并没有太多的编码经验,所以这本书还要求你实现规范的数据结构和算法,包括排序、搜索、图遍历等。)

如果您已经知道,则可以跳过这些内容,但如果您不知道,那么绝对值得使用这些练习来总体提高您的算法编码能力。

即使您已经从事软件工作多年 ,如果您没有编写这种算法密集型代码的经验,那么利用这个机会进行一些练习也是个好主意。

  • 就像即使在竞技举重之外,大多数严肃的运动员仍然会举重来发展支撑肌肉并提高他们的整体运动能力,因为这可以间接地提高他们的运动专项表现。)

重要提示:必须指出的是,“算法和机器学习简介”的预期学习成果是相当通用的定量编码,重点是 ML/AI。

虽然这本书为您提供了坚实的基础,但您仍然希望随后参加适当的 ML 课程,了解整个 ML 算法。

为此,我建议学习 Coursera 上@AndrewYNg 广受好评的机器学习专业课程: coursera.org/specialization…

这是由 3 门课程组成的序列:

  • 课程 1:监督机器学习:回归和分类
  • 课程 2:高级学习算法
  • 课程 3:无监督学习、推荐系统、强化学习
但一定要完成测验和作业!如果你只是看视频,那就不算数了。被动地“跟着学习”与真正的学习完全不同,甚至相差甚远。

===第 3 阶段:深度学习===
现代机器学习很大程度上建立在深度学习的基础上,即具有许多参数的多层神经网络,其中网络架构是根据您试图让模型执行的特定类型的任务而定制的。

如果几年前你问我如何开始深度学习,我真不知道该怎么回答。虽然神经网络在学术文献中已经存在了一段时间,但深度学习直到 2010 年左右才真正开始流行,这意味着直到最近对教育材料的需求才开始增加。

我第一次对深度学习感兴趣是在 2013-14 年左右,当时唯一的学习方式就是阅读各种研究论文、YouTube 视频和博客文章。这非常令人沮丧且效率低下。
2010 年代后期,出现了许多深度学习教科书——虽然它们确实改善了深度学习教育的状况,但却严重缺乏具体的计算示例和练习。
这有点像阅读一场冗长、详尽的讲座,比杂乱无章的论文要好,但与一本充满例题和实践练习的、结构良好的微积分教科书相比,它仍然很难学习。

不过,最近有一本深度学习教科书引起了我的注意,它被认为是一种极好的教育资源:《理解深度学习》 @SimonPrinceAI 。

  • 这本书可以在udlbook.github.io/udlbook/免费获取。
  • 我自己也读过很多章节。这是一本严肃而又友好的教科书——内容非常详细,充满了可视化、快速具体的代数/数值示例和练习、历史注释/参考资料以及对该领域当前工作的参考资料。
总的来说,对于任何具有基础数学能力和经典机器学习知识,并且关注过去十年来成为头条新闻的深度学习,但尚未掌握所有技术细节的人来说,这都是一个了不起的资源。

顺便说一句,喜欢这本书的不只是我。去年,这本书在 HackerNews 上爆红 url=https://news.ycombinator.com/item?id=38424939,[/url]在亚马逊 ( amazon.com/dp/0262048647#…) 上有 97 条评论,评分为 4.8/5 星

  •  如果你读过亚马逊的评论,就会发现这本书显然对很多人的生活产生了巨大的积极影响。

之后,我还建议大家阅读@jeremyphoward的《程序员实用深度学习(第 1 部分)》: course.fast.ai

  • 本课程拥有丰富的实践指导项目,超越了课本练习。
  • 再次强调,一定要完成项目!如果只是看视频,那就不算数了。
需要明确的是:我仍然建议完成《理解深度学习》一书中的练习,以便你在进入fast.ai项目时拥有充足的背景知识。

项目对于汇集大量的知识并巩固你的知识非常有用,但是当你第一次学习某些东西时,在复杂程度较低、支架较高的环境中进行学习会更有效率。

否则,如果没有大量的背景知识,你很容易被一个项目压垮——当你不知所措、茫然无措而无法取得太大进展时,这对你的学习来说是非常低效的。

顺便说一句,这是学习科学中“专业知识逆转效应”的一个例子: en.wikipedia.org/wiki/Expertise…

===第 4 阶段:尖端机器学习===
最后,我们到达了最终目的地:变压器、法学硕士、扩散模型以及现在出现的所有疯狂的东西,这些东西一开始就引起了你的兴趣。

猜猜怎么了?你知道我说过,当我第一次对深度学习感兴趣时,大约在 2013-14 年,唯一的学习方法就是阅读各种研究论文、YouTube 视频和博客文章——这非常令人沮丧和低效。

好吧,当你到达一个领域的前沿时,事情就是这样的——当你进入这个“第四阶段”时,这就是你可以期待的(至少现在是这样,直到这个领域进一步成熟)。

也就是说,即使你处于人类知识的边缘,仍然有办法优化你的方法。

我将引用@ninja_maths话,他最近发布了自己在攻读数学博士学位期间快速完成论文主题的经历: x.com/ninja_maths/st…

  • 我开始博士研究时犯的最大错误是采取了自上而下的方法。我把精力集中在我所选领域前沿的几篇研究论文上,甚至从第一天起就编写代码来解决这些论文中的问题。然而,我很快意识到我缺乏许多基础先决条件,这使得第一年异常艰难。
  • 我应该做的是花 3 到 6 个月的时间,彻底分析关于这个主题的所有关键研究论文和书籍,从最基础的部分开始(从我的知识边界开始),然后逐步向上(自下而上的方法)。
我知道“前沿cutting-edge”听起来像是一条分界线,从阅读既定的教科书到阅读昨天爆红的最新 arXiv 预印本……
但实际上,”前沿cutting-edge“更像是一个“区域”,在这个区域,引导量逐渐减弱。就像在实体刀上:
  • 你通常会看到刀刃在真正的刀刃前几毫米开始变窄。

在前沿技术的起步阶段,可能没有任何教科书,但通常会有各种指导资源,如视频、博客文章、基础研究论文和文献综述,这些资源比前沿技术末期的最新研究论文更容易理解。

举一个具体的例子:

  • 如果您想从事前沿的 LLM 研究,请不要立即尝试以最新发表的论文为基础进行研究。
  • 相反,从文献检索开始,收集重要的论文、视频、博客文章等,这些将带你从该领域边缘的开始到最后。
  • 例如,YouTube 上的@karpathy的《神经网络:从零到英雄》系列就稳居此类资源之列: youtube.com/playlist?list=…
  • @jeremyphoward从深度学习基础到稳定传播:course.fast.ai/Lessons/part2.…

===结束语===
... 哇,这是迄今为止我在 X 上发表的最长的帖子。我还有很多话要说,我很乐意继续添加资源,但是我今天要写一大堆代码,是时候继续度过我一天的剩余时间了。

如果您知道我遗漏的任何优秀资源,请回复!

我在这篇文章中提到的资源只是我突然想到的,而且我还没有进行过广泛的搜索,所以很有可能(甚至很可能)出现了其他我不知道的优秀资源。

我很想听听你们的意见,而且对于任何阅读这篇文章的人来说,它们都极具价值,所以请提出建议。

PS 感谢@tylerbruno05 、 @knivets 、 @iRammohanSharma 、 @shurensha 、 @Jordan__Adamson 、 @sidbing和@DeGatchi最近提出的一些很棒的问题和有趣的对话,启发了我写下这篇文章 –

并感谢@exojason催促我发布更多有关 ML/AI 的文章,即其背后的数学知识以及如果你从头开始,如何快速跟上该领域的步伐。

这让我想起了……对于阅读这篇文章的任何人,请随时回复有关 ML/AI 背后的数学或学习过程以赶上该领域的任何后续问题。我总是很乐意回答问题,这通常是我写作最好的时候。