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

2017 年 11 月 13 日 炼数成金订阅号 Karpathy

我有时看到人们把神经网络称为“机器学习工具箱中的另一种工具”。神经网络作为一种工具有这样那样的优点和缺点,在这个任务或那个任务工作,有时你可以利用它们赢得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


文章来源:新智元

《机器读心术之神经网络与深度学习》课程通过学习熟悉神经网络技术和深度学习,懂得怎样运用到自己的实际工作,设计有一定规模的学习系统,智能化地解决某些场景的实际问题。 点击下方二维码报名课程



登录查看更多
1

相关内容

机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
【干货】谷歌Joshua Gordon 《TensorFlow 2.0讲解》,63页PPT
专知会员服务
27+阅读 · 2019年11月2日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
39+阅读 · 2019年10月9日
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
TensorFlow 2.0深度强化学习指南
云栖社区
18+阅读 · 2019年2月1日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
【机器学习】机器学习工业领域应用
产业智能官
10+阅读 · 2018年10月23日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
机器学习必知的8大神经网络架构
七月在线实验室
7+阅读 · 2018年4月26日
开源神经网络框架Caffe2全介绍
北京思腾合力科技有限公司
3+阅读 · 2017年12月12日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
A General and Adaptive Robust Loss Function
Arxiv
8+阅读 · 2018年11月5日
Arxiv
5+阅读 · 2018年10月23日
Arxiv
3+阅读 · 2018年5月28日
VIP会员
相关资讯
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
TensorFlow 2.0深度强化学习指南
云栖社区
18+阅读 · 2019年2月1日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
【机器学习】机器学习工业领域应用
产业智能官
10+阅读 · 2018年10月23日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
机器学习必知的8大神经网络架构
七月在线实验室
7+阅读 · 2018年4月26日
开源神经网络框架Caffe2全介绍
北京思腾合力科技有限公司
3+阅读 · 2017年12月12日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
Top
微信扫码咨询专知VIP会员