论机器学习的正确学习姿势

策划 | 刘燕作者 | Caleb Kaiser翻译 | Sambodhi编辑 | Linda很多开发人员并没有机器学习领域的背景,在机器学习如火如荼的今天,没学过机器学习的开发人员要怎样才能学会机器学习呢?Caleb Kaiser 为我们带来了他的学习建议。

本文最初发表在 Towards Data Science,经原作者 Caleb Kaiser 授权,InfoQ 中文站翻译并分享。

如果你是一名开发人员,你可能至少对机器学习有一点兴趣。若能够靠着自学就掌握预测的算法概念,真的有点酷。

然而,如果你真的下定决定去学习机器学习,并遵循典型的入门建议开始学习的话,那么,在放弃学习机器学习之前,你很可能需要花上两个星期来学习线性代数和多元微积分。

原因在于,大多数机器学习的入门资料并不是为开发人员编写的,而是面向机器学习研究人员,这对于那些只是想用机器学习来开发产品的开发人员来说,是个问题。

你是想做产品,还是想做研究?

在 2000 年代后期之前,机器学习或多或少只是一个研究问题而已。当时,并没有多少公司在生产中以有意义的方式来使用机器学习。

因此,许多机器学习的入门资料都是从这个研究角度来编写的。这些入门资料都首先从数学的角度解释神经网络,解释机器学习背后的所有理论,比如反向转播和对抗网络。

即使是非大学的附属资料在某种程度上也遵循了这种模式。例如,这是直接摘自 TensorFlow 的《初学者快速入门》(Quickstart for Beginners)的一段:

来源:https://www.tensorflow.org/tutorials/quickstart/beginner

losses.SparseCategoricalCrossentropy 损失采用 logits 的向量和 True 索引,并为每个示例返回一个标量损失。

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

该损失等于真实类的负对数概率:如果模型确定了正确类别,则为零。

这个未经训练的模型给出了接近随机的概率(每个类的概率为 1/10),因此初始损失应该接近 -tf.log(1/10) ~= 2.3。

loss_fn(y_train[:1], predictions).numpy()

如果你觉得我在用诘屈聱牙的语言,那请你阅读 整篇文章(https://www.tensorflow.org/tutorials/quickstart/beginner) 看看。

如果你已经熟悉机器学习背后的数学知识,或者对学习机器学习很感兴奋,那么这种方法对你来说是可行的。但是,如果你主要是想用机器学习来开发某种东西的话,那么,这就可能并不是你想要的学习方法了。

想要用推论的方法来学习编程?这种方法就像是通过首先学习汇编语言来学习编写代码。实际上,没有哪一个开发人员是这样学习的。

注意:如果你以某种方式学会了使用汇编语言编写代码,我会接受你愤怒的评论,并且令我印象深刻的是,你能够在任何晦涩的 Linux 发行版上安装浏览器。

当你学习编程时,你很可能是通过使用高级语言编写 “hello world” 来学习的。然后,随着一点一点地向项目引入复杂性,你可以根据需要去学习越来越多的底层编程。

这种学习模式在开发软件的人中很成功,因为它优先考虑的是开发内容,如果你对开发推荐引擎比发表论文更感兴趣的话,那么这就是你应该如何学习机器学习的方法。

如何通过开发软件来学习机器学习

如果你是那种通过学习课程学习效果最好的人,那么最好的资源,或许也是这种自上而下,边做边学的机器学习方法最积极的倡导者,就是 Fast.ai 的《程序员实用深度学习课程》(Practical Deep Learning For Coders)。

本文并非要为 Fast.ai 打广告。但可以肯定地说,Fast.ai 的创始人 Jeremy Howard 和 Rachel Thomas 已经开设了几门课程,通过让开发人员进行实际的开发,深入研究与正在构建的项目有关的基本理论,来教授深度学习。

或者,如果你是那种通过自己钻研并自己动手来学习效果最好的那类人,那么开始学习机器学习和学习其他编程领域是一样的。我整理了一份庞大的项目列表,这些项目都是 对初学者友好的自然语言处理项目,你可以看看,选择一个你感兴趣的项目,然后加入进来。

如果你正是这样学习的,那么熟悉使用机器学习开发的好方法是:

  1. 确定一个目标,比如,开发一个文本自动完成器,或者一个车牌识别器。
  2. 找到适合你的项目的预训练模型,如 GPT-2 或 YOLOv3,这两个分别适用于上面提到的两个项目。
  3. 如果你喜欢的话,甚至还可以使用 gpt-2-simple 之类的库来微调(根据你自己的数据定制)你的模型。
  4. 最后,将模型部署为微服务。

一旦你将模型部署为 API,就可以像查询任何其他 Web 服务一样对其进行查询,并围绕它开发应用程序。

通过这种方法,你可以了解各种流行的模型架构和机器学习方法,以及它们适用于哪些应用程序。同样重要的是,你将会了解机器学习基础设施,这对于从模型中开发真正的产品至关重要。

开发与学习理论并重

如果你是一名工程师,你以前可能实现过某种形式的身份验证,这意味着你(希望如此)对密码进行了哈希处理。

在设置密码哈希时,你是否编写了自定义的哈希算法?你花了几个礼拜的时间去学习密码学?还是你只不过是使用了 bcrypt 而已?

类似的,当你开发你的第一个 Web 应用程序时,你是否花了几个星期的时间来学习数据库?你是自己从零开始编写程序的吗?还是使用了你最喜欢的框架附带的任何 ORM?

同样的逻辑也适用于机器学习。如果你是那种喜欢开发软件的人,那么可以从使用机器学习开发软件开始,让工具、预训练模型和机器学习框架抽象出机器学习的基本理论。然后,如果你很好奇,或者你的项目需要更多的复杂性,就深入研究,看看机器学习是如何工作的。

免责声明: 本文内容是基于我对机器学习团队的观察,而不是对该行业的学术调查。利益相关:我是Cortex 的贡献者,Cortex 是一个用于在生产环境中部署模型的开源平台。

作者介绍:

Caleb Kaiser,Cortex Lab 创始团队成员,曾在 AngelList 工作,最初在 Cadillac 供职。

原文链接:

https://towardsdatascience.com/dont-learn-machine-learning-8af3cf946214

论机器学习的正确学习姿势相关推荐

  1. 阿里巴巴Java开发手册的正确学习姿势是怎样的? | 文末送书

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 243篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 很多人都知道,阿里巴巴 ...

  2. 上手机器学习系列-第1篇-聊聊机器学习的正确打开姿势

    前言 机器学习是一个充满乐趣的领域,也是一门动手性比较强的学科.就像掌握一类乐器一样,懂得乐理肯定是必要的,但反复练习,多动手实践,才能学好这门手艺.现在讲机器学习算法理论的材料已经很多了,而本系列突 ...

  3. java的正确学习姿势

    第 1 课 -- 数组与内存控制 数组初始化 数组初始化之后,该数组的长度是不可变的(可通过数组的 length 属性访问数组的长度).Java 中的数组必须经过初始化(为数组对象的元素分配内存空间, ...

  4. 《C Primer Plus》的正确学习姿势是什么?

    我们常常听到有人争论"Python.Java.PHP......是这个世界上最好的语言",却很少听到有人夸赞C语言,为什么呢?因为C语言实在是太太太太难了...... 为什么这么多 ...

  5. 全球最大的云计算平台GEE(Google Earth Engine)正确的学习姿势(1)

    对于很多人如何再全球使用量最大的云平台上Google Earth Engine进行运算操作,可能到目前都依旧一无所知,不过今天给大家系统的介绍一下GEE平台正确的学习姿势! 首先,如果大家英文水平还可 ...

  6. 学会python需要数学吗_机器学习数学基础:学习线性代数,千万不要误入歧途!推荐一个正确学习路线...

    机器学习数学基础:学习线性代数,千万不要误入歧途!推荐一个正确学习路线 序言 写完<机器学习深度研究:机器学习中的高等数学/微积分及Python实现>,觉得十分对不起读者,写的自己都不满意 ...

  7. python word2vec怎么用_小白看Word2Vec的正确打开姿势|全部理解和应用

    有个用心的读者最近做了一篇论文,想知道Word2Vec的相关理论和应用方法,作为一个有强迫症的我,去翻查了大量的文献资料,决定从Word2Vec的上下文来温习一下这个NLP的基础以及做相关的知识体系的 ...

  8. 使用Python,机器学习和深度学习的5个很棒的计算机视觉项目创意!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 计算机视觉属于人工智能领域,可以通过处理图像和图片来解决现实生活中 ...

  9. 干货丨机器学习和深度学习概念入门

    对于很多初入学习人工智能的学习者来说,对人工智能.机器学习.深度学习的概念和区别还不是很了解,有可能你每天都能听到这个概念,也经常提这个概念,但是你真的懂它们之间的关系吗?那么接下来就给大家从概念和特 ...

最新文章

  1. 我用kafka两年踩过的一些非比寻常的坑
  2. 简单mysql 查询_简单的mysql查询
  3. Jsp获得Map中map.put(2, bb);此类的value值
  4. wpf 加载本地html文件,c# – Wpf WebBrowser加载javascript
  5. 望SQLServer 高手指点
  6. micropython lcd触摸屏显示中文_基于Micropython的天气显示 进程帖
  7. SQLlite 分页
  8. Vue深入学习3—数据响应式原理
  9. 4.算法优化 -高性能JavaScript
  10. robot framework 使用四:分层设计和截图以及注意事项
  11. cscd论坛_高压电器第九届电工技术前沿问题学术论坛“先进电磁技术”分论坛及专题征稿...
  12. Windows server 2016中文语言包安装教程
  13. 日本最惨数学天才!37岁裸辞,房子被政府没收,向全村人乞讨,一家五口只能吃野菜.........
  14. 游戏程序必备spyder程序--可进可退的多级菜单系统
  15. 对抗打码平台的验证码思路
  16. python采用强制缩进的方式使得代码具有极佳的可读性_python3的优势有哪些
  17. 租一个月的云服务器要花费多少?
  18. echarts自传作品入口
  19. Design:设计目录
  20. html实现立体图片代码

热门文章

  1. 中科院自动化所余山:对大脑的未知,并不阻碍借鉴大脑,成就智能
  2. 人工智能与健康社会系列调研(一):人脸识别与公共卫生
  3. 《MongoDB权威指南》迷你书连载一-入门篇
  4. 到底什么是生成式对抗网络GAN?
  5. 区块链+数字经济发展白皮书,45页pdf
  6. 60分钟入门PyTorch,官方教程手把手教你训练第一个深度学习模型(附链接)
  7. 2D图片3秒变立体,Adobe实习生的智能景深算法,登上顶级期刊
  8. Linux 批量kill死进程
  9. 哈佛、MIT学者联手,创下矩阵乘法运算最快纪录
  10. 马斯克笑了!元宇宙是个啥?反正我不信!