神经网络不仅仅是另一个分类器,它代表着我们开发软件的 范式开始转移,它是 软件 2.0 。
软件 1.0 人们编写代码,编译后生成可以执行的二进制文件;但在软件 2.0 中人们提供数据和神经网络框架,通过训练将数据编译成二进制的神经网络 。在当今大多数实际应用中,神经网络结构和训练系统日益标准化为一种商品,因此大多数软件 2.0 的开发都由模型设计实施和数据清理标记两部分组成 。这从根本上改变了我们在软件开发迭代上的范式,团队也会因此分成了两个部分: 2.0 程序员 负责模型和数据,而那些 1.0 程序员 则负责维护和迭代运转模型和数据的基础设施、分析工具以及可视化界面 。
Marc Andreessen 的经典文章标题《Why Software Is Eating the World》现在可以改成这样:“软件(1.0)正在吞噬世界,而现在人工智能(2.0)正在吞噬软件!
2.2 软件的演化
软件从 1.0 发展到软件 2.0,经过了一个叫做“数据产品”的中间态 。当顶级软件公司在了解大数据的商业潜力后,并开始使用 Machine Learning 构建数据产品时,这种状态就出现了 。下图来自 Ahmad Mustapha 的一篇文章《The Rise of Software 2.0》很好地呈现了这个过渡 。
配图11:软件产品演化的三种状态
这个中间态也叫 大数据 和 算法推荐 。在现实生活中,这样的产品可以是 Amazon 的商品推荐,它们可以预测客户会感兴趣什么,可以是 Facebook 好友推荐,还可以是 Netflix 电影推荐或 TikTok 的短视频推荐 。还有呢?Waze 的路由算法、Airbnb 背后的排名算法等等,总之琳琅满目 。
数据产品有几个重要特点:1、它们都不是软件的主要功能,通常是为了增加体验,达成更好的用户活跃以及销售目标;2、能够随着数据的增加而进化;3、大部分都是基于传统 ML 实现的,最重要的一点 数据产品是可解释的 。

文章插图
配图12:图解软件 2.0 的代表应用
2.3 软件 2.0 的优势
为什么我们应该倾向于将复杂的程序移植到软件 2.0 中?Andrej Karpathy 在《Software 2.0》中给出了一个简单的答案: 它们在实践中表现得更好!
容易被写入芯片
非常敏捷
敏捷开发意味着灵活高效 。如果你有一段 C++ 代码,有人希望你把它的速度提高一倍,那么你需要系统性的调优甚至是重写 。然而,在软件 2.0 中,我们在网络中删除一半的通道,重新训练,然后就可以了。。它的运行速度正好提升两倍,只是输出更差一些,这就像魔法 。相反,如果你有更多的数据或算力,通过添加更多的通道和再次训练,你的程序就能工作得更好 。
模块可以融合成一个最佳的整体
做过软件开发的同学都知道,程序模块通常利用公共函数、 API 或远程调用来通讯 。然而,如果让两个原本分开训练的软件 2.0 模块进行互动,我们可以很容易地通过整体进行反向传播来实现 。想象一下,如果你的浏览器能够自动整合改进低层次的系统指令,来提升网页加载效率,这将是一件令人惊奇的事情 。但在软件 2.0 中,这是默认行为 。
它做得比你好
最后,也是最重要的一点,神经网络比你能想到的任何有价值的垂直领域的代码都要好,目前至少在图像、视频、声音、语音相关的任何东西上,比你写的代码要好 。
2.4 Bug 2.0
对于传统软件,即软件 1.0,大多数程序都通过源代码保存,这些代码可能少至数千行,多至上亿行 。据说,谷歌的整个代码库大约有 20 亿行代码 。无论代码有多少,传统的软件工程实践表明,使用封装和模块化设计,有助于创建可维护的代码,很容易隔离 Bug 来进行修改 。
【机器之心的进化 / 理解 AI 驱动的软件 2.0 智能革命】但在新的范式中,程序被存储在内存中,作为神经网络架构的权重,程序员编写的代码很少 。软件 2.0 带来了两个新问题: 不可解释和 数据污染 。
因为训练完成的神经网络权重,工程师无法理解(不过现在对理解神经网络的研究有了很多进展,第六章会讲到),所以我们无法知道正确的执行是为什么?错误又是因为什么?这个和大数据算法有很大的不同,虽然大多数的应用只关心结果,无需解释;但对于一些安全敏感的领域,比如 自动驾驶 和 医疗应用,这确实很重要 。
在 2.0 的堆栈中,数据决定了神经网络的连接,所以不正确的数据集和标签,都会 混淆神经网络 。错误的数据可能来自失误、也可能是人为设计,或者是有针对性的投喂混淆数据(这也是人工智能领域中新的 程序道德规范 问题) 。例如 IOS 系统的自动拼写功能被意外的数据训练污染了,我们在输入某些字符的时候就永远得不到正确的结果 。训练模型会认为污染数据是一个重要的修正,一但完成训练部署,这个错误就像病毒一样传播,到达了数百万部 iphone 手机 。所以在这种 2.0 版的 Bug 中,需要对数据以及程序结果进行良好的测试,确保这些边缘案例不会使程序失败 。
推荐阅读
- Windows为啥难以摆脱隔代升级的魔咒?
- 美国国家安全局督促弃用 C/C++,使用更安全的 Rust、C# 等
- 黑客攻击致破产的FTX再损失6亿美元用户资产,安全专家称其大概率是内部人员
- 作为我国首位女性航天员,刘洋当然有报道的价值 我国女航天员刘洋所在机组
- 屈原投江的节日是什么 因为屈原投江才有了端午节
- 全球十大蜜月旅游胜地之一 世界最适合度蜜月的旅游胜地
- 已所不欲,勿施于人的理解和体会 己所不欲勿施于人的理解和体会自己的亲身体会
- 鹿晗|周杰伦鹿晗11月19号晚8点同时开演唱会,你会去谁的直播间?
- 汪小菲|汪小菲说要亲自教女儿学法语,这又是一个不能兑现的诺言
- 王佳颖|山东王佳颖事件,她长相虽不咋样,可是会的花样很多
