【外评】简单是优势,但遗憾的是复杂更畅销
我们有时会听说,因为方法过于简单,论文投稿被拒,或者因为工作成果缺乏复杂性,晋升被拒。我想,这可以部分地用 Dijkstra 的名言来解释:
“简单是一种伟大的美德,但需要付出艰辛的努力才能实现,需要接受教育才能领悟。更糟糕的是:复杂的东西卖得更好”。 — Edsger Dijkstra
为什么复杂的更畅销?
复杂意味着努力。论文中艰深的观点和技术细节表明要付出血汗和泪水。组件和功能较多的系统比组件和功能较少的系统需要付出更多的努力。因为复杂的产品被认为需要付出更多的努力,所以它们也被认为更具挑战性,因而更有价值。也正因为人们认为需要付出更多的努力,它们往往被认为是更高质量的产品。
复杂意味着精通。一个复杂的系统有许多活动部件,这表明设计者精通每个部件,并有能力将它们整合在一起。如果论文中充斥着专业术语和证明,则表明设计者具备相关专业知识。(这也是为什么我们在面试时会考查应聘者在工作中很少用到的算法和数据结构)。如果外行很难理解复杂的想法或系统,那么它的创造者一定是专家,对吗?
复杂预示着创新。相对于改造现有网络的论文,发明全新模型架构的论文被认为更有新意。与重复使用现有部件的系统相比,从零开始构建部件的系统被认为更具创造性。只是在现有工作基础上进行构建或重复使用的工作并不具有创新性。
“这个想法太简单了,几乎就像一个小把戏。它只改变了一件事,其他一切都与之前的作品一样”。- 评论者 2
复杂意味着更多的功能。系统中的组件可以混合和匹配,这表明系统具有涵盖所有基础功能的灵活性。例如,同时支持 SQL 和 NoSQL 数据存储,或同时启用批处理和流管道。与简单系统相比,复杂系统拥有更多的 “乐高积木”,因此被认为适应性更强,能够更好地应对变化。
总而言之,上述情况导致了复杂性偏见,即我们过分推崇复杂的想法和系统,而不是简单的想法和系统。
为什么简单是一种优势?
简单的理念和功能更容易理解和使用。这使它们更容易被采纳并产生影响。它们也更容易沟通和获得反馈。相比之下,复杂的系统更难解释和管理,用户很难弄清要做什么和怎么做。因为旋钮太多,所以错误更频繁。因为步骤太多,所以效率低下。
简单的系统更容易构建和扩展。只需较少组件而不是较多组件的系统更容易实施。使用现成的标准技术也更容易找到合格的人员来实施和维护。而且,由于较简单的系统复杂性、代码和系统内交互较少,因此更容易理解和测试。相反,不必要的复杂系统则需要更多的时间和资源来构建,从而导致效率低下和浪费。
当 Instagram 于 2012 年被收购时,它只有一个 13 人的团队,为数千万用户提供服务。它坚持使用成熟的技术,而不是光鲜亮丽的新技术,从而实现了规模扩张,并降低了每位工程师的运营负担。当其他初创公司采用时髦的 NoSQL 数据存储而举步维艰时,Instagram 却采用久经考验、简单易懂的 PostgreSQL 和 Redis 来保持精简。
简单的系统运营成本更低。部署系统不是终点,而是起点。大部分工作都是在系统投入生产后进行的,而且很可能不是由最初的团队来完成。通过保持系统简单,我们可以降低其维护成本并延长其使用寿命。
简单的系统会损坏的活动部件较少,因此更加可靠,也更容易修复。由于系统内的交互作用较少,升级或更换单个组件也更容易。相比之下,复杂的系统则更加脆弱,维护成本也更高,因为有太多的组件需要有限的团队去摸索。相互依赖的部件越多,故障排除也就越困难。
“任何事物越简单,就越不容易紊乱,一旦紊乱就越容易修复”。- 托马斯-潘恩,《常识》,1776 年
具体到机器学习,简单的技术并不一定比复杂的技术性能差。以下是一些并不详尽的例子:
- 基于树的模型 > 45 个中型表格数据集上的深度神经网络
- 在组合图问题上,贪婪算法 > 图神经网络
- 多任务学习问题上的简单平均法 ≥ 复杂优化器
- 32 篇论文中,预测准确率方面简单方法 > 复杂方法
- 点积 > 项目推荐和检索中的神经协同过滤
奖励复杂有什么不好?
它激励人们把事情变得不必要地复杂。使用简单的方法或建立简单的系统可能看起来更容易,因此价值也更低。结果,人们为了获得更多奖励而玩弄系统,最简单的解决方案不再是最明显的解决方案。复杂性会带来更多的复杂性,最终导致无法开展工作。
这也助长了 “不是在这里发明的 “的心态,人们更愿意从头开始构建,而回避重复使用现有的组件,即使这样做可以节省时间和精力。这不仅浪费时间和资源,往往还会导致更糟糕的结果。
遗憾的是,大多数晋升流程都过分强调工作成果的复杂性。
简单的解决方案比复杂的解决方案更容易实现和扩展。然而,晋升往往是奖励那些创造复杂的解决方案。我们需要开始认识到简单的力量。不要接受复杂。这是个陷阱。
提交的机器学习论文也是如此。
ML评论者提出的一个共同点是方法太简单或由现有部分组成。 但简单是一种优势,而不是弱点。 人们更倾向于采用简单的方法,而简单的方法通常也更容易解释和直观。
(如果你的想法没有得到应有的赞誉,那么请相信,卡尔曼滤波器、PageRank、SVM、LSTM、Word2Vec、Dropout 等突破性技术也曾遭到拒绝。我们通常不善于评估创新的实用性或影响力。🤷)
我们应该如何看待复杂?
我们的目标应该是用尽可能简单的方案解决复杂的问题。与其关注解决方案的复杂,不如关注问题的复杂。简单的解决方案表明我们对问题有深刻的洞察力,能够避免更复杂、更昂贵的解决方案。通常,最好的解决方案就是简单的解决方案。
“一切都应尽可能简单,但不能更简单”–爱因斯坦
与其制定一个复杂的、包罗万象的解决方案,不如考虑多个重点突出的解决方案。一刀切 “式的解决方案通常没有预期的灵活和可重用性。而且,由于它服务于多个用例和利益相关者,往往会 “紧密耦合”,在规划和迁移过程中需要更多协调。相比之下,单一用途的系统更容易操作,而且不可避免地会被淘汰。
在我多年的技术领导,后来作为顾问,然后在@godotengine,我相信软件工程师最大的敌人是深刻的和普遍的信念,即问题的一刀切的解决方案(即使是假设的)总是存在的。接受它们并不会带来更好的代码。
果汁值得榨吗?
克服复杂偏见的方法之一是奥卡姆剃刀。它指出,最简单的解决方案或解释通常就是正确的。因此,我们不要急于否定简单的想法,也不要为了证明自己的价值而增加不必要的复杂。
或者,扪心自问:考虑到复杂性的代价,果汁是否值得挤压?
感谢杨心怡和 Swyx 阅读本文草稿。
本文文字及图片出自 Simplicity is An Advantage but Sadly Complexity Sells Better
你也许感兴趣的:
- 具有魔法的 H.264
- 多用户环境中的 rootless Docker
- 【外评】微软的人工智能聊天机器人将 “回忆 “您在其新 PC 上所做的一切
- 【外评】苹果需要解释重新出现已删除照片的错误
- 你需要知道的现代 CSS 技巧(2024 年春季版)
- 使用 :has() 作为 CSS 父选择器及其他更多内容
- 【外评】大科技公司致欧盟:“去死”
- npm又被滥用,灰产用《庆余年2》盗版资源——把开源公共基础设施的羊毛薅秃了
- 【外评】如果您没有在 Edge 中使用必应,微软现在会说您的电脑需要 “修复”
- Chrome 浏览器开发工具(DevTools)现在使用双子座(Gemini )来帮助处理控制台中的 JavaScript 错误
你对本文的反应是: