年终盘点 Software 2.0:模型编程的优势与局限

1,404 阅读11分钟

本文是 “2021 年度技术盘点” 系列文章之一,主要介绍Software 2.0 在2021年的重要进展。

“2021年终技术盘点”是掘金推出的重磅企划,涵盖Serverless、Service Mesh、大前端、数据库、人工智能、低代码、边缘计算等众多技术领域。看过去,向未来,回顾IT技术在2021年的发展情况,盘点IT技术的重大事件,展望IT技术的未来趋势。同时,我们将开启第15期技术主题征文活动,一起来聊聊你眼中的2022年技术趋势吧!

Software 2.0并不是一个新的概念,但可能很多人都不了解这个概念。Software 2.0 指的是与传统逻辑不同,依赖数据而不是逻辑进行决策的一种编程方式。通俗一点,就是把一堆规则替换成一个或多个神经网络来进行决策。

Software 2.0:从规则编程迈向模型编程

2017年,特斯拉的人工智能和自动驾驶视觉总监 Andrej Karpathy 在自己的博客 提出了 Software 2.0 这个概念,指出了视觉、语音、机器翻译、游戏甚至数据库领域都在向 Software 2.0 进行转变,并指出了 Software 2.0 的优势:固定运行时间、固定内存占用、可移植、容易固化成硬件、响应快速等等。

如今各种领域都在快速的依靠 NN(Neural Network 神经网络)进行升级迭代,在金融风控、广告推荐等各种领域,信息利用方式正在越来越多地从规则向模型发展。

Google 的一篇论文 The Case for Learned Index Structures表明了,就连数据库索引这种程序员老本行的地方都不如 NN 做得好。其背后的原因是在拥有足够复杂性的系统中,人的主观判断和简单规则是难以直接得出最优解,但基于数据驱动的 NN 却可以依赖梯度下降算法,去寻找一个在统计规律上的最优解。

现实世界是复杂的,很多事情都无法用一个物理公式来精确计算,因此,我们写规则时,拟合的是人在综合了多种复杂信息后的主观判断,想依赖简单规则去精确匹配是非常困难的。比如下面这个例子,想要靠规则去判断车是否过线,可能需要综合车头长度、相机角度、安装高度等信息才能写出一个比较有效的规则,而依靠 NN,我们需要做的只是要让 PM 标注一些图片就能简单的实现。

在 Software 2.0 时代下,任务描述和实现方法会更加解耦,描述的是更加纯粹的数据,而实现方法则是底层神经网络的工作,有望更快更高效的生产软件。

当结果不够好的时候,只需要针对性的再标注一些结果,根据数据集的变化,NN 可以极其快速的调整,这是基于规则可能难以实现的一点。试想一下上面猫咪分类的程序,如果突然说需要把猞猁排除在猫这个分类之外,靠规则是一件相当难的事情。

Software 2.0 时代,作为一个开发者,我们要做好什么准备?

重视神经网络的训练、推理

就像学习前后端就要熟悉浏览器和数据库一样,Software 2.0 时代需要我们熟悉神经网络的特点。

随着代码仓库中 NN 越来越多,围绕着 NN 会有一系列的问题出现,而这也刚好是我们 MegEngine 团队一直在努力地各方各面

  • 如何快速的描述一个由 NN 组成的处理逻辑:MegFlow>流式处理框架

需要习惯以数据集为中心的开发模式:

以上面猫咪分类为例子,在 Software 2.0 中,数据集扮演了一个非常重要的角色:

  • 数据集的数据分布精确代表了产品需求
  • 数据集代表了QA测试样例

我们可能不再需要繁杂的 PRD 去描述一个功能的细节,通过一批数据足以说明功能边界在哪里,无需反复沟通;同时,一项功能的 QA 结果不再是简单的“通过”或“不通过”,而是会变成一个精度百分比,某一个 case 没通过不代表验收不合格。

一方面数据集怎么采集、标注、管理会是一个越来越凸显的问题,另一方面 PM + Dev + QA 的传统开发方式有可能会受到很大挑战:

  • PM 最关心的指标可能会成为 精度 / 召回率,如何平衡这两个指标是重要的产品决策
  • Dev 可能会变成数据标注员
  • QA 可能会变成算法精度评测系统的开发者

图片转自 wiki 页面

不追求绝对正确的“安全感”,接受概率性的结果

NN 的输出结果往往不是一个绝对值,而是一个置信度(比如以 80% 的概率确信这是一只猫),相应的测试结果也是一个比例:算法在数据集上正确率是 90%,召回率是 70%(找出来的猫90%真的是猫,只找出来了所有猫里面的 70%)。

NN 解释不清的行为,让大家觉得它更加像一种“直觉”、“第六感”,当我们需要依赖于这样的结果去做决策的时候,会感受到巨大的不安全感,认为这个系统难以被信任。人类几乎是理所应当的相信规则,可预测的行为会给人们带来更多的安全感。

然而即便是人、规则也有可能会出错,而 NN 的输出从统计学上一般是更优的。30 年前的人们可能只相信现金不相信电子账户;20年前的人们不相信量化基金而相信自己一把梭炒股;这些如今已经成为了一种再正常不过的行为。在可靠性提升的同时,人们在这些系统上做了对各种异常情况的处理,从而给人制造了充分的“安全感”。

我们不应该过分纠结在概率输出是否可信,而是应该积极地基于概率性输出设计决策的逻辑,通过设计相应机制来应对甚至更充分的利用上这种能提供置信度的系统行为。比如:

  • 遇到低置信度输出触发主动行为:当风控系统觉得判断的置信度比较低时,不是直接根据结果拒绝或通过,而是主动触发一些验证身份的手段来进一步确认
  • 基于常识,尽早过滤掉模型的极端异常输出,避免模型数据分布偏差问题:客梯里的电动车检测模型同时检测到 10 辆以上一定不太对(电梯里装不下)、车辆压线模型每天都在报警说有车压线也不太对
  • 避免模型错误结果循环累积:假想一个利用模型做数据聚类的场景,每次循环都依靠模型判断是否要把两堆数据聚合成一个。如果在不断地循环过程中不做任何处理,那模型偶然的错误聚合会导致越来越多的数据点被吸在一起。通过加入一些负反馈,可以避免偶然的错误被不断地放大。

Software 2.0 这么好,基于规则的编程会消失么?

在以下的几个场景下,基于规则的编程还是一个更友好的选择:

  • 有明确物理规律的情况

物理学定律是人类智慧结晶,能用简单物理学规律描述的问题,规则仍然是更友好的选择。我相信你不会想重新用一堆标注数据去计算圆的面积与半径的关系的。不过也有例外,NN也正在逐步替代很多缓慢的物理学模拟过程。

  • 对可解释性有极强诉求的行业

社会存在一些更愿意接受可解释的但概率上不是最优的结果的行业,比如医学,在这些领域Software 2.0暂时还难以应用,毕竟大家都希望能够以自己的逻辑作为最终的决策,而不希望把命交给一个纯黑盒。

  • 极早期的系统,或极其缺乏数据的行业(又称模型冷启动问题)

算法在很多领域要做到高精度还依赖大数据,有些场景天生数据稀缺(例如罕见故障检测),一方面依赖更多的 pretrain model + few-shot learning技术的发展,另一方面规则有更大的发挥空间。大多数项目的状态都是先靠规则快速迭代,再 NN 化精细调优。

  • 极致低成本的硬件

一块 MCU 的价格是几块人民币,而能跑 NN 的 NPU却需要几百人民币。现阶段算力还不够普及,极致低成本的情况下还是规则完胜。

Software 2.0 未来发展有哪些趋势?

  • 大幅度改进数据集的储存和管理手段

数据集会在丰富程度、数据规模和使用频率上快速提升,那么,怎么储存和管理这种比代码、文档大得多的资料,就成为一个新的课题,而这可能会催生一批新的工具和企业。

  • 进一步降低算法生产门槛

算法生产本身的门槛和成本还是比较高,算法生产人员的培养成本很高,数量还远不及传统程序员。谁能降低算法生产的成本,谁就能获得显著高的开发效率优势。

  • 更加注重社会公平性

NN 是基于统计的决策方式,输出的结果直接就反映了数据上的规律,对数据量少的会有天生的“歧视”。比如市面上老年人指纹数据肯定比年轻人少,靠 NN 可能会造成“老人刷指纹刷不准”这个问题;残疾人的数据少,可能会导致算法认不出来需要给坐轮椅的残疾人开门。我们需要在开发过程中意识到这个问题,并主动的调整数据集中的数据比例,而非简单的遵循什么数据多用什么的逻辑。

  • 在线学习、在线 QA可能会成为常态

NN 对数据的需求是无休止的,只要有更符合场景的数据,就有可能会提升效果。使用场景本身就是最理想的数据来源,依靠一个在线学习系统,就可能直接能够利用现场数据,算法有可能越用越准,而且完全不会有任何隐私方面的问题。这打破了一个软件行为相对固定的边界,对于 QA 如何去验证一个系统的正确性将会是一个巨大的挑战,但是我相信精度上的巨大收益会促使这个方面的快速发展。

作者介绍:

许欣然,MegEngine 开源框架负责人,致力于加快深度学习产品落地效率。2015 年加入旷视,曾负责大规模 AI 集群管理系统 Brain++ 、百亿级别特征检索系统 - Feature Store,构建了旷视一系列基础架构系统。

MegEngine 掘金账号: MegEngine

相关链接:

年终盘点Serverless:工业、学术、社区遍地开花,国内厂商迅速卡位

年终盘点Kubernetes生态:大版本“内卷”,安全性值得重视

年终盘点大前端:前端进入深水区,面向开发者的低代码持续升温

年终盘点服务网格:实用当先,生态为本

年终盘点 Rust 生态版图 | 星辰大海(上篇)

年终盘点 Rust 生态版图 | 星辰大海(下篇)

年度盘点数据库:从上云到云原生