本文由前端翻译小组翻译,首发于:https://github.com/bigo-frontend/blog/ 欢迎关注、转载。

原文链接:How to Learn Machine Learning – Tips and Resources to Learn ML the Practical Way

如何学习机器学习 - 实践中学习 ML 的建议和资源

如今很多人想要学习机器学习。但是大多数ML老师提供的自下而上的课程令人生畏,足以让很多新手产生挫败感。

在这个教程里面我把课程倒过来了,我会概述我认为牢牢掌握 ML 最快最容易的方式。

内容目录

我提供的课程是一个多步循环的步骤过程,如下:

  • 第 0 步:沉浸在机器学习领域
  • 第 1 步:研究一个看起来像游戏终局的项目
  • 第 2 步:学习编程语言
  • 第 3 步:自上而下学习机器学习库
  • 第 4 步:用最多一个月的时间做一个你感兴趣的项目
  • 第 5 步:找到你知识的差距,然后学习
  • 第 6 步:重复步骤 0 到步骤 5

这是一个循环的学习计划,因为第 6 步实际上回到了第 0 步。

作为免责声明,这个课程对你来说可能有点奇怪。但是当我在麦吉尔大学给学生授课的时候已经做过了实战测试。

最开始采用理论上优越的自下而上的方法,后面我对这个课程尝试了很多迭代。通过经验,工程化的自顶而下的方式效果最好。

我受到了一致的批评,如果没有从基础开始学习,比如统计学或者线性代数,大家就会对机器学习的理解比较差,当他们建模的时候不知道在做什么。

理论上这种说法是对的,这也是为什么最开始我采用了自下而上的方法。实践中,情况并非如此。

实际上最终发生的情况是,因为学生知道如何做高级建模,当他们看到底层知识能够提升技能水平,这样一个直接的好处让他们就更倾向于自己去钻研。

如果学生从底层开始学习,他们就不能为自己设置学习情景 - 我认为这是大多数老师失去学生的原因。

说了这么多,我们进入实际学习计划吧!

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

学习任何东西的第一部分是全局了解它和找到你的兴趣点。

这会有两个主要的好处:


想象你是牧场里面的一只羊,重要的是,要知道牧场的边界,知道哪里的草味道更好。

为了更好地沉浸在机器学习领域,磨练你的学习计划,你应该依次回答以下问题:

这些问题会引导你到更具体、可管理的学习模式,也让你看到更大的画面。

让我们更细节地看看这些问题。

你能用机器学习做什么

这个问题很大, 每个月都会改变。这个课程很棒的地方在于,你每通过一个步骤都会花时间思考这个领域可以做什么。

这会提炼你机器学习的心智模型。所以如果你在通过第一个步骤的时候,没有100%了解对机器学习能够做什么,这没什么大不了的。大致了解比不了解要好。


当你在爬一座有云雾的山,看下面风景的时候,思考一下这个问题。

对于你能用机器学习做什么,我们从技术到实际应用层面,来做一个简单的概述。

机器学习技术话题

使用 SVM 的分类任务

监督学习:这种类型的学习涉及向模型提供输入和标记输出,以对其进行训练。一旦训练完成,从技术角度来讲,你能够做到给定一个输入,模型就会产生正确的输出。

无监督学习:这种学习涉及没有输出的输入。你要求模型理解数据中的模式。

强化学习:此 ML 设置涉及代理、环境、代理可以执行的操作以及奖励。这有点像你如何用零食训练狗。

线上学习:这种类型的学习既可以是有监督的,也可以是无监督的。特殊之处在于模型可以在数据流进入时“在线”更新。

迁移学习:这种类型的学习是指你使用已经训练好的模型作为不同学习任务的起点。这大大加快了第二个任务的学习速度。

集成学习:这种 ML 技术涉及将多个经过训练的预测器放在一起(一个接一个或通过对输出进行投票)并使用这个预测器集合作为最终预测器。

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

常见的机器学习模型

最复杂的模型之一叫做深度神经网络

  • 线性回归y = ax + b 是一个很好用的公式,能够很好滴解决许多问题。这应该是大多数分析的起点。

  • 逻辑回归:这是一种对一个分类或多个分类的概率进行建模的模型。尽管它的名称中有回归,但它是一个分类模型。

  • 决策树:决策树模型创建一棵“决策”或公式树,遵循这些树会产生所需的输出。这些类型的模型很重要,因为它们在训练后易于理解和检查。

  • 支持向量机(SVM):将此模型视为构建一个平面,该平面将两个类之间的最大宽度分开。它比那更复杂一点,但是想象一条具有厚度的平面,你就已经完成了一半。

  • 朴素贝叶斯:这些类型的分类器使用贝叶斯定理,该定理假设所有特征彼此独立。然而,这种情况很少发生,这就是为什么它被称为朴素。即使该假设不成立,它在实践中的效果也出奇地好。

  • K最近邻:这种类型的分类器不需要训练,它只是记住数据集中的所有元素。然后,它可以根据输入与数据集中其他点的距离为你提供输出。

  • k-均值算法:这个无监督模型将在给定多个聚类的情况下找出哪些点属于哪个聚类。它将通过反复修改每个聚类中心来做到这一点,直到它收敛至稳定为止。

  • 随机森林:这是一种集成技术,它使用了许多非常简单的决策树分类器。模型的输出是大多数决策树的类别输出。

  • 降维算法: 降维算法有很多种,主成分分析就是其中之一。所有这些算法的要点是,从具有大量维度(特征)的数据集到具有较少维度(特征)的表示中它们都可以创建映射。当它映射到 2 维或 3 维时,它允许我们在 2D 或 3D 中可视化高维数据集。

  • XGBoost:该模型是正则化梯度提升模型。简而言之,它具有串行而不是并行设置的弱学习器(如随机森林)。这是一个非常好的模型,通常是机器学习比赛中的佼佼者。

  • 深度神经网络:这类型的模型有它们自己的整个领域。基本上,它们可以是串联的弱预测器,也可以是并联的弱预测器。这些模型能够构建数据的分层表示,从而产生很好的结果。由于他们的高容量,他们对训练非常挑剔(至少可以这么说)。这些模型有很多架构,例如 CNN 和 Transformer。

有很多机器学习模型。但值得庆幸的是,你无需了解所有内容即可精通机器学习。

实际上,如果你了解线性回归、SVM、XGBoost 和某种形式的深度神经网络,就可以解决大多数问题。但是了解模型的学习方式会让你思维跳跃更灵活,并让你以不同的方式思考问题。

机器学习的常见应用

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

被称为图像分割的 ML 应用(在自动驾驶方面有用)

重点是 ML 应用的广度和深度在不断扩大。因此,如果你认为自己对可能发生的事情只有肤浅的了解,请不要太担心。

  • 计算机视觉(CV):目前机器学习(尤其是深度学习)非常擅长处理图像和识别物体。你还可以进行生成式分析,神经网络能够使用特定的架构技巧(例如,GAN 或神经风格迁移)生成图像。

  • 自然语言处理(NLP):这包括很多子主题,例如:回答问题、翻译、文档分类或文本生成。

  • 医学诊断:当你处理医学图像时,使用计算机视觉技术来分析它们是很常见的。但是医学诊断也可以包括非基于图像的读数,例如血液样本中某种激素的浓度。

  • 生物信息学:这是一个非常广泛的领域,与许多其他技术重叠。一般来说,生物信息学使用机器学习技术来处理生物数据及其分析。在这里,您可以将蛋白质折叠视为生物信息学中严重依赖机器学习的一种任务。

  • 异常检测:识别某物何时属于某个类别,或者何时与大量数据相距甚远,那它必定是异常值,这是许多领域中的一项非常重要的实践。

  • 天气预测:随着时间的推移,真正与大量数据点有关的任何事情都将是应用机器学习的良好候选者。天气预报这个课题是一种在整个时间都有大量可用数据。

这份列表可能会持续一段时间。重点是为可能发生的事情绘制一张好的地图,以便你在学习旅程的下一阶段感到踏实。

你想用机器学习做什么

这个问题是最重要的。你无法在机器学习领域(或任何其他领域)中保证所有事情都具有意义。你认为哪些可以很好地利用你的时间,哪些不能,这些你必须慎重地做出选择。

做选择的方式之一是将你的兴趣降序排列。

拿好一点的旧笔旧纸将这些学习话题排序。

然后只选择你最感兴趣的话题,把它钉在某个你能看见的地方。这是你后面要学的东西,没有别的,直到你的话题排序发生改变。

记着你当然可以改变你的兴趣。如果你对某个具体的话题非常感兴趣,但是随着学习的深入,发现它不再那么有意思了,你是可以抛弃这个话题然后选择另外一个。这是为什么第一步你要做兴趣排序。

如果你对很多话题都感兴趣,我强烈建议你一个周期只学习一个。所有的话题在某种方式上都是有联系的。深入某一个话题能让你看到这些联系。而一个话题接着一个话题你只是肤浅的学习,不会有这样的效果。

我在第100次通过本学习课程之后,如果现在要是学习一些新的东西,我会深入研究图神经网络及其在供应链管理中的应用。

具体要怎么做

现在你知道了你的兴趣所在以及它在一般上下文中的位置,花点时间来了解下人们是怎么做的。

他们用的是什么,他们的环境是怎么样的?

你会花几个星期的时间(或者更久)理解要学习的东西,这个是很重要的。能够通过获得上下文来了解什么是你要学习的,什么是你不需要知道的,这样的基础会帮你节约大量的时间和精力。

这也会帮助你理解什么东西是真的不需要你花精力的。例如,如果你发现大多数人在他们日常的 ML 工作中没有使用 HTML,CSS,和 JavaScript,那你就不用关注这些技术。

关于在 ML 中人们会用到什么,根据应用的不同使用的编程语言和工具是相当广泛的。C++, Java, Lua, Swift, JavaScript, Python, R, Julia, MATLAB, Rust…都有相应的工具,不胜枚举。

但是大多数从业者基本都集中在Python及其包生态系统上。Python是一门相对容易掌握的编程语言,其拥有蓬勃发展的生态系统。这意味着如果人们想要构建机器学习工具,更可能会使用 Python 接口来开发。

然而实际的工具并不总是用纯 Python 来开发的,因为这门语言相当慢。但是因为它们有直接的 Python 接口,所以用户不知道它实际上是一个用 Python 包装的 C++ 库。

如果上面最后一个部分你没理解也没关系。只要记住学习 Python + Python 库是一个非常安全的选择。

机器学习用到的工具

机器学习工具通常的选择如下:

  • Python 用于高级编程
  • Pandas 用于数据集操作
  • Numpy 用于大量的 CPU 计算
  • Scikit-learn 用于非深度学习的机器学习模型
  • TensorflowPytorch 用于深度学习的机器学习模型
  • 更高级的深度学习封装库,如 Kerasfast.ai
  • 项目工作中基本的 Git
  • Jupyter NotebookGoogle Colab 用于开发体验

还有更多工具可以使用,巨多!了解他们,但如果没跟上最新的库也别有太大压力。上面提到的技术对于大多数项目来说已经够好了。

但有一些库你可能需要添加到你的技术栈,因为在你研究的领域这些更专业。

就我而言,研究图神经网络及其在供应链管理中的应用,似乎上面提到的所有这些库可以用。Pytorch 仍然有更专业的库,像 Pytorch geometric,能够加快图神经网络的开发速度。

我用到的技术栈如下:

Python + Pandas + Pytorch + Pytorch geometric + Git + Colab

因为我研究了人们在具体的子领域如何开发,这些工具正是他们在用的,所以我知道这套技术栈对我的使用场景来说还不错。

第 1 步:研究一个看起来像游戏终局的项目

现在你确切地知道你想做什么,对具体的东西怎么做有一个大概的想法,是时候更具体一些了。

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

你和你的导师正在搞清楚所有闪光灯的作用。

与任何理论相比,通过行动能够看到最终的结果,这会给你提供更多的上下文,从而为你奠定学习的基础。

为了达到这样一个效果,最好的方式是去 GitHub 或者 Kaggle 查看开源项目。查看一些项目,直到找到符合你的项目。

这个项目可能是一个完成的库,一个简单的分析或一个可用于生产环境的 AI。不管是什么,找出一些然后选择你最感兴趣的那个。

一旦有了项目,花时间浏览一下文档,代码结构和代码本身。

你可能会迷茫。特别是当你不知道如何写代码的时候感到更迷惑。但在学习新东西时这是积极的感觉!

对于你看到的重复使用的模式,你能理解的有意思的点,或者你不太明白的话题,要记笔记。

收藏该项目,当你在学习道路上不断向前走的时候要回过头来看看。

这个 GitHub 列表是一个开始的好地方。然而,在 Kaggle
或 GitHub 上搜索你感兴趣的机器学习相关的关键字也可以。

我自己具体的学习计划,一个好的简单项目来自于 Thomas Kipf。这个项目足够简单,我能够浏览并理解每个部分发生了什么,同时学习结构的基础。

第 2 步:学习编程语言

如今你非常清楚你的方向在哪里,知道你需要学习什么,是时候理解代码了。

代码很可能是基于 Python,不过也取决于你想要学习什么,你收藏的项目是什么,所以也有可能接触到 Julia, C++, Java 或者其他编程语言。

不管编程语言是哪一种,你应该花时间学习基础,这样你才能理解如何拼凑脚本。

彻底学好 Python 这门函数式编程语言,不错的课程有 freeCodeCamp 的 Python 科学计算
课程 和 Kaggle 非常间断的 Python 课程。

强烈建议 freeCodeCamp 的这门课程

你不需要100%理解语言是如何工作的。每学完一个课程,花点时间把你选择的这门编程语言提炼一下,这样迭代着去学习。

对于我的学习计划而言,freeCodeCamp 课程达到了不错的效果。

第 3 步:自上而下学习机器学习库

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

尽管我认为自己实现会是一个很棒的工程,但是我认为在机器学习道路的前期不应该成为主要的关注点。

主要是因为,除了那些制作开发人员用的软件包的人,几乎没有人从头开始实现算法。即便是这样,他们经常依赖于其他的软件包,而这些软件包是由学习线性代数的人做了很多底层工作开发而来。

所有这些想要表达的是,虽然深刻理解事物的工作原理是一件积极的事情,但我认为这不应该是一个早期的目标。

这个时候我强烈建议,在你所选择的编程语言中学习能让你获得最终结果的最高层的库。

学习如何使用超级高级的库足以做一些有用的东西。

此时你肯定会缺乏理解,为什么有些事情可以工作,有些不行,但是没关系。

重要的是,对于专家每天实际都在使用的工具,你能够利用它们让你的东西运行起来。一旦你对高级库所做的事情有了一定的了解之后,你应该继续了解稍微底层一点的技术。

但是确保你不要深入到学习库的原理(如果阅读关于 Fortran 语言的时候你在LAPACK水平,那你已经走的太远了!!)

对于我的项目,我需要学习的最主要的库是 Pytorch 或者 对其更高级的封装,所以由 fast.ai 提供的实践课程会有帮助。

第 4 步:用最多一个月的时间做一个你感兴趣的项目

现在到了实际学习最多的部分。此时你应该具备最基本的知识,拼凑出功能最小的项目。

只是注意 - 如果你感觉完全有信心进入正在计划的项目,说明从第 0 步到第 3 步你通过的还不够快。

在你感兴趣的领域想出一些东西,你真的想要创造并开发出来的东西。在项目上不要太疯狂,因为这要花费 1 周到最多 1 个月的时间来完成。

在你的日历上把日期添加进去并设置通知。项目的时间限制既能激励人,又能给你足够的压力,让你能够完成它。

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

通过在没有课程或书籍的情况下采用自由形式,你将能够完成 ML 项目中困难的实际部分:

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

通过将这三件事混合起来,对于可能的事情你能够形成更多的上下文。你还会混合搭配你的兴趣,以制作真正属于你自己的东西。

该Github清单应该是一个很好的资源,在这里能获得关于小型项目的一些启示。而后你再结合谷歌数据集搜索引擎,找到跟你项目吻合的数据。

⚠️ 不要低估数据的重要性。⚠️

即使你有很好的想法,如果没有数据,你的进度将会收到很大的阻碍。

对于我的兴趣,我找到了一份关于矿业公司全球供应链的简洁数据集,其中数据足够来制作一些东西。我的项目是将数据建模为图形,并使用图形神经网络来推断挖掘机的销售价格,这是该数据集的中心主题。

第 5 步:找到你知识的差距,然后学习

此时,你已经花了一些时间来制作你的项目,实际上你已经对它取得的进展印象深刻。但是,这可能与您的想法相去甚远,而且你在此过程中遇到了无数问题。

现在,你意识到实际上自己知道的很少,并且你确实需要修补自己的某些知识。

你为你新发现的无知而欢欣鼓舞!恭喜

【译】如何学习机器学习相关推荐

  1. 学习机器学习,究竟是理论重要,还是公式推导重要?

    随着近几年机器学习的火爆,其从业门槛也越来越高,以至于出现面试者需要现场手推对数几率回归和手写反向传播代码的情况.不论是对机器学习本身的研究,还是岗位的需求,都需要我们对算法有很深的了解,对公式本质有 ...

  2. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)

    Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...

  3. 吴恩达登录知乎,亲自回答如何系统学习机器学习

    如何系统地学习机器学习?知乎里有很多回答,近日,吴恩达老师亲自在知乎回答了这个问题: 作者:吴恩达 链接:https://www.zhihu.com/question/266291909/answer ...

  4. 如何系统学习机器学习?

    机器学习是人工智能下一个比较广泛的分支,涉及了很多交叉的领域如NLP自然语言处理.计算机视觉Computer Vision等等.简单来说,机器学习ML就是通过训练计算机来模拟人类的学习行为,从而进行预 ...

  5. 吴恩达入驻知乎首答:如何系统学习机器学习?

    最近在知乎圆桌里看到吴恩达的回答,[如何系统学习机器学习?] 颇为惊喜,仿佛看到了知乎刚成立时的样子,请各个行业大佬来分享专业知识. 该回答目前已经有三千多赞,评论区也相当火爆,一片膜拜之声. 吴恩达 ...

  6. 学习机器学习的项目_辅助项目在机器学习中的重要性

    学习机器学习的项目 提示与建议 (Tips and Advice) There are a few questions that are asked frequently by machine lea ...

  7. 信号处理深度学习机器学习_机器学习和信号处理如何融合?

    信号处理深度学习机器学习 As a design engineer, I am increasingly exposed to more complex engineering challenges ...

  8. 信号处理深度学习机器学习_机器学习与信号处理

    信号处理深度学习机器学习 机器学习性能与两种关键信号处理算法(快速傅里叶变换和最小均方预测)的有趣对比. (A fun comparison of machine learning performan ...

  9. 机器学习与分布式机器学习_我将如何再次开始学习机器学习(3年以上)

    机器学习与分布式机器学习 重点 (Top highlight) I'm underground, back where it all started. Sitting at the hidden ca ...

最新文章

  1. SRM 563 Div1 500 SpellCards
  2. 工业缺陷检测比赛Top3方案
  3. 麦肯锡:潜力巨大,障碍多多,人工智能医疗是蓝海还是虚火?
  4. ORACLE EXPDP命令使用详细【转】
  5. ssh: Could not resolve hostname gitcafe.com: nodename nor servname provided, or not known
  6. Swift相关api功能介绍与使用
  7. IOS Emoji表情
  8. 创建对称矩阵(numpy)
  9. [SQL入门级] 上篇被移出园子首页,那这篇咱就'薄利多销'
  10. 【转载】进程与线程的区别
  11. 计算机的com端口万能驱动,USB转串口万能驱动
  12. 极化码的巴氏参数构造算法
  13. 《嵌入式 – GD32开发实战指南》第9章 呼吸灯
  14. 如何创建水晶报表模板
  15. 空间金字塔模型与池化
  16. 秒杀活动,怎么设计全套技术方案
  17. 试设计一个窗口,内含一个按钮。开始运行时,按钮显示“Click Me”字样,当按钮按下时,按钮显示为“Click Me Again”字样,再按一次,则按钮显示“Click Me”字样,依此循环。
  18. Designing Data-Intensive Application《数据密集型应用系统设计》笔记
  19. 沉船会有什么_泰坦尼克号沉船之谜
  20. 安卓学习专栏——安卓报错android.support.v4.widget.SwipeRefreshLayout飘红

热门文章

  1. flex布局实现骰子六面的示例
  2. Incapsula专业提供后门特洛伊保护
  3. 独立样本与配对样本t检验
  4. php订阅号发送消息,关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题,_PHP教程...
  5. JavaScript Dom编程艺术(第二版)读书笔记 第三章DOM
  6. 计算方法(三)平方根法及其改进解线性方程组
  7. 远程主机关闭了一个现有连接python_python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054 | 学步园...
  8. 实现文本框以及其背景(根据输入字数)动态拉伸
  9. Unirech腾讯云国际站代充-云服务器系统盘使用问题
  10. 【Web】Excle题库抽题组卷在jsp显示