社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

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

AI前线 • 4 年前 • 433 次点击  

策划 | 刘燕
作者 | 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 已经开设了几门课程,通过让开发人员进行实际的开发,深入研究与正在构建的项目有关的基本理论,来教授深度学习。要了解他们的教学风格,可以看看 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


你也「在看」吗?👇

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56942
 
433 次点击