Andrej Karpathy:神经网络是“软件2.0”,而非机器学习的一种工具

【新智元导读】深度学习和计算机视觉专家、特斯拉人工智能部门主管Andrej Karpathy最近提出将神经网络视为Software 2.0,而非“机器学习中的一种工具”,讨论了Software 2.0在机器视觉、语音识别、机器翻译等领域逐渐取代“Software 1.0”的应用,以及它的优势和局限。作者认为,Software 2.0的未来是光明的,因为当我们开发通用人工智能时,肯定会写成Software 2.0。

我有时看到人们把神经网络称为“机器学习工具箱中的另一种工具”。神经网络作为一种工具有这样那样的优点和缺点,在这个任务或那个任务工作,有时你可以利用它们赢得Kaggle的比赛。不幸的是,这种解释只见树木,不见树林。神经网络不只是另一种分类器,它们代表了我们编写软件的根本性转变的开始。它们是软件2.0(Software 2.0)。

软件2.0正在越来越多地接管软件1.0的任务

软件1.0(Software 1.0)的“经典堆栈”(classical stack)是我们很熟悉的——它是用Python、C++等语言编写的,它由程序员编写的对计算机的明确指令组成。通过编写每行代码,程序员可以确定程序空间中的某个特定点。

相比之下,Software 2.0 是用神经网络权重编写的。没有人参与这段代码的编写过程,因为权重有很多(典型的网络可能有数百万个权重),并且直接用权重进行编码是很困难的(我尝试过)。相反,我们对一个理想程序的行为指定一些约束(例如,一个样本的输入输出对数据集),并使用可用的计算资源来搜索程序空间中满足约束条件的程序。在神经网络的例子中,我们把搜索限制在程序空间的一个连续的子集,在这个空间中,搜索过程可以利用反向传播和随机梯度下降奏效。

事实证明,在现实世界中,大部分的问题具有收集数据要比明确地编写程序容易得多的性质。未来,大部分程序员不再需要维护复杂的软件库,编写复杂的程序,或者分析程序的运行时间。他们需要收集、整理、操作、标记、分析和可视化提供给神经网络的数据。

Software 2.0不会取代1.0(实际上,需要大量的1.0基础架构来进行训练和推断,以“编译”2.0代码),但是它将会越来越多地接管软件1.0的任务。让我们来看看一些正在进行的一些过渡的例子:

视觉识别:视觉识别过去是由工程特性组成的,有一点机器学习(例如SVM)在里面。后来,我们开发了一个机制来发现更强大的图像分析程序(ConvNet结构体系),并且最近我们已经开始在架构中搜索(参考论文:Large-Scale Evolution of Image Classifiers)。

语音识别:语音识别过去涉及大量的预处理、高斯混合模型和隐马尔可夫模型,但今天几乎完全由神经网络组成。

语音合成:从历史上来看,语音合成一直以来用各种各样的拼接机制来处理,但是现在,最先进的模型是产生原始音频信号输出的大型卷积网络(例如WaveNet)。

机器翻译:机器翻译通常是采用基于短语的统计技术的方法,但神经网络正在迅速成为主导。我最喜欢的架构是在多语言环境中进行训练的(Google's Multilingual Neural Machine Translation System: Enabling Zero-Shot Translation),其中一个模型可以将任何源语言转换为任何目标语言,并且在弱监督(或完全无监督)的环境中进行。

机器人:机器人技术长久以来是将问题分解为感知、姿态估计、规划、控制、不确定性建模等,使用显式表示和算法来进行中间表示。我们还没有完全做到这一点,但UC Berkeley和谷歌最近的一些研究表明,Software 2.0或许能更好地表示所有这些代码。

游戏:围棋程序已经存在了很长一段时间,但AlphaGo Zero(一个观察棋盘的原始状态并决定落子位置的ConvNet)现在已经成为围棋游戏最强大的玩家。我希望我们在其他领域也能看到类似的结果,例如DOTA 2或星际争霸。

你可能注意到我前面提到的许多工作都是谷歌公司做的,这是因为谷歌现在处于将自己的大部分代码重新编写成Software 2.0代码的最前沿。《一个模型解决所有问题》(One model to rule them all)这篇论文提出了一个草图,在这个模型中,单个领域的统计强度被合并为一个对世界的一致理解。

Software 2.0的优势

为什么我们更喜欢将复杂的程序移植到软件2.0中呢?一个简单的答案是它们在实践中表现得更好。但是,还有很多其他的方便的理由让我们选择这个堆栈。让我们来看看Software 2.0(例如,一个 ConvNet)的相比Software1.0(例如,一个生产级的C ++代码库)的好处。

Software 2.0是:

计算均匀的。一个典型的神经网络由一个只有两个操作的层组成:矩阵乘法(matrix multiplication)和在零点的阈值(ReLU)。将其与经典软件的指令集进行比较,后者明显更具有异质性和复杂性。因为你只需为少量的核心计算原语(例如矩阵乘法)提供Software 1.0实现,你可以更容易地进行各种正确性/性能保证。

很容易烧成芯片。作为一个推论,由于神经网络的指令集相对较小,因此更容易实现这些网络,例如使用定制asic,神经形态芯片,等等。当低耗能的智能变得无处不在时,世界就将会改变。例如,小而便宜的芯片可以使用预训练的卷积神经网络、语音识别器和WaveNet语音合成网络,它们都集成在一个小的原脑(protobrain)中,你可以把它连接到任何东西上。

持续的运行时间。典型的神经网络正向传递的每一次迭代都需要完全相同的FLOPS量。基于不同的执行路径,你的代码可能会通过一些庞大的C ++代码库来实现。当然,你可以有动态计算图,但执行流程通常仍然受到很大的限制。这样,我们几乎可以保证永远不会发现自己处于无意的无限循环中。

持续的内存使用。与上一点相关的是,任何地方都没有动态分配的内存,因此交换磁盘的可能性也很小,或者必须在你的代码中搜索的内存泄漏也很少。

它非常便携。与经典的二进制文件或脚本相比,在任意计算配置上运行一个矩阵乘法序列要容易得多。

它非常敏捷。如果你有一个c++代码,有人希望你将速度加快2倍(需要的话,可以付出性能上的代价),这需要为新的规范重新调优系统。但是,在Software 2.0,我们可以在网络中删除一半的通道,重新训练,然后就满足要走了——速度提升2倍,性能降低一点。相反地,如果你碰巧得到了更多的数据/计算资源,你可以通过增加更多的通道和重新训练来让你的程序更好地工作。

模块可以融合为一个最优的整体。我们的软件经常被分解为通过公共功能、api或端点进行通信的模块。但是,如果两个最初被分别训练的Software 2.0模块相互作用,我们可以很容易地在整个过程中进行反向传播。想想看,如果你的web浏览器能够自动重新设计底层系统指令10个堆栈,从而在加载web页面时获得更高的效率,那该多好。对于Software 2.0,这是默认行为。

它很容易掌握。我喜欢开玩笑说,深度学习是浅显的。它不是核物理学,在你可以做任何有用的事情之前,得需要完成一个博士学位。深度学习中,基本的概念需要掌握基本的线性代数、微积分、Python和CS231n的一些课程。当然,随着时间的推移,你可以获得大量的专业知识和直觉,因此,更准确的说法是,Software 2.0堆栈很容易入门,但并不容易掌握。

它比你厉害。最后,也是最重要的一点,在很大一部分有价值的垂直领域中,神经网络比你或我所能编写的代码块更好,目前这至少涉及图像/视频、声音/语音和文本。

Software 2.0的局限

2.0堆栈也有自身的一些缺点。在优化结束后,得到的大型网络运行得很好,但是我们很难知道它是如何运作的。在许多应用领域,我们会面临选择,是使用我们所理解的精确度90%的模型,还是我们不理解的精确度99%的模型。

2.0堆栈可能会以不直观和令人尴尬的方式失败,或者更糟的是,它们可能会“无声地失败”,例如,通过在它们的训练数据中无声地采用偏见,由于训练数据在大多数情况下都非常大,很难正确地进行分析和检查。

最后,我们还发现了这个堆栈的一些特殊属性。例如,对抗样本(adversarial examples)和攻击(attacks)的存在突显了这个堆栈不直观的本质。

Software 2.0的未来是光明的

如果将神经网络看作是一个软件堆栈,而不仅仅是一个很好的分类器,那么很显然,它们拥有大量的优势和很大的潜力来改造软件。

从长远来看, Software 2.0的未来是光明的,因为越来越多的人清楚,当我们开发AGI(通用人工智能)时,肯定会写成Software 2.0。

Software 3.0?那就需要到AGI的时代了。

原文:https://medium.com/@karpathy/software-2-0-a64152b37c35

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2017-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

译文 | 与TensorFlow的第一次接触(一)

本人对一直对高性能网络服务器,分布式存储比较感兴趣,在BAT时也一直从事架构开发,并没有做过机器学习相关工作,平时喜欢阅读分析开源代码,到目前为止已分析完约8套...

3456
来自专栏技术翻译

关于TensorFlow你应该知道的9件事

TensorFlow是一个机器学习框架。如果你有大量的数据或你在人工智能中追求的最先进的东西,那么这个框架可能是你最好的选择:深度学习。

850
来自专栏ATYUN订阅号

告别Python,用神经网络编写的软件走向2.0时代

有时人们把神经网络称为“机器学习工具箱中的另一种工具”。有时你可以用它们来赢得Kaggle的比赛。但是,这种解释完全见木不见林。神经网络不只是另一种分类器,它们...

3785
来自专栏机器之心

业界 | 微软RobustFill:无需编程语言,让神经网络自动生成程序

选自Microsoft Research blog 作者:Rishabh Singh等 参与:李泽南 长久以来,摆脱编程语言的束缚,让计算机自我生成程序一直是开...

3065
来自专栏AI研习社

2018 最新机器学习 API 推荐清单,快给 APP 加点智能

本篇基于 2017 年的推荐清单做了一些改进——去除了一些不再进行维护的 API,并且更新了一些新的 API。主要覆盖如下方向:

1583
来自专栏人工智能头条

如何使用 CNN 推理机在 IoT 设备上实现深度学习

1411
来自专栏IT派

十大你不可忽视的机器学习项目

前言:那些流行的机器学习项目之所以受欢迎,一般是因为其提供了一种多数人需要的服务,或是因为它们是第一个(也许是最好的)针对特定用户提供服务的。那些最流行的项目包...

3618
来自专栏AI科技评论

斩获 ISCA 2018 中国唯一一作论文,清华大学 Thinker 团队提出 AI 计算芯片的存储优化新方法

AI 科技评论按:6 月 2 日至 6 日,第 45 届国际计算机体系结构大会(International Symposium on Computer Arch...

1344
来自专栏ATYUN订阅号

【干货】十大流行AI框架和库的优缺点分析

近年来,由于AI领域的迅猛发展,AI这一词汇已经成为一个流行语。AI曾被称为是一个书呆子和天才的领域,但由于各种库和框架的发展,使更多的人开始了他们的AI之旅。...

4587
来自专栏AI科技评论

这10个小工具 将引爆机器学习DIY潮流

机器学习十大不可忽视项目 前言:那些流行的机器学习项目之所以受欢迎,一般是因为其提供了一种多数人需要的服务,或是因为它们是第一个(也许是最好的)针对特定用户提供...

3417

扫码关注云+社区

领取腾讯云代金券