本文已翻译成中文(点此查看)。
这是我的“咨询数据科学家”建议专栏的最新一期。请将您与数据科学相关的困惑发送到mailto:[email protected]。请注意,为清晰和简洁,问题会被编辑。其他帖子包括
上周我收到了两个前提完全相反的问题:一个问题对机器学习现在实现自动化感到兴奋,另一个问题则担心机器学习需要多年的学习。问题如下
问题1:我听说 Google Cloud 宣布创业者可以轻松快速地在 ML/NLP API 之上进行开发。这句话是真的吗:“Google Cloud 之后 ML 和数据的未来——未来已来,NLP 和语音领域的进步已经被 Google 解决,并且可以通过 API 访问。秘诀已经被商品化,因此你可以在此基础上构建自己的秘诀。到达秘诀的时间越来越短”?
问题2:从事机器学习工作真的需要该领域的博士学位吗?真的需要在开始学习机器学习之前,先学习数学,参加“大学水平的微积分、线性代数和概率/统计等枯燥的完整课程”,然后学习 C/C++ 以及并行和分布式编程(CUDA、MPI、OpenMP 等)吗?根据 Hacker News 上这条获得高赞的评论,即使完成了所有这些,我们还必须先用纯C从头开始实现机器学习算法,然后用 MPI 或 CUDA 实现,接着用 Numpy 实现,最后才能在 Theano 或 TensorFlow 中实现。
回答:完全可以理解许多人在应对炒作以及“人工智能是天才专属工具”的警告时遇到的困扰。人工智能对记者来说是一个难以报道的主题,不幸的是,许多误解因此传播开来。例如,关于 DeepCoder 在媒体中如何被误解的近期案例研究,请参阅这篇很棒的帖子。
这两个问题的答案都是:否。表面上看,它们是两个相反的极端。然而,它们有一个共同点——许多从事机器学习工作的人都有兴趣
- 说服你购买他们的通用机器学习 API(这些 API 除了让他们的公司被收购外,没有任何实际用处)。
- 说服你相信他们正在做的事情是如此复杂、困难和独有,以至于我们这些凡人根本无法理解他们的魔法。(这是一个非常常见的主题,最近 reddit 上一篇模仿此论调的恶搞文章甚至被投票置顶到机器学习页面:机器学习超级硬核指南)
是的,机器学习的进展非常迅速,但目前,你需要具备编程能力才能有效地使用这项技术。通过我们的免费在线课程为程序员提供的实用深度学习,我们发现大约需要70小时的学习时间才能成为一名有效的深度学习实践者。
为什么“机器学习即服务”(MLaaS)在实践中如此令人失望
通用机器学习 API 听起来是个很棒的主意,但技术还没有达到那个水平。现有的 API 要么过于具体而无法广泛应用,要么试图做到非常通用但性能却令人难以接受。我同意 Bradford Cross 的观点,他是 Flightcaster 和 Prismatic 的前创始人,也是 Data Collective VC 的合伙人,他最近撰文谈到许多人工智能公司未能尝试构建客户需要并愿意付费的产品:“这是一种心态,认为从事或围绕人工智能工作的人们现在就负责引导全人类进步,仅仅因为我们在做一些重要的事情。这种自大的迷雾让人们看不到他们身处一个回音室,每个人都在谈论技术趋势,而不是客户需求和商业经济效益。”(斜体部分为我强调)
Cross 继续说道,“机器学习即服务(Machine Learning as a Service)这个想法我们已经看到了将近10年,并且它一直在失败。它行不通的根本原因在于:知道自己在做什么的人会直接使用开源工具,而不知道的人即使使用 API 也永远不会让任何东西奏效。许多非常聪明的朋友都掉入了这片泥潭。那些被大公司吞并以增强其机器学习团队的公司包括 IBM 收购的 Alchemy API、Intel 收购的 Saffron 和 Salesforce 收购的 Metamind。尽管如此,通过将一个机器学习模型放在 API 函数后面就能轻松赚钱的诱惑,依然不断吸引着迷失的灵魂。亚马逊、谷歌和微软都在试图将 MLaaS 层作为其云战略的一个组成部分来销售。我尚未见到有初创公司或大公司在实际应用中使用这些 API,而我在实际应用中看到了大量的人工智能应用,因此这不太可能是由于我的观察样本量太小。”
Google Cloud 是解决方案吗?
Google 在帮助普及深度学习领域方面处于非常不利的地位。这并非出于恶意——只是他们拥有太多服务器、太多现金和太多数据,以至于无法理解世界上绝大多数人面临的挑战,即如何在有限的 GPU、有限的预算(AWS 的账单很快就会堆积起来!)以及有限的数据集下发挥最大的作用。Google Brain 的技术深度太高,以至于与普通程序员脱节。
例如,TensorFlow 是一种低级语言,但 Google 在发布和推广时似乎没有意识到这一点。TensorFlow 的设计者本可以采用更标准的面向对象方法(例如优秀的 PyTorch),但他们却坚持了 Google 一贯的优秀传统——只为 Google 发明新的惯例。
因此,如果 Google 甚至无法设计一个经验丰富的数据科学家也能轻松使用的库,他们又有多大可能创造出普通人可以用来解决现实世界问题的东西呢?
Hacker News 的计划:“首先用纯C实现算法,然后是CUDA,最后是纯Numpy/MATLAB”
为什么 Hacker News 的贡献者经常给出如此糟糕的机器学习建议?虽然机器学习背后的理论确实借鉴了许多高等数学知识,但这与在实践中使用机器学习所需的实用知识截然不同。作为一名数学博士,我发现掌握数学知识在构建实用、可工作的模型方面,并没有你想象的那么有用。
Hacker News 评论中宣扬的这种思维方式有害,原因有几点:
- 它完全错误。
- 好的教育能够激发对底层概念的学习兴趣。借用 Paul Lockhart 在其著作《数学家的悲歌》中的比喻,如果你让孩子们在被允许唱歌或接触乐器之前,先花几年时间学习乐理,他们很可能会放弃音乐。
- 好的教育不会过度复杂化材料。如果你真正理解某事,你就能用易于理解的方式解释它。在《为程序员提供的实用深度学习》课程中,Jeremy Howard 花了几周时间,用 Excel 实现了各种现代优化技术(这通常被认为是复杂的课题),以便更清楚地展示它们的工作原理。
正如我几个月前写道,“最好是培养组织内的领域专家,教他们深度学习,而不是找一个深度学习专家并把他‘扔’到你的组织中。深度学习博士毕业生不太可能具备你在最有效率的员工身上看重的广泛相关经验,而且他们更有可能对解决有趣的工程问题感兴趣,而不是专注于最具商业重要性的问题。”
“在我们跨越多个行业和多年将机器学习应用于各种问题的经验中,我们始终看到组织低估并低投入于现有的内部人才。在大数据热潮时期,这意味着公司花钱雇佣外部顾问。而在现在虚假的‘深度学习专属论’论调下,这意味着寻找那些独角兽般的深度学习专家,通常包括为那些失败的深度学习初创公司支付虚高的金额。”
拨开炒作迷雾(当你不是机器学习研究员时)
计算语言学家Dan Simonson写了一篇实用的提问指南,用于评估自然语言处理(NLP)、机器学习(ML)和人工智能(AI),并识别伪科学。
- 是否存在现有的训练数据?如果没有,他们计划如何获取?
- 他们的应用开发流程中是否内置了评估程序?
- 他们提议的应用是否依赖于特定 AI 组件前所未有的高表现?
- 提议的解决方案是否基于已验证、可靠的现象?
- 如果使用预封装的 AI 组件,他们是否有明确的计划说明如何从使用这些组件过渡到获得有意义的应用输出?
作为一名自然语言处理研究员,Simonson 对人工智能当前的进展感到兴奋,但他指出,当人们利用实践者和公众之间的知识差距进行炒作时,整个领域都会受到损害。
深度学习研究员 Stephen Merity(来自 Salesforce/Metamind)发表了一篇标题恰如其分的文章机器学习不是魔法:你应该问的简单问题,有助于减少 AI 炒作。他的问题包括
- 需要多少训练数据?
- 这能在无监督下工作吗(= 无需标记示例)?
- 系统能预测词汇表外的名字吗?(例如,想象我说“我的朋友 Rudinyard 对我很刻薄”——许多 AI 系统将永远无法回答“谁对我刻薄?”,因为 Rudinyard 不在它的词汇表中)
- 输入故事越长,准确度会下降多少?
- 模型随时间推移的性能稳定性如何?
Merity 还提醒,模型通常是在高度处理、人为构建或有限的数据集上进行评估,这些数据集并不能准确反映你正在处理的真实数据。
这对你意味着什么?
如果你是一位有志成为机器学习实践者的人:好消息!你不需要博士学位,也不需要在 CUDA 或 MPI 中从头编写算法。如果你有一年的编程经验,我们建议你尝试为程序员提供的实用深度学习,或者考虑我关于如何成为数据科学家的其他建议。
你在科技行业工作并希望建立一个使用机器学习的业务:好消息!你不需要从 OpenAI 挖来那些极其难以找到、极其昂贵的 AI 博士。为你现有的程序员提供所需的资源和时间,让他们能够快速掌握技能。专注于一个特定领域(与该领域的专家一起),并构建该领域人群需要且可以使用的产品。