现在很多人想学习机器学习。但大多数机器学习教师提出的令人畏惧的自下而上的课程足以让很多新手望而却步。

在本教程中,我将翻转课程内容,概述我认为扎实掌握 ML 的最快、最简单的方法。

目录

我在这里建议的课程是一个循环的多步骤过程,如下所示:

这是一个循环学习计划,因为第 6 步实际上是 GOTO 到第 0 步!

作为免责声明,本课程可能对您来说很陌生。但当我在麦吉尔大学向本科生教授机器学习时,我已经对其进行了实际测试。

我尝试了该课程的多次迭代,从理论上优越的自下而上的方法开始。但根据经验,这种务实的自上而下的方法才能带来最佳结果。

我收到的一个常见批评是,人们不从统计学或线性代数等基础知识开始,对机器学习的理解就会很差,他们在建模时不知道自己在做什么。

从理论上讲,是的,这是真的,这就是我开始使用自下而上的方法教授 ML 的原因。实际上,从来没有出现过这样的情况。

实际上最终发生的情况是,因为学生知道如何进行高级建模,所以他们更倾向于自己钻研低级内容,因为他们看到这会给他们的更高级别技能带来直接好处。

如果他们从底层做起,他们为自己设定的环境就不会存在——我相信这就是大多数老师失去学生的地方。

说了这么多,让我们开始实际的学习计划吧! 🚀🚀🚀

第 0 步:沉浸在机器学习领域

学习任何东西的第一步就是花一些时间去理解哪里 事情结束 以及你的兴趣所在。

这将有两个主要好处:

  • 了解视野的大小可以让你知道你没有错过任何东西,因此它会增加你的注意力。
  • 如果您知道正在漫步的风景是什么样子,那么在您的心智模型中绘制一条路径就会更容易。
sheep grazing, with mighty himalayas as backdrop
想象一下你是牧场上的一只羊。重要的是你知道边界在哪里以及哪里的草味道更好:照片由 ARANYA KAR / Unsplash 拍摄

为了让自己正确地沉浸在该领域并磨练您的学习计划,您应该按顺序回答以下三个问题:

  • 你能用机器学习做什么?
  • 你想用机器学习做什么?
  • 那具体的事情你是怎么做的呢?

这些问题将让你能够专注于一些非常具体且易于管理的学习内容,同时也让你看到更大的图景。

让我们更详细地看看这些问题中的每一个。

你能用机器学习做什么?

这个问题非常广泛,并且会逐月变化。本课程的优点在于,在每一步中,您都会花一些时间来了解该领域的可能性。

这将使您能够完善机器学习的思维模型。因此,如果您不能 100% 准确地了解第一次通过时可能发生的情况,也没什么大不了的。大致了解总比没有好。

photo-1519904981063-b0cf448d479e?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fGhpZ2h8ZW58MHx8fHwxNjI0MTIxNzYy&ixlib=rb-1.2
把这个问题想象成爬一座雾山并注意下面的风景:摄影:Lucas Clara / Unsplash

以下是从技术到实际应用的机器学习功能的简要概述。

技术机器学习主题

image-22
使用 SVM 进行分类任务
  • 监督学习: 这种类型的学习涉及向模型提供输入和标记输出以对其进行训练。训练完成后,从技术上讲,您应该能够为其提供输入,并且它将生成正确的输出。
  • 无监督学习: 这种学习涉及输入而没有输出。您要求模型理解数据中的模式。
  • 强化学习: 此 ML 设置涉及代理、环境、代理可以执行的操作以及奖励。这看起来有点像你如何用零食训练狗。
  • 在线学习: 这种类型的学习可以是有监督的,也可以是无监督的。特殊性在于模型可以随着数据流的进入而“在线”更新。
  • 迁移学习: 这种类型的学习是指您使用已经训练好的模型作为不同学习任务的起点。这大大加快了第二个任务的学习速度。
  • 集成学习: 这种机器学习技术涉及将多个经过训练的预测器放在一起(一个接一个地或通过对输出进行投票),并使用这个预测器集合作为最终的预测器。

机器学习还有很多风格,但这些都是一个很好的起点。

常见的机器学习模型

image-23
y = ax + b

那里有很多机器学习模型。但值得庆幸的是,您不需要了解所有这些知识就可以精通机器学习。

其实如果你知道的话 线性回归, 支持向量机, XGBoost 以及某种形式的 深度神经网络 大多数问题你都可以解决。但了解模型的学习方式可以让你的思维更加灵活,并让你以不同的方式思考问题。

机器学习的常见应用

这是一个每月情况都会发生巨大变化的领域。基本上,在任何需要收集数据的领域,您都可以将机器学习融入其中。

image-24

这里的要点是,机器学习应用的广度和深度正在不断扩大。因此,如果您认为自己对可能性只有肤浅的了解,请不要太担心。

  • 计算机视觉: 机器学习(尤其是深度学习)目前正处于一个非常擅长处理图像和识别物体的阶段。您还可以进行生成类型的分析,神经网络能够使用特定的架构技巧(例如 GAN 或神经风格迁移)生成图像。
  • 自然语言处理(NLP): 这包括很多子主题,例如:回答问题、翻译、文档分类或文本生成。
  • 医学诊断: 当您处理医学图像时,使用计算机视觉技术来分析它们是很常见的。但医学诊断还可以包括非基于图像的读数,例如血液样本中某种激素的浓度。
  • 生物信息学: 这是一个非常广泛的领域,与许多其他技术重叠。一般来说,生物信息学使用机器学习技术来处理生物数据及其分析。在这里,您可以将蛋白质折叠视为生物信息学中严重依赖机器学习的一种任务。
  • 异常值检测: 在许多领域中,识别某事物何时属于某个类别的一部分,或者何时与大量数据相差太远以至于它一定是异常值,是一项非常重要的练习。
  • 天气预报: 随着时间的推移,任何真正与大量数据点有关的事物都将是应用机器学习的良好候选者。天气预报是一种随时间推移有大量可用数据的问题。

这个清单可能会持续一段时间。这里的重点是对可能发生的事情做好一个规划,以便您在下一阶段的学习之旅中感到踏实。

你想用机器学习做什么?

这个问题是最重要的一个。您将无法有意义地完成机器学习(或任何其他领域)中的所有事情。你必须非常有选择性地选择你认为哪些事情可以很好地利用你的时间,哪些事情不能很好地利用你的时间。

做出这种选择的一种方法是将您的兴趣按降序排列。

Work day
拿一支好旧的笔和纸,对这些学习主题进行排名👺:摄影:Adolfo Félix / Unsplash

然后只需选择您最感兴趣的内容并将其固定在您可以看到的地方即可。在您的排名发生变化之前,这就是您将要学习的内容,而不是其他内容。

请记住,您绝对可以改变您的兴趣。如果您对某个特定主题非常感兴趣,但在了解更多之后,它不再那么有趣,那么可以放弃该主题并开始另一个主题。这就是您执行第一个计划步骤的全部原因。

在这里,如果你感兴趣的科目有很多,我强烈建议你一个周期仍然只承诺一门。所有主题都以某种方式相互关联。深入研究一个主题将使您看到这些联系。肤浅地从一个主题跳到另一个主题不会。

如果我现在要在第 100 次学习此学习课程时学习一些新东西,我会深入研究 图神经网络 以及它们在中的应用 供应链管理

那具体的事情你是怎么做的呢?

既然您知道自己感兴趣的内容以及它在总体背景下的位置,请花一些时间了解人们是如何做的。

photo-1606857521015-7f9fcf423740?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDV8fG9mZmljZXxlbnwwfHx8fDE2MjQxMjQ1ODc&ixlib=rb-1.2
他们在使用什么,他们的设置是什么?以色列·安德拉德 / Unsplash 摄

花时间了解您将花费数周(或更长时间)学习的内容非常重要。能够获得背景知识来为您将要学习的内容奠定基础,并了解您不需要了解的内容,将为您节省大量时间和精力。

它还将帮助您了解您真正不需要将精力集中在哪些事情上。例如,如果您发现大多数人在日常 ML 工作中不使用 HTML、CSS 和 JavaScript,则不要关注这些技术。

就人们在机器学习中使用的内容而言,根据应用程序的不同,有多种编程语言和工具。您拥有 C++、Java、Lua、Swift、JavaScript、Python、R、Julia、MATLAB、Rust 等语言的工具,而且这个列表还在不断增加。

但从业者的密度相当集中在 Python 及其包生态系统周围。 Python 是一种相对容易掌握的编程语言,具有蓬勃发展的生态系统。这意味着想要构建机器学习工具的人更有可能使用 Python 界面来开发这些工具。

不过,实际的工具通常不是用纯 Python 开发的,因为这种语言非常慢。但由于它们有与 Python 的直接接口,用户不会知道它实际上是一个封装在 Python 中的 C++ 库。

如果你没有明白最后一部分也没关系。请记住,Python + Python 中的库是学习的一个非常安全的选择。

用于机器学习的工具

机器学习学习工具的常见用途如下:

您还可以使用更多工具,比如更多!请注意它们,但不要过分强调您还没有使用最新的库。上面提到的技术对于大多数项目来说已经足够了。

但是,您可能需要将一些库添加到您的堆栈中,因为它们专门针对您的研究领域。

就我而言,为了学习 图神经网络 以及它们在中的应用 供应链管理,看起来所有这些包都没有问题。尽管如此,Pytorch 中还有更专业的软件包,例如 Pytorch 几何库,这将加快我图神经网络的开发速度。

所以我的堆栈看起来像这样:

Python + Pandas + Pytorch + Pytorch 几何 + Git + Colab

我知道这个堆栈非常适合我的用例,因为我研究了人们如何在特定的子领域进行开发,这就是他们正在使用的。

第 1 步:研究一个看起来像你的结局的项目

既然您确切地知道自己想要做什么,并且大致了解了如何做该特定的事情,那么是时候变得更具体了。

深入了解如何做某事的最佳方法是观看实际的专家工作。您可以将此视为异步学徒期。

Broadcast engineers work in studio
您和您的导师正在弄清楚所有闪烁灯的用途:摄影:ThisisEngineering RAEng / Unsplash

能够看到你想要采取行动的最终结果将为你提供比任何理论更多的背景来为你的学习奠定基础。

因此,要做到这一点,最好的方法是跳上 GitHub 或 Kaggle 并查看公共项目。回顾其中的一些,直到找到一个与您产生共鸣的。

这可以是一个完整的库、一个简单的分析或一个生产就绪的人工智能。无论是什么,找到其中一些,然后选择您最感兴趣的一个项目。

一旦您有了该项目,请花一些时间来浏览文档、代码库的结构和代码。你可能会迷路。特别是如果您不太了解如何编码的话。但这是学习新东西时的积极感觉!

记下您看到的重复模式、您理解的有趣内容或您不太理解的主题。将此项目添加为书签,并在您完成学习路径后返回该项目。

GitHub 上的这个列表是一个不错的起点。然而,只需在 Kaggle 或 GitHub 上搜索与您对机器学习感兴趣的关键字即可。

对于我的具体学习计划,Thomas Kipf 的这个项目是一个很好的简单项目。它非常简单,我可以浏览它并了解每个部分发生的情况,同时学习结构的基础知识。

第 2 步:学习编程语言

现在您已经非常清楚需要去哪里以及需要学习什么,是时候理解代码了。

代码很可能是基于 Python 的,但根据您想学习的内容以及您添加书签的项目,您可能会使用 Julia、C++、Java 或其他语言。

无论是什么语言,您都应该花一些时间学习基础知识,以便了解如何拼凑脚本。

freeCodeCamp 的科学计算与 Python 课程或 Kaggle 的非常简短的 Python 课程是学习足够的 Python 以便发挥作用的一个非常好的课程。

Capture
强烈推荐 freeCodeCamp 的这款!

您不需要 100% 了解该语言的工作原理。每次完成本课程时,请花一些时间完善您对所选编程语言的知识,以便迭代学习。

就我的学习计划而言,freeCodeCamp 课程就可以解决问题。

第三步:从上到下学习库

我在机器学习课程中经常看到的一件事是,他们在学习了机器学习的基础知识后开始从头开始实现一些算法。

虽然我相信这本身就是一个很棒的项目,但我认为这不应该成为学习机器学习之路早期的主要关注点。

主要原因是,除了制作开发人员正在使用的软件包的人之外,几乎没有人从头开始实现算法。即使如此,他们仍然经常依赖线性代数人员制作的其他包来完成大部分低级工作。

所有这些都表明,虽然对事物在幕后如何工作有深入的了解是一个净积极的结果,但我认为这不应该是一个早期目标。

此时我强烈建议您学习您选择的编程语言的最高级别的库,这将使您获得最终结果。了解如何充分利用超高级软件包来制作有用的东西。

此时你肯定不知道为什么某些东西有效或无效,但这并不重要。

重要的是能够使用专家日常实际使用的工具来操作。一旦您了解了高级库在做什么,您就应该转向稍微低级的库。

不过,请确保您不要太深入地学习该库(如果您在阅读 Fortran 时处于 LAPACK 级别,那么您已经走得太远了!)。

对于我的项目,我需要学习的主要库是 Pytorch 或其更高级别的包装器,因此 fast.ai 的实用课程就可以解决问题。

第四步:在最多一个月内完成一个你热衷的项目

现在是学习最多的实际部分。此时,您应该具备最基本的知识来将一个实用性最小的项目组合在一起。

请注意——如果您对正在计划的项目充满信心,那么您在步骤 0 到 3 中的进展速度还不够快。

想想你感兴趣的领域中你真正想要创造和发展的东西。不过,不要对这个项目太过疯狂,因为最多需要 1 周到 1 个月才能完成。

将该日期添加到您的日历中并发出通知。 拥有一个有时限的项目既能激励你,又能给你足够的压力,让你能够完成它。

这里的想法是在一个小型项目上进行足够的努力,以了解您的主要知识差距在哪里,并体验真正的机器学习开发人员的体验。

通过自由形式,无需借助课程或书籍,您将能够完成 ML 项目中较困难的实际部分:

  • 规划、确定范围并跟踪 ML 项目的进度
  • 在线阅读有关库的文档
  • 阅读 StackOverflow、GitHub 线程、随机工程师的博客文章以及有关该错误的神秘帮助论坛 👺。
  • 以次优方式构建项目并随着时间的推移进行改进。
  • 调试过度拟合、欠拟合和泛化问题。

要选择一个您感兴趣的项目,我建议做以下三个小练习:

  • 深入思考你目前感兴趣的事情
  • 查看项目创意列表
  • 查看开放数据集

通过混合执行这三件事,您将能够对可能性形成更多背景。您还可以混合搭配您的兴趣,打造真正属于您自己的东西。

Github 上的这个列表应该是一个很好的地方,可以获取一些关于要做的迷你项目的灵感。然后,您可以将其与 Google 数据集搜索引擎结合起来,以便找到一些与您的项目匹配的数据。

⚠️不要低估数据的重要性。 ⚠️
即使你有很好的想法,如果没有可用的数据,也会严重阻碍你的进步。

出于我的兴趣,我发现了这个关于矿业公司全球供应链的简洁数据集,其中包含足够多的数据来利用它。我的项目将把数据建模为图表,并使用图神经网络来推断挖掘机的销售价格,这是该数据集的中心主题。

第 5 步:找出您的知识差距并了解它

此时,您已经花费了一些时间来设计您的项目,并且您实际上对它所取得的进展印象深刻。不过,这可能与您的想法相去甚远,并且您在前进的道路上遇到了无数的问题。

现在,您意识到自己实际上知道的东西是多么少,并且您确实需要修补某些知识。

Living the best times of their lives.
你为自己新发现的无知感到高兴!恭喜👏:摄影:Daniel Joshua / Unsplash

这很棒!列出您在此过程中看到的所有差距,并按照您估计的优先级顺序对它们进行排名。这对你来说可能很难,因为此时一切看起来都非常重要。但是,有意识地决定下一步要学什么几乎与学习本身一样有价值。

现在奇怪的部分来了:从列表中删除所有内容,只学习最重要的知识。

当我说消除时,我是认真的。删除除第一个以外的所有内容。当您在这个循环中进行另一遍时,您对接下来要学习的内容的估计大部分都是错误的,并且您将错过其他您不知道的更关键的知识。

现在您只剩下一个项目需要学习,请给自己 1 天到 1 周的时间来了解这个特定主题。这可能看起来很短,但您真正想要的是足够深入地了解知识,以便为您的下一轮学习发挥作用。

Designer sketching Wireframes
在短时间内非常努力地学习一点点知识:摄影:Green Chameleon / Unsplash

在实践中,可能发生的情况是,您对这个主题足够深入,注意到它如何与其他重要主题(如概率、统计,甚至是被上帝抛弃的线性代数)联系起来。

仔细查看这些链接,如果您愿意,请关注它们,并强化您的机器学习思维模型,使其更加准确。

步骤 6:重复步骤 0 至 5

你第一次通过这个管道最多可能会是马马虎虎。但你会在很短的时间内学到的东西比自下而上的方法所获得的要多得多。

通过管道的每次传递,您将从该方法中获得的价值会快速增加。每一轮都会变得更容易,你会对场地有更清晰的了解。

这种方法基于我在创业时学到并取得巨大成功的精益方法。对您正在优化的主题进行多次迭代是实现目标的最快方法。

image-168
三步精益循环,图片取自此处。

一年之内,您可能能够通过此管道堆叠 12 次,这意味着 12 个机器学习项目和对该领域的实际理解。

这种方法将使你们都非常受聘,并为您提供自我提高所需的工具,一切都靠您自己。

另外,作为已经熟悉机器学习的人的旁注, 这是梯度下降。通过在你的无知成本平面上迈出一小步,你实际上是在“学习机器学习”问题上进行梯度下降。

您甚至正在做梯度下降的变体,它在成本平面中向前看,并且能够放慢速度(在项目或学习概念上花费更多时间)或加速(当主题与您的理解不太相关时跳过)。简而言之,这就是 Nesterov 加速梯度 😄(哈哈,对此感到抱歉)!

maxresdefault
这就是你对机器学习无知的成本平面正在下降。

总结与结论

总之,您应该:

  1. 弄清楚 ML 领域是什么样子,并在脑海中绘制出它的地图。
  2. 找到一个你想做的很酷的项目并研究它。
  3. 学习所需的编程语言。
  4. 学习足够多的库才能做一些有用的事情。
  5. 做一个项目 [1 周,1 个月]。
  6. 了解一件您认为知识上存在巨大差距的事情。
  7. 并重申!

我希望这有用,如果您对此过程有强烈的意见,请随时通过 LinkedIn 与我联系。另外,如果您想了解有关特定机器学习主题的更多信息,请查看我的 Youtube 频道。

祝你玩得开心👋

有用的机器学习资源

在本节中,我将分享一系列我为想要开始学习的人推荐的学习资源。这不是一个详尽的列表,但对于想要获得良好的机器学习第一个心理模型的人们来说,这将是一个很好的起点。

机器学习书籍

统计学习的要素 Astie 等人。

这是机器学习社区的经典之作,强烈建议您反复阅读这本书。

image-26
很棒的入门书!

人工智能,一种现代方法(第三版)

这将使您对更广泛的人工智能领域有一个很好的概述,其中不一定包括机器学习。

image-27
这本书将整个 AI/ML/DL 领域很好地联系在一起

深度学习书籍

深度学习领域的经典之作,如果你有一些线性代数的背景(开头有入门书),这本书令人惊讶地是一本非常平易近人的书。

image-29
封面非常整洁,因为它是由深度神经网络生成的

Python 数据科学手册:处理数据的基本工具

一本非常棒的书,能够提升你在 Pandas 和 Numpy 方面的数据科学技能。这将使您的代码更加紧凑、高效和可读。

image-30
将其放在靠近办公桌的地方并进行练习

使用 Scikit-Learn、Keras 和 TensorFlow 进行机器学习实践:构建智能系统的概念、工具和技术

如果您需要阅读一本书来启动和运行,那就是这本书。非常彻底且亲自动手。

image-31
无论是高清蜥蜴还是灰度蜥蜴,都非常扎实!

使用 Pytorch 进行深度学习

我喜欢这本书,因为你可以从 Pytorch 的创建者那里直接了解他们的哲学(其中有一些我很高兴看到的简洁的神经科学示例)。

71sXWAx3ktL
这个的视觉效果非常好,尤其是张量部分。

机器学习博客

掌握机器学习

如果您最终确实在某个项目上搜索了很多内容(就像任何人一样),您将多次看到这篇博文:机器学习掌握。

它写得很好,而且这个人能够从网站中获得 ML 相关主题的 SEO 效果非常惊人。

分析维迪亚

您最有可能在 Google 搜索中找到的第二个博客是analyticsvidhya。它可能看起来比前一个更加垃圾,但其中仍然有很多精彩的内容。

蒸馏

非常整齐视觉丰富 杂志 机器学习主题:distill.pub

虽然他们似乎因为整个团队都精疲力竭而中断了一年,但仍然有高质量的机器学习内容。

机器学习社区

r/机器学习

很棒的社区,可以获取机器学习的最新进展和/或了解 ML 社区中当前事件的热点。

它分享高质量的内容,潜伏在那里一段时间会让你了解该领域其他人的想法。

它还会生成很好的学习宝石,例如:

Capture-1
这句话非常直白,但仍然具有现实意义。

r/Learn机器学习

这是一个优秀的社区,供新人提出问题、发布您的项目或从其他人的工作中获得一些灵感。

机器学习活动

MAIN(蒙特利尔人工智能和神经科学)会议

我在这里有偏见,因为这是一个结合了我的两个兴趣的会议:神经科学和机器学习:2020 链接和 Youtube 视频

此外,由于它在蒙特利尔举办,而且我住在附近,我通常可以跳到那里查看计算神经科学的最新进展。

NeurIPS(神经信息处理系统)会议

这是关于神经网络的神秘机器学习会议。

近年来,它变得人满为患,以至于它的实用性受到质疑。不过,如果您无法参加,检查一下被录取的研究人员正在做什么是个好主意。

还有很多,时不时去参加会议以了解真正前沿的研究是个好主意。这可能有点让人不知所措,但这是一次很棒的学习经历。

在线机器学习课程

快速人工智能

如果我要推荐一门在线课程,那就是 FastAI 的这门课程。

它实际上体现了我在这篇博文中所写的这种务实、直接采取行动的方法+老师非常有趣。

吴恩达 ML(当然)

如果我有第二门课程可以推荐,我会选择 Andrew Ng 的机器学习课程。

freeCodeCamp 的机器学习和数据分析 YouTube 课程

freeCodeCamp 在其 YouTube 频道上提供了大量精彩的机器学习和数据分析课程,例如:

还有更多内容来自哪里 – 只需前往 freeCodeCamp 的 YouTube 频道并搜索您想要学习的内容即可。