前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Andrej Karpathy:神经网络是“软件2.0”,而非机器学习的一种工具

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

作者头像
新智元
发布2018-03-21 14:32:47
1K0
发布2018-03-21 14:32:47
举报
文章被收录于专栏:新智元

【新智元导读】深度学习和计算机视觉专家、特斯拉人工智能部门主管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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新智元 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档