导读
当你在现实世界中工作时,有几个事实是你必须面对的,这也是本文的主要内容。
上个月,我在一个亲密的朋友聚会上做了一个非正式的演讲,我把这个题目记下来。这篇文章主要是写给那些使用机器学习来构造东西的人,而不是那些研究机器学习的人,尽管后一组人会很好地倾听这些真理并反省他们的工作。
0. 你不是一个科学家
是的,虽然你们的 title 是“科学家”,包括你们所有拥有博士学位的人,以及涉足这个行业的学者。但是,机器学习(以及其他人工智能应用领域,如 NLP、视觉、语音……)是一门工程研究学科(与科学研究相对)。
你会问,科学研究和工程研究有什么区别?George A. Hazelrigg 在他的“HONING YOUR PROPOSAL WRITING SKILLS”中写道:
一些科学家会学习如何制定研究计划。很少有工程师是博士级别的工程师。让我们先试着理解科学研究和工程研究之间的区别。对我来说,区别很明显。科学家力图了解大自然的本质,以了解其根本的本质。为了做到这一点,科学家通常剥离无关的影响,深入到一个非常狭窄的自然元素。这就是我们所说的自然法则:能量和质量是一样的,每一个作用力都有一个大小相等、方向相反的反作用力,依此类推。有许多自然法则,它们随时随地都适用。工程师遵循自然法则。他们别无选择。他们的目标是设计出在自然允许的范围内工作的东西。要做到这一点,他们必须能够预测系统的行为。所以工程师们面临的一个大问题是,我们如何理解和预测一个系统的行为,在这个系统中,所有的自然法则在任何时候都适用于任何地方。这是一个整合的问题,它就像找到一开始的规律一样困难。每时每刻把所有的自然规律都考虑进去是不可能的。因此,工程师必须找到方法来确定哪些定律是重要的,哪些可以忽略,以及如何近似那些在时间和空间上都很重要的定律。工程师不仅仅是预测未来。他们做出的决定部分是基于他们的预测,因为他们知道自己的预测不可能既准确又确定。理解和应用数学也很重要。这包括概率论、决策理论、博弈论、最优化、控制理论和其他数学在工程决策环境中的应用。这也是一个合理的工程研究领域。
作为 ML 的研究人员和实践者,你必须考虑你拥有的数据的正确模型,而不是你拥有的模型的正确数据集(就像许多研究论文一样)。如果你曾经问过“这个模型的正确数据集是什么”,那么你并不是在现实世界中。到底什么是真实的世界?在现实世界中,你对要处理的数据是没有选择的。在这里,数据定义了问题,而不是相反。有时,在现实世界中,ML 实践者创建了一个自己的世界作为他们的建模游乐场,从而假装他们是“科学家”,例如“发明”一种用于做 NLP 的语言,或者通过简化假设来创建封闭的环境来强化学习。这些研究得出了有趣的结果,但它们的范围仅限于它们所来自的世界,即使研究人员喜欢在论文中把它们当作适用于现实世界的东西来兜售。在现实世界中,输入的分布更有可能发生变化,长尾的“curve balls”不知从何而来,你并不总是有答案。
当你在现实世界中工作时,有几个事实是你必须面对的,这也是本文的主要内容。但这个开场白是必不可少的。如果你在现实世界中做 ML 研究,你是工程师而不是科学家。
1. 需要可以工作
虽然这听起来很简单,但我很惊讶有多少人,不管是新手还是有经验的人,都被一些听起来很花哨的名字吸引住了,或者因为一些东西来自 DeepMind、OpenAI、斯坦福大学、麻省理工学院等等。如果你的模型确实只能够在它们的环境和资源约束下处理他们的数据集和,那么现实世界将无情地拒绝它。arXiv 上的许多结果只能在少数数据集上工作,或者只能在只有谷歌基础设施支持的百兆级 gpu 上工作。帮社区一个忙,不要再发布那些一般性的结果了。它必须能工作。这也是为什么我们今天不考虑在没有卷积神经网络的计算机视觉中做任何事情,或者为什么我们很容易在序列模型中使用注意力的原因。它必须要能工作。
推测:这么多人,特别是 ML 的新手,被花哨的模型名称冲昏了头脑,迫不及待地想要尝试它们,或者写关于它们的博客帖子,等等。我觉得这就像一个初学写作的人。他们认为使用华丽的词语会使他们的写作更好,但经验会告诉他们其他的。
2. 无论你如何努力,无论你的优先级是什么,你都不能提高光速
缓存层次结构已经是固定的,你必须在这个前提下工作,网络开销会让分布式训练变慢,在向量中只能塞入那么多内容,等等。
3. 只要有足够的推力,猪就能飞得很高,然而,这并不一定是一个好主意
一个研究生或大型的超参数扫描器可以在一个巨大的数据中心中可以找到一组超参数,可以让非常复杂的模型工作得很好,甚至产生优秀的结果。但没有人在现实世界中调试那么大的模型。我在帮助公司管理他们的 ML 团队时发现了一个秘密 — 大多数人不知道/不关心超参数调优。
4. 生活中的一些事情,除非亲身经历过,否则永远不会被完全欣赏或理解
对于既不构建生产 ML 模型也不维护它们的人来说,机器学习中的某些东西是永远无法完全理解的。再多的课件,再多的 mooc,再多的 Kaggling,都无法让你为此做好准备。没有什么可以替代部署模型、观察用户与模型的交互、处理代码/模型分解等等。
5. 总是有可能将多个独立的问题聚合成一个复杂的相互依赖的解决方案,在大多数情况下,这是一个坏主意
端到端学习在理论上听起来是一个好主意,但是对于大多数部署场景,分段优化的管道架构将继续存在。这并不意味着我们将完全没有端到端系统(语音识别和机器翻译有很好的端到端生产价值解决方案),但在大多数情况下,具有可观察的调试路径将胜过其他选择。
6. 把一个问题转移到别处,甚至是忽略它,都比解决它要容易得多
例如,在语音方面,声学建模是困难的,但是你可以让网络在解决不同问题(例如语音识别)的方法中找出这些细节。在 NLP 中,很难进行正确的解析。但值得庆幸的是,对于 99%的现实任务,我们可以不进行解析。
推论:除非迫不得已,否则不要解决问题。
7. 你总是要在一些事情上做权衡
速度 vs 内存,电池寿命 vs 准确性,公平性 vs 准确性,易于实现 vs 可维护性,……
8. 一切都比你想象的复杂
与购物时的价格冲击类似,工作中也有“努力冲击”。大多数经验丰富的研究人员和工程师都经历过“努力冲击”,要么是因为他们低估了处理大型数据集的工程问题,要么是因为他们低估了正在与之搏斗的领域的复杂性,要么是因为他们低估了对手。大多数论文让读者读起来觉得事情很简单,而忽略了这背后是经过了几百万次失败才有的成功。因此,论文不是研究,而是做研究的结果。因为这个原因,你永远可能通过阅读论文来体验做研究的过程。
9. 你永远都会是准备不足
这可以和第 8 点结合起来,事实上任何远程调用的成功的模型如果没有适当的计划,都可能由于自身的成功而崩溃。
10. 一个尺码不可能适合所有人,你的模型会一直犯令人尴尬的错误,尽管你的出发点是好的
角落案例和长尾失败模式将困扰你。值得庆幸的是,对于许多非关键的 ML 部署来说,这并不是什么大问题。最坏的情况下,它会成为一条搞笑的推文。但是,如果你在医疗保健或其他高风险情况下工作,ML 部署将因此成为一场噩梦。
11. 每一个旧的想法都会以不同的名字和不同的形式被再次提出,不管它是否有效
Schimdhuber 可能提出了一个更大的观点。没有人听他的,像他一样,我们把旧酒重新装进新瓶子,被迫重复错误的历史。
12. 达到完美不是因为没有什么可以补充的,而是因为没有什么可以去掉的
生活中的每件事都是如此,现实世界中的机器学习也是如此。唉,我们的会议回顾了他们对“新颖性”的嗜好,产生了不想要的 arxi -spam,其中包含了大量本来就不需要存在的垃圾。除非做“科学”能够鼓励宣传什么是有效的,而不是什么是新的,否则我不认为这种情况会改变。