原文来自 fast.ai ,原文链接:http://www.fast.ai/2017/03/17/not-commoditized-no-phd/
上周,我收到了两个前提截然相反的问题:其中一个是兴奋地认为机器学习目前已经自动化了,而另一个则担心学习机器学习会花掉多年的时间,以下是这两个问题的原话:
问题 1:我听说,谷歌云宣称,企业家能轻易且快速的基于机器学习/自然语言处理的 API 开发自己的程序。如果这是真的:「那么,机器学习和数据未来已经到来,谷歌已经找到了解决自然语言处理和语音提升问题的办法,用他们的 API 就可以轻松享受这一红利。既然秘诀已经被商业化,你也可以利用这一秘诀。问题是,秘诀到来的时间是否会越来越短呢?
问题 2:为了在机器学习领域工作,你需要一个该领域的 PhD,这事真的吗?还有就是在学习机器学习之前,是不是一定要先修微积分、线性代数、概率论/统计学这些乏味的全套大学数学课程,然后再学 C/C++和并行分布式编程(CUDA、MPI、OpenMP 等等)。Hacker News 一个评分最高的评论说,即便你把这些内容学了个遍,还是得从头开始应用机器学习算法,先是 C,接下来是 MPI 或 CUDA,然后是 Numpy,然后你才能学会在 Theano 或者 TensorFlow 上应用它们。
回答:很多人在人工智能热,以及诸如「人工智能是那些天才们的专属工具」的警告中昏了头,完全可以理解啊。对于记者来说,人工智能是个很难报道的领域,而且遗憾的是,被歪曲的事实随处可见。比如,最近有一篇文章 Stop saying DeepCoder steals code from StackOverflow 就研究了 DeepCoder 是如何被媒体误解的。
我对以上两个问题的回答是:不,两个问题似乎截然不同,但它们有一个共同的思路:很多在机器学习领域工作的人都对以下两点之一感兴趣:
1. 说服你购买他们的多用途机器学习 API。
2. 让你相信他们做得事情非常复杂、困难以及门槛很高,一般人很难理解。(这个常见的话题,最近 reddit 上一篇戏谑它的文章被顶到了机器学习页首。)
的确,机器学习的进步非常迅速,但就目前而言,你只需要能通过有效编程,使用到这项技术。我们的免费在线课程 Practical Deep Learning for Coders可以让你在 70 小时学习之后,高效使用深度学习技术。
为何「机器学习即服务」(Machine Learning As A Service,MLaaS)在实践中令人失望?
拥有一款通用机器学习 API 看起来是一个好点子,但是,事实上我们的技术目前还达不到。现有的 API 都太过局限而无法推广,有些 API 试图变得非常通用,但其实际效果非常差。Bradford Cross(他是 Flightcaster 与 Prismatic 的创始人,Data Collective VC 合伙人)写了篇文章,分析了最近很多人工智能公司尝试打造用户需要且愿意付钱使用的产品,但都失败的原因,他写道:「有观点认为,现在,那些从事或者围绕人工智能工作的人要负责引导人类进步,因为他们在从事重要的工作。这种态度就是这些失败的罪魁祸首。这种自大的观点让大家看不到这一事:他们正困在一间回音室里,屋子里所有人都在讨论技术趋势而不是客户需要和经济账。」
Cross 继续写道「机器学习即服务(MLaaS)是一个我们关注了近 10 年的想法,但是一直以来,它并不被看好。它之所以没有实现,根本原因在于,懂行的人只使用开源,而那些不懂行的根本无法做任何事情,有了 API 也不行。很多非常聪明的朋友都落入了这个陷阱。
大公司为了壮大自己的机器学习团队,收购了很多公司,其中就有被 IBM 收购的 Alchemy API,被 Intel 收购的 Saffron 以及被 Salesforce 收购的 Metamind。API 功能背后的机器学习模式赚钱轻松又快,这一点继续引诱着那些无助的人。亚马逊、谷歌和微软都尝试出售 MLaaS 层,将此作为自己云战略一部分。我还没见过在自然场景下(in the wild)使用这些接口的创业公司或者大公司,倒是看到很多人在这一场景下使用人工智能技术,或许是因为我观察不足吧。」
谷歌云会是解决问题的答案吗?
谷歌并非定位帮助实现深度学习的民主化。不是因为公司意图叵测,而是因为他们有太多服务器、太多钱和太多数据了,根本不用担心世界上大多数人和公司面临的问题——如何充分利用有限的 GPU 、有限的数据集和有限的预算。AWS 可是很贵的!谷歌大脑技术过于高级,不是普通程序员能染指的。
例如,TensorFlow 是一门低层面的语言,但是,在发布和推广它的时候,谷歌似乎没有注意到这一点。TensorFlow 的设计者本可以使用一种更加标准的面向对象的方法(如 PyTorch 就非常好),但是,他们没有,而是沿袭了谷歌的优良传统:发明一种仅适合谷歌的新惯例。
所以,如果谷歌甚至不能设计一个熟练数据科学家容易上手的库,怎么可能创造出普通人可用来解决真实问题的东西呢?
Hacker News 的计划:「普通 C 实现算法,然后 CUDA,最后用普通的 Numpy/MATLAB。」
为什么 Hacker News 通常会给出这么糟糕的机器学习建议?尽管机器学习背后的理论需要大量高等数学知识,但是,这和实践中使用机器学习所需的实用知识还是非常不同的。作为一个数学博士,我知道,较之打造一个实际有用的模型,那些数学知识没预期中的那么有用。
其中暴露出的思路是有害的,原因如下:
完全错误。
好的教育会促进重要概念的研究。借用 Paul Lockhart 在 Mathematician's Lament 里的一个类比,如果先让孩子学习几年音乐理论,再让孩子碰乐器或者唱首歌,孩子会放弃音乐。
好的教育不会过度复杂化材料。如果你真理解一样东西,就可以用一种通俗易懂的方式来解释它。数周的 Practical Deep Learning for Coders 课程学习,Jermy Howard 仅用 Excel 表格就清楚解释了不同现代优化技术(这常常被视为一个复杂的话题)的运行原理。
就像我在几个月前写道的,挑一位你所在组织里的业内专家,让他们学习深度学习技术要比空降一位深度学习专家要好得多。深度学习博士毕业生不太可能具备大量广泛相关经验(而这些又是那些最高效员工身上最珍贵的东西),他们更有可能对解决有趣的工程问题而不是聚焦于那些商业上最重要的问题。
「以我们在很多产业和多年来将机器学习应用于一系列问题的经验看,一直会有不被看好和有好技术却不被投资的公司出现。在大数据时代,这意味着公司得把钱花在外面找咨询顾问。在错误的『深度学习排他性』这种观念传播的日子里,这意味着搜索那些独角兽深度学习专家意味着不景气的深度学习创业公司要为此支付过高的成本。」
破除夸张宣传(当你不是机器学习研究者时)
计算语言学家 Dan Simonson 受邀写了一本答疑指南。其中评价了 NLP、机器学习和人工智能并且指明了鉴别虚假信息的办法(http://blog.thedansimonson.com/?p=461 ):
是否存在训练数据?如果不是,我们怎么计划来得到它们?
他们是否有一个内置于自身应用开发过程中的评价机制?
他们提出的应用是否依赖于在特定人工智能组分上的前所未有的好表现?
提出的解决方案是否是基于证实的、可靠的现象?
如果使用了预装人工智能部件,他们是否有从使用这些部件到获得有意义的应用输出的明确计划?
作为一个 NLP 研究者,Simonson 对现在人工智能的发展非常兴奋,但是他指出当人们利用从业者和公众之间的知识断层时,整个领域就受到了伤害,
深度学习研究者 Stephen Merity(就职于 Salesforce/Metamind)写了一篇题目贴切的文章《机器学习不是魔法:帮助降低人工智能炒作而应该被提出的问题》(https://smerity.com/articles/2016/ml_not_magic.html ),其中包括:
需要多少训练数据?
这项工作是否是无监督式(即不给样本进行标记)的?
系统能否根据词汇类别进行预测。(例如:想象一下,如果我说「我的朋友 Rudinyard 曾经对我很刻薄」,很多人工智能系统根本不能回答「谁对你刻薄」这个问题,因为 Rudinyard 不是该系统收入的词汇。)
当输入的故事变得更长时,精确性降低了多少?
在整个时段中模型的表现有多稳定?
Merity 也提示道,模型经常基于被高度处理、规划了的或受限的数据集被评估,而这些数据集不能精确地反应你正在处理的真实数据。
这对你意味着什么?
如果你是一位有志向的机器学习从业者:好消息!不需要博士学位,不用从头开始从 CUDA 或 MPI 开始编写算法。如果你有一年的编程经验,我们推荐你试试 Practical Deep Learning for Coders 课程(http://course.fast.ai/ ),或者考虑一下我的额外建议:《如何变成一位数据科学家?》
如果你在科技领域工作,想要打造一项使用机器学习业务:好消息!不用从 OpenAI 雇人,那些博士不仅难找还很贵。为贵公司的编程人员提供追赶速度所需的资源和时间吧。着重关注某一特定领域(与该领域的专家合作),开发出该领域人们需要并且能够使用的产品。