Andrej Karpathy:神经网络是“软件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的时代了。

原文发布时间为:2017-11-12

本文作者:Andrej Karpathy

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

时间: 2024-10-31 20:14:44

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

Doing well in your courses ---- a guide by Andrej Karpathy

  Doing well in your courses   a guide by Andrej Karpathy   Here is some advice I would give to younger students if they wish to do well in their undergraduate courses. Having been tested for many years of my life (with pretty good results), here are

火绒完成 Pre-A 轮融资 将推“火绒企业安全软件1.0版”

火绒成立于 2011 年,专注在 PC 安全领域.此前,在与雷锋网(公众号:雷锋网)的交流中,火绒相关人士曾直接表示,不畏惧目前市场上已有的360.腾讯管家等强大对手,要正面刚.目前,火绒拥有新一代反病毒引擎等多项核心技术,倡导"情报驱动安全"理念.天融信.深信服.绿盟以及联想已和火绒展开技术合作,在相关产品中使用火绒的引擎和功能模块. 火绒在 2012 年发布了一款免费个人电脑安全软件"火绒安全软件",其正在组建销售团队,即将推出企业级产品"火绒企业安全

趋势科技推出中小企业安全无忧软件9.0

近日,全球虚拟化及云计算安全领导厂商趋势科技宣布,正式推出中小企业安全无忧软件9.0(Worry-Free Business Security,简称WFBS 9.0).WFBS 9.0是专为小型企业及中小型企业量身定制的一体化安全解决方案,全新版本的WFBS 9.0包括网络安全版.邮件与网络安全版.云端版,通过移动设备安全支持.高级URL过滤检测.防网络钓鱼.防木马蠕虫.防间谍软件.防数据泄露.U盘智能防毒.上网行为监控.病毒爆发阻止策略等一系列高级防御手段,协助中小企业用户应对总部和分支机构网

Android安全形势严峻 诺顿手机软件2.0版推出

9月9日消息,赛门铁克诺顿日前正式发布Adroid平台的手机安全软件2.0版本.这一软件将通过国内主要的IT零售商和电信运营商进行发售. 诺顿手机软件2.0版推出 随着智能手机.平板电脑等的日益普及,这些移动设备的安全也受到用户的高度关注.来自IDC的数据资料显示,全球智能手机的出货量在2010年第四季度已经超过1亿台.根据统计,在中国,安卓(Android)操作系统占据市场占有率第一,达到40.5%.而安卓平台的开放性使其成为众多手机和平板电脑厂商首选的操作系统,因此其增长速度迅猛.据称,目前

卡巴斯基发布手机安全软件8.0

9日消息,俄罗斯安全厂商卡巴斯基在京发布了其最新的手机安全软件产品,版本号为8.0.这是自其推出手机安全软件以来,第三次重大的产品升级. 据悉,随着中国正式进入3G时代,视频通话.手机高速上网.移动电视.大容量下载等等应用得以实现.然而随着3G应用的高速发展,以往困扰电脑用户的问题也会影响3G用户.在3G时代,原本功能相对单一的手机将会被赋予更多的功能,手机钱包.手机证券.手机网游等依托智能手机和3G网络的功能应用,将会发展成为日常生活中的重要组成部分.这些"肥肉"会让犯罪分子以及黑客

卡巴斯基手机安全软件8.0全新上市

随着中国移动.中国联通.中国电信三大运营商获发3G牌照,中国的3G时代正式起航.而当3G逐渐把很多以前只能在电脑里做的事儿搬到手机上,把手机变得更像电脑,以往困扰电脑用户的问题也会影响3G用户,这其中最令人担忧的莫过于安全问题. 3G的发展不仅会带动移动互联网市场以及智能手机市场的高速发展,还会"带动"手机恶意软件"制造业"的发展.现实生活中有关手机病毒.垃圾信息和电话以及隐私窃取的案例已经屡见不鲜,且类似的"手机门"事件颇有愈演愈烈的趋势. 6

Rescatux 0.30 beta 6发布 光盘修复工具

Rescatux 是一个GNU/Linux的光盘修复工具,其配备的Rescapp提供了向导程序来引导任务的修复.它可以复原Grub到MBR更新的一个grub配置,执行文件系统的检查,修复Windows MBR,等等.它能够间接协助程序修复,包括聊天程序的联机帮助,共享日志(自动引擎收录)使用适当的格式张贴在论坛上. Rescatux 0.30 beta 6该版本已添加两个新选项:更改GNU/Linux密码和再生sudoers文件.第一个可以让你改变你的密码,第二个让你重新生成sudoers文件,

如何实现IIS 7.0对非HTTP协议的支持

在<再谈IIS与ASP.NET管道>介绍各种版本的IIS的设计时,我们谈到IIS 7.0因引入WAS提供了对非HTTP协议的支持.这个对于WCF的服务寄宿来说意义重大,它意味着我们通过IIS/WAS寄宿的服务终结点不仅仅可以采用BasicHttpBinding.WSHttpBinding/WS2007HttpBinding等基于HTTP协议的绑定,也可以采用NetTcpBinding.NetNamedPipeBinding和NetMsmqBinding. 在默认的情况下,IIS 7.0针对非H

VB6.0中For语句的两种用法,如何用第二种用法遍历一个数组?

问题描述 VB6.0中For语句的两种用法,如何用第二种用法遍历一个数组? VB6.0中For语句的两种用法,如何用第二种用法遍历一个数组? 解决方案 正序 for i = lbound(arr) to ubound(arr) arr(i) next 逆序 for i = ubound(arr) to lbound(arr) step -1 arr(i) next 解决方案二: 一个加密解密函数 for vb6.0!VB6.0中的编译预处理--#IF语句