当前位置: 俄语入门 > 俄语学习视频教程 > 正文

作为普通Ruby开发,我如何从零转型机器学习

2018-10-01 23:24 4
作者 | Alexey Gaziev
译者 | Sambodhi Liou
编辑 | Vincent

让我们从描绘想象的肖像开始,看看你是否认出了你自己,还是你所认识的人。

你是一名软件工程师,每天都与代码打交道,构建复杂的东西,将业务需求转化为应用程序的逻辑,并按时交付。你尝试过不同的编程开发语言,并选择了你趁手的兵器。你对自己的工作充满了信心,并准备好去学习一些全新的东西,这些东西会赋予你新的能力,让你在这个职业中与时俱进。

关于人工智能是“新能源”的言论一直不绝于耳。得益于机器学习的进步,整个行业因此发生了变化。而最乐观的研究人员将人工智能的兴起比作工业革命。

这场革命贯穿你的生涯,你想投身其中。你想知晓有关人工智能、机器学习、深度学习的更多知识并进行实验,但你不知道应该从哪入手。

AI 前线注:Ruby on Rails(官方简称为 Rails。也有人简称为 RoR,该缩写目前仍于一些中文讨论中被使用。),是一个使用 Ruby 语言写的开源 Web 应用框架,它是严格按照 MVC 结构开发的。它努力使自身保持简单,来使实际的应用开发时的代码更少,使用最少的配置。

一般的经验法则是,所有现代人工神经网络(RNN、CNN、DBN、DQN,总带有一个“N”字母,如“网络”) 都属于深度学习。

首先,让我们先澄清是非。“正确”地使用人工智能、机器学习和深度学习等术语是一个永无止境的争论话题,很快就会让初学者感到迷茫,无所适从。为了简单起见,我们将机器学习视为来自人工智能的一组工具,深度学习是它们的一个特定子集。在我这份笔记中,所有三个术语都可互换,但主要是在深度学习的背景之下。

刚入门机器学习的新鲜感犹如昨日,因此,我想给那些刚开始探索这一新领域的菜鸟们提供一些建议。

1. 不要担心

假设你对数学不怎么感冒,就我个人而言,八年前,我从理工学院毕业之后,就再也没有碰过数学教科书了(至少在我开始学习深度学习之前是这样)。你要知道它究竟是怎么回事:你阅读语言、框架文档的频率可比其他任何东西高多了。

经过一些初步的 Google 搜索,并与周围的数学高手交谈之后,我得到一种印象,以下罗列的是你在尝试用神经网络解决现实问题之前就需要积累的数学知识。至少,我两年前的印象是这样的:  

  • 掌握线性代数。

  • 熟悉概率论。

  • 学习所有经典的机器学习概念,从线性回归开始。

  • 学习如何使用 Python、C、C++、或 Java 实现所有这些算法。

  • 学习如何处理数据集,提取特征、参数微调以及发展直觉,了解哪种特定算法适合手头的任务。

  • 熟悉深度学习框架 / 库(我那会儿是 Theano 和 Torch 的天下,现在可能是 PyTorch、TensorFlow 和 Keras 大行其道)。

据一些专家说,只有掌握上述提到的所有知识之后,你才能够解决一些实际的问题,比如区分猫和狗。

如果你的情况与我类似,上面的清单就足以让你产生畏难情绪,并导致拖延症发作。

不过别担心!虽然从技术上来说,上述列表中所有的内容都是适用的,但这些并非入门级要求。如果你知道如何编程,那么你就已经知道如何训练模型。

2. 记住,它仍然是代码

看看这段代码:

从这段代码中,你能得到什么信息呢?

  • 这是一段用 Python 编写的代码。

  • 它使用了 fastai 深度学习库。

  • 它只有三行(不包括 import)。

这是来自 Jermy Howard 教授的 fast.ai 课程中的一个例子,这门课程很棒,而且免费。Jeremy 倡导的理念是:从预先准备好的抽象概念开始,只有经过一些实践练习后,才能深入挖掘。

上面的代码调整了预训练的图像分类模型(在 ImageNet 上训练,大约 1500 万张图像的数据集),这样它就可以解决前面提到的 Dogs vs. Cats 任务。它在短短三个轮数之内(通过数据传递)就达到了 98% 的准确率。在配备 GPU 的计算机上进行训练需要 17 秒钟。这些结果使长久以来未能解决同样问题的尝试得到迎刃而解。

当然,别看只有短短三行代码,要知道这三行代码背后凝聚了多年的研究、数十篇学术论文和数千小时的反复试验。但这些都是你现在可用的几行代码。一旦你掌握了为你自己的用例对图片进行分类(并在生产中进行使用)的要点,那么就跟区分猫和狗没有什么区别了。

3. 找一个合作伙伴

我更愿意将自己视为一个勤劳的人,一个善于学习的人。作为一名初出茅庐的程序员,我是从微软产品开始接触 C# 和.NET 的。不久之后,我就发现了 Ruby 的美和表现力,并转投到 Rails 中,最终成为了一名优秀的 Ruby 程序员,并通过 Evil Martians 为初级开发人员而设的面试挑战。我在一家以内部项目起家的初创公司很快升任为 CTO。同时,我还开发了一些 Ruby gems(gon 在 Rails 社区中非常受欢迎),在会议上发言,在最佳实践方面为开发人员提供一些指导,当你是 Evil Martians 团队的一员时,一切照旧。当然,我也相信改变观点的好处。在使用 Ruby 全职工作期间,我还涉足了 C++、Haskell。JavaScript 以及有些晦涩难懂的 Eve。

在我的业余时间里,我喜欢弹低音大提琴和吉他,还喜欢画油画、冲浪。

尽管如此,拖延症对我来说也不是什么新鲜事:在我工作效率很低的时候,我经常追剧,把时间浪费在 MMORPG(Massive Multiplayer Online Role Playing Games,大型多人在线角色扮演游戏)以及奇幻小说上,毕竟我是个书呆子。

当我准备涉足机器学习,尤其是深度学习时,我和我朋友那会儿正是《风暴英雄》(Heroes of the Storm)多人在线竞技游戏的玩家。

为了让自己在通往新知识的漫长道路上迈出第一步,我必须与同样梦想着人工智能的朋友达成协议。我们决定一起治愈拖延症,参加相同的课程,互相督促学习。现在我们经常一起参加比赛。

如果你的线下朋友都不愿意和你一起学习,那么互联网就是你的朋友:网上有很多地方,你可以找到其他初学者一起学习。

4. 避免认知超载

众所周知,学习太难的东西是一种令人沮丧的经历。作为人类,我们有信心避免沮丧。与此同时,学习太容易的东西也不会让你满意:你很快就会失去任何动力。关键是要尽可能的咬牙坚持下去。

我参加的第一个在线课程是 Udacity 的 Deep Learning Nanodegree(深度学习纳米学位):这是一个昂贵的计划(现在 999 美元,我当时花了大约 400 美元),承诺为期四个月的理论入门以及将所学知识应用于现实世界所需的实践。作为奖励,修完这门课程后,参加 Self-Driving Cars Nanodegree(无人自驾车纳米学位)的在线课程可以享受折扣。

我错在深陷其中,不能自拔。首先,没有覆盖到我的基础。当我对课程中提到的一些概念感到吃力时,我就惊慌失措,开始阅读网上所能找到的一些:文章、书籍和其他课程。

结果,我无法专注于本应给我打下基础的资料。事后看来,我强烈建议你坚持学习一门课程,而不是同时学习多门课程。毕竟,人类在多任务处理方面的能力是出了名的差。

如果我现在开始的话,我会先看看 Jeremy Howard 的 fast.ai,前面我已经提过,还有 Andrew Ng 最新的 Coursera(有个证书费用,但你可免费获得)。它包含五门课程:从神经网络概述、深度学习、通过发现卷积神经网络(对处理图像数据至关重要),到序列模型(语音识别、音乐合成、任何时间序列数据)。

第二门课程更侧重于理论,而第一门课程强调的是“快速而随性”的实现,我认为这是最好的入门方法。只要记住调整自己的步调,避开同时处理多任务,并采取一些较小的步骤。

5. 设定目标

不要试图一次学完所有的东西,要试着选择那些使用深度学习技术能够给你个人带来满意结果的领域。处理与你相关的事情(而非处理随机抽象数据点),会让你保持积极性。你需要一个反馈循环,一种从实验中获得实际结果的方法。

以下是启动项目的一些想法:  

  • 如果你喜欢电子游戏,你一定要看看强化学习。你可以训练一个游戏智能体,在你最喜欢的游戏中超越你自己的表现。而且,你可以用智能体进行电子游戏,没有人会因此责怪你,因为你懂得,以研究的名义。  

  • 如果你热衷于用户体验和客户支持,请参阅自然语言处理和聊天机器人,这样你就可以在一定程度上自动化地与客户进行交流:从聊天内容揣测客户的意图,对支持票证进行分类,为大多数常见问题提供即时答案。

在尝试计算机视觉领域之后,我和朋友将注意力转向了自动语音识别(Automatic Speech Recognition,ACR)和自然语言处理。看看行业巨头(Google、Apple 等)支持的无人驾驶汽车项目,就知道计算机视觉现在可能是资金最多的研究领域,也是深度学习技术巩固地位的领域:在图像分类这块,神经网络预测的准确率从 2010 年低于 75% 增长到 2018 年的 98%。

注:造成这种延迟的主要原因是硬件限制:机器翻译任务需要大量的内存和处理能力来训练大型神经网络。

要想知道深度学习改变一个几十年来未见重大进展的研究领域的速度有多快,看看下面一个有趣的事实就知道了:

机器翻译竞赛中首次出现神经网络的影子,仅仅就在三年前的 2015 年。到了 2016 年,机器翻译竞赛中 90% 的竞争者都是基于神经网络。

从关于这个主题的学术论文中可以提取大量的知识,并应用到现实世界的任务中,特别是如果你的初创公司与文本(和 Amplifr)相关的话。

6. 竞争力

机器学习领域本质上是充满了竞争的。全球最大的数据科学家和机器学习从业者的社区 Kaggle,早在 2010 年就将黑客马拉松的精神引入了这一学术领域。从那时起,解决机器学习任务的竞争方式就成为了标准做法。从 Microsoft 到 CERN(欧洲核子研究组织)的公司和机构都为解决挑战提供了奖励,以换取免版税的许可,让他们可以使用获奖作品背后的技术。

机器学习竞赛是评估你技能的最佳方式,能够让你在某个领域获得“基准线”的感觉,从更高级的竞争对手那里获得灵感,找到同事合作,而且还能让你在机器学习领域中名扬天下。

我们虽然没有拿到奖品,但我们在排行榜上位列前 15%(这没有什么可吹嘘的),在书中列举了每个初学者会犯下的错误,这些经验都是无价的:我们获得了继续努力的信心,并选择下一场竞赛,这次是自然语言处理的领域。

这个任务是训练一个系统,回答基于一段文字的问题。这个模型可以在 Docker 容器中提交(RAM 被限制为 8GB),它应该能够在一个以自然语言提问的问题中突出显示文本段落中的相关部分。因为在最具挑战性的比赛中,经常会出现这种情况,因此我们不得不提交未经训练的模型,而是一个解决方案,必须在两个小时的机器时间内完全训练并给出测试问题的答案(为确保公平竞争,测试数据集仅部分公开)。

我们的解决方案在公共排行榜上位列亚军,但我们太过专注于解决任务,忘记正确阅读竞赛规则:他们说团队合作是禁止的,只接受个人参赛项目。我们不得不全盘招供,并获得了“安慰奖”铜奖(这一奖项有点像戛纳电影节的奖项,当电影作为“非竞赛片”展映时)。

我们很幸运地避免了被取消比赛资格的厄运,但我们汲取了教训。现在,我强烈建议大家参赛时不要冲动,一定要花点时间仔细阅读竞赛规则。

由于我对深度学习的兴趣主要是以生产为导向的(提出解决方案,可以应用于我的创业公司的实际需求),我还注意到,查看排行榜可以让你很好地了解“接近生产”的程度。顶级的解决方案通常是学术性的,尚未做好准备进行商业部署。而银奖、铜奖以及后面的一些解决方案通常是最有希望的应用。

7. 随时了解动态

深度学习领域不断发展的步伐有两面性:有好处也有坏处。甚至这篇文章(作为介绍性质的、个人的和非学术性的)在发表之前可能在某些方面就已经过时了。

8. 使用你的编程技能

我们必须承认一个显而易见的事实:Python 完全赢得了人工智能和数据科学社区的支持。在今天,可能没有理由从一种不同的语言开始,除非你真的很擅长这门语言,或者你计划处理一些非常低级的优化。

对于软件工程师来说,语言“障碍”并不是什么问题。但对于非编程背景的爱好者来说,进入深度学习领域很难。因此,你已经领先一步了。

但是,你不要指望一些优秀的 OOP 代码和直观的 API。大多数公共代码示例在我的团队中也不能通过严格的代码审查。这与软件工程无关,毕竟,这是关于数学的:矩阵乘法需要先把矩阵相乘,干净的领域特定语言(Ryby 让你习惯优秀的 DSL)总是事后才会考虑的事情。

另外,不要对文档或风格抱有太高的期望。一旦你在将学术论文翻译成代码时遇到了一些重要的细节,你将不得不阅读库的源代码,而且这并不容易。测试覆盖率也经常不足。

9. 最后,复习一下你的数学

当然,我把最好的心得经验留在最后。最终,你将不得不缩小你的数学差距。特别是如果你在了解了自己的基础知识之后,愿意站在前沿并关注学术出版物的话。

该书的第一部分(线性代数、概率论和信息论,数值计算,机器学习基础知识)是最基本、最简单的部分,属于介绍性质的。令人惊讶的是,当你继续跟进当前的研究时,它已经不那么令人生畏了。是的,这是长达 130 页的阅读,虽然谈不上悠闲,但你绝对不会后悔阅读这部分的内容。

我希望读者们能够从这篇文章中,感受到我对深度学习的热情,让这一领域对我这样来自应用编程的人来说显得平易近人。我真的相信,随着人工智能和深度学习的进展,这个世界正在接近另一个“电灯泡时刻”,是的,我指的就是爱迪生发明的那盏灯泡。

像你我这样的“充满好奇心的软件开发者”,将是这场已经开始的革命背后的主要推动力。也许,你并不完全处于科学的前言(否则你可能不会读到这篇文章),但你有能力实现学术界的最佳创意,那么,每次一个应用,就是我们改变世界的方式。

所以你继续前进吧!你可阅读文章中以及文末我列出的一些资源,建立你的信心,让我们开始踏上人工智能征途吧!

有用的资源:  

原文链接:

今日荐文

重磅!腾讯架构大调整,业务重心由2C变2B

精品推荐

近几年,短视频应用蓬勃发展,由于短视频场景下用户兴趣和广告内容更难以理解,短视频广告在用户内容理解、召回、排序和机制上都会遇到更大挑战。基于快手海量的用户和视频数据,利用 AI 相关技术,可以更好的解决这些问题。

AICon 全球人工智能与机器学习技术大会上,快手短视频商业化模型方向负责人孔东营将会为我们带来“机器学习在短视频商业化中如何应用”相关议题的精彩分享。

如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!

欢迎 发表评论:

Copyright © 2018 俄语入门