当你在现实世界中工作时,有几个现实是你必须面对的,这也是本文的主要内容。
上个月,我在一个小型聚会上做了一个非正式的演讲,题目就是这个。这篇文章主要是写给那些利用机器学习来构建产品的人,而非那些研究机器学习的人,尽管后者也会对这些观点深思熟虑。
0. 你不是一个科学家
尽管你们的职业头衔可能是“科学家”,包括所有拥有博士学位的人和学者,但机器学习(以及人工智能的其他领域,如NLP、视觉、语音等)其实是一门工程学科,而非科学研究。
工程和科学的区别在于:科学家试图理解自然界的本质,而工程师则致力于设计在自然界允许的范围内运行的产品。科学家专注于探究单一的自然法则,而工程师则需要综合考虑所有自然法则,找到哪些是关键的,哪些可以忽略,以及如何简化复杂的问题。
作为机器学习的研究者和实践者,你需要关注的是你所拥有的数据,而不是模型本身。现实世界的数据是多变的,常常出现难以预料的情况,而你不一定总能找到答案。
如果你在现实世界中从事机器学习研究,你实际上是在扮演一个工程师的角色,而不是科学家的角色。
1. 功能性是首要条件
虽然听起来简单,但许多人,无论是新手还是老手,往往会被一些听起来很酷的模型名称所吸引,或者因为某个模型来自DeepMind、OpenAI、斯坦福大学或麻省理工学院等知名机构。如果一个模型只能在特定环境下工作,那么它在现实世界中将难以立足。许多研究成果只能在少数数据集上实现,或者需要顶级的硬件支持。为了服务社区,我们应该避免发布那些不具备实用性的成果。它必须能够真正发挥作用。
2. 无法超越物理定律
缓存结构已经固定,网络延迟会影响分布式训练的效率,向量中的信息容量有限。这些都是不可改变的现实。
3. 即使是最复杂的模型也需要合适的参数
虽然研究生或大规模的超参数搜索可以找到一组可以使复杂模型表现良好的参数,但在现实世界中,人们并不会去调试如此庞大的模型。我发现,大多数人在调试超参数方面并不熟练。
4. 理论知识无法替代实践经验
对于那些既不构建也不维护机器学习模型的人来说,有些概念是无法完全理解的。再多的课程、在线教育和实践项目也无法替代实际部署模型、观察用户与模型的互动以及处理各种问题的经历。
5. 将多个问题合并成一个复杂的解决方案通常是不明智的
虽然端到端的学习在理论上听起来不错,但在大多数实际应用中,分阶段优化的管道架构将更为实用。这并不意味着端到端系统毫无价值,但大多数情况下,具有清晰调试路径的设计会更加优越。
6. 逃避问题比解决问题更容易
比如在语音识别中,声学建模是一项挑战,但你可以通过其他方法来间接解决这个问题。在自然语言处理中,语法分析很困难,但在许多情况下,我们可以绕过这个问题。
7. 总有取舍
在速度和内存、电池寿命和准确性、公平性和准确性、易实现性和可维护性等方面,你总要做取舍。
8. 一切比你想象的更复杂
大多数经验丰富的研究人员和工程师都经历过“努力冲击”,即低估了处理大型数据集的工程难题或低估了工作的复杂性。因此,大多数论文可能给人一种任务简单的错觉,但实际上,成功背后是无数次的失败。
9. 你永远准备不足
即使是最成功的模型如果没有充分的规划,也可能因自身的成功而失败。任何远程调用的成功模型都需要仔细的计划。
10. 不可能有一刀切的解决方案
你的模型可能会犯尴尬的错误,尤其是在边缘情况和长尾失败模式下。幸运的是,对于许多非关键的机器学习部署,这并不是大问题。但在医疗保健等领域,部署机器学习可能会成为一个噩梦。
11. 每个旧想法都会以新面貌出现
Schmidhuber的观点是,没有人愿意重复历史上的错误,但我们经常在不经意间重复过去的做法,无论其有效性如何。
12. 完美不是因为没有可以添加的,而是因为没有可以移除的
生活中的一切都是如此,机器学习也不例外。遗憾的是,学术会议往往沉迷于“新颖性”,导致大量无用的研究成果涌现。除非“科学”能够更好地推广有效的方法,而不是追求新奇,否则这种情况不会改变。