前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习的未来

深度学习的未来

作者头像
anthlu
修改2018-02-08 13:06:58
6870
修改2018-02-08 13:06:58
举报
文章被收录于专栏:AI

2017年7月18日星期二 由弗朗索瓦Chollet 论文中

这篇文章是根据我的书“ 深度学习与Python(Manning出版)”第9章第3节改编的。

这是关于当前深度学习的局限性及其未来的系列两个文章中的一部分。您可以在这里阅读第一部分:深度学习的局限性

鉴于我们所知道的深度网络的工作,局限性以及当前的研究状况,我们能否预测在中期内事情将会走向何方?这是一些纯粹的个人想法。请注意,我没有一个水晶球,所以我预期的很多可能不会成为现实。这是一个完全投机的帖子。我分享这些预测并不是因为我期待他们在将来被证明是完全正确的,而是因为他们在现在是有趣和可操作的。

在高层,我看到的主要方向是:

  • 模型更接近通用计算机程序,建立在比我们当前可区分层更丰富的基元之上 - 这就是我们将如何推理抽象的,这是当前模型的根本弱点。
  • 使上述可能的新形式的学习 - 允许模型从可微差的变换中移走。
  • 那些需要较少人力工程师参与的模型 - 不应该无休止地调整旋钮。
  • 对以前学过的功能和体系结构进行更加系统的重用; 基于可重用和模块化程序子程序的元学习系统。

此外,请注意,这些考虑并不特定于迄今为止的深度学习的基本监督式学习 - 相反,它们适用于任何形式的机器学习,包括无监督,自我监督和强化学习。如果你的标签来自你的训练循环,这不重要,机器学习的这些不同分支只是同一构造的不同方面。

让我们深入。

模型即程序

正如我们在之前的文章中所指出的那样,我们在机器学习领域可以预期的一个必要的转型发展是从执行纯粹的模式识别模型与只能实现局部泛化的模型转向能够抽象和推理的模型,达到极端的泛化。当前的AI程序能够执行基本的推理形式都是由人类程序员硬编码的,例如依靠搜索算法,图形操作,形式逻辑的软件。例如,在DeepMind的AlphaGo中,大部分展示中的“智能”都是由专家程序员设计和硬编码的(例如蒙特卡洛树搜索)。从数据中学习只发生在专门的子模块(价值网络和策略网络)中。但是在将来,这样的人工智能系统很可能会完全学习,而不需要人工干预。

有什么办法可以做到这一点?考虑一个众所周知的网络类型:RNN。重要的是,RNN比前馈网络的限制略少。这是因为RNN不仅仅是一种几何变换:它们是for循环内重复应用的几何变换。现存的for循环本身就是由开发人员硬编码的:这是网络的一个内置假设。自然地,RNN在它们可以表示的东西方面仍然是非常有限的,主要是因为它们执行的每个步骤仍然是一个可区分的几何变换,它们从一步到另一步地传递信息的方式是通过连续几何空间(状态向量)中的点。现在,设想一下神经网络,它将以类似的方式用编程基元(比如for循环)来“增强”,而不仅仅是for一个硬编码的几何存储器的硬编码循环,而是一大组编程基元可以自由操作来扩展其处理功能,如if分支机构,while语句,变量创建,用于长期记忆的磁盘存储,排序操作符,高级数据结构(如列表,图形和散列表)等等。这样的网络可以代表的计划空间将远远大于当前的深度学习模式所代表的范围,其中一些程序可以实现更好的泛化能力。

总而言之,我们将远离“硬编码算法智能”(手工软件),另一方面“学习几何智能”(深度学习)。我们将拥有提供推理和抽象能力的正式算法模块和提供非正式直觉和模式识别功能的几何模块。整个系统只需很少的或几乎没有人工参与就可以学到。

我认为AI的一个相关子领域可能即将兴起,那就是程序合成,特别是神经程序的合成。程序合成包括通过使用搜索算法(如在遗传编程中的可能遗传搜索)来自动生成简单程序,以探索可能程序的大量空间。当找到符合要求规格的程序时,搜索停止,通常作为一组输入-输出对提供。正如你所看到的那样,是否让人想起机器学习:给出作为输入 - 输出对提供的“训练数据”,我们找到了一个将输入与输出相匹配的“程序”,并且可以一般化到新的输入。不同的是,我们不是在硬编码程序(神经网络)中学习参数值而是通过离散搜索过程生成源代码

我很期待在未来几年里会看到这个子领域有一波新的兴趣。特别是我期望在深度学习和程序综合之间出现一个交叉子领域,我们不会用通用语言来生成程序,而是在那里生成神经网络(几何数据处理流),增加了一套丰富的算法原语,如for循环等等。这应该比直接生成源代码更加容易处理和有用,它将大大扩展机器学习可以解决的问题的范围 - 我们可以根据适当的训练数据自动生成的程序空间。符号AI和几何AI的融合。当代RNN可以被看作是这种混合算法几何模型的史前祖先。

图: 依靠几何图元(模式识别,直觉)和算法原语(推理,搜索,记忆)的学习程序。
图: 依靠几何图元(模式识别,直觉)和算法原语(推理,搜索,记忆)的学习程序。

反向传播和可微层以外

如果机器学习模型变得更像程序,那么它们大多不再是可区分的 - 当然,这些程序仍然会将连续的几何图层作为子程序来使用,这是可以区分的,但是整个模型是不可能的。因此,固定地,硬编码的网络中使用反向传播来调整权重值不能成为未来培训模型的选择方法 - 至少,这不可能是整个故事。我们需要找出有效地训练非微分系统。目前的方法包括遗传算法,“进化策略”,某些强化学习方法和ADMM(交替方向乘子算法)。自然地,梯度下降不会在任何地方进行 - 梯度信息对于优化可微参数函数总是有用的。但是,我们的模型肯定会变得比单纯的可微参数函数更加有野心,因此他们的自动开发(“机器学习”中的“学习”)将需要更多的反向传播。

此外,反向传播是端到端的,这对于学习良好的链式转换是一件好事,但是由于没有充分利用深度网络的模块性,在计算上效率相当低。为了提高效率,有一个通用的方法:引入模块化和层次结构。所以我们可以通过引入解耦的训练模块以及它们之间的一些同步机制,以分层的方式进行组织,从而使反向传播本身更加高效。这个策略在DeepMind最近的“合成梯度”工作中有所体现。我希望在不久的将来能有更多这方面的工作。

人们可以想象一个未来,模型将是全局不可区分的(但将具有可区分性的部分)将通过有效的搜索过程进行训练 - 增长 - 不会利用梯度,而可区分的部分则通过利用渐变使用一些更有效的反向传播版本使训练更快。

自动机器学习

将来,模型架构将被学习,而不是由工程师手工制作。学习架构自动地与使用更丰富的基元和类似程序的机器学习模型一起使用。

目前,深度学习工程师的大部分工作都是使用Python脚本来整理数据,然后长时间调整深层网络的体系结构和超参数以获得工作模型 - 甚至是获得最先进的技术模型,如果工程师如此雄心勃勃。不用说,这不是一个最佳的设置。但是AI也可以在那里帮忙。不幸的是,数据管理部分很难实现自动化,因为它通常需要领域知识以及对工程师想要实现什么的清晰的高层次的理解。然而,超参数调整是一个简单的搜索过程,我们已经知道工程师想要在这种情况下实现什么:它是由正在调试的网络的损失函数定义的。建立基本的“AutoML” 系统,将负责大部分模型旋钮调整。我甚至在几年前就设立了自己的比赛来赢得Kaggle比赛。

在最基本的层面上,这样一个系统将简单地调整堆栈中的层数,它们的顺序以及每一层中单元或过滤器的数量。这通常是在Hyperopt这样的库中完成的,我们在第七章(注:深度学习与Python)中讨论过。但是我们也可以更加雄心勃勃,试图从零开始学习一个合适的架构,尽可能少的限制。例如,这可以通过强化学习或遗传算法来实现。

另一个重要的AutoML方向是与模型权重一起学习模型架构。因为每次我们尝试一个稍微不同的体系结构时,从头开始训练一个新模型的效率非常低,所以一个真正强大的AutoML系统将会在模型的特性通过训练数据反向调整的同时进行体系结构的演变,消除了所有的计算冗余。这些方法已经开始出现,所以我在写这些文字。

当这一切开始发生时,机器学习工程师的工作不会消失,相反,工程师将会在价值创造链上走得更高。他们将开始投入更多的精力来设计真正反映业务目标的复杂损失函数,深入理解他们的模型如何影响他们部署的数字生态系统(例如,使用模型预测并生成模型的培训数据的用户)目前只有最大的公司才能考虑的问题。

终身学习和模块化子程序重用

如果模型变得越来越复杂,并建立在更丰富的算法基元之上,那么这种增加的复杂性将需要在任务之间更高的重用,而不是每当我们有新的任务或新的数据集时从头开始训练新的模型。事实上,许多数据集不能包含足够的信息来从头开发一个新的复杂模型,并且有必要利用来自先前遇到的数据集的信息。就像你每次打开一本新书都不要从头学习英语一样 - 这是不可能的。另外,由于当前任务和以前遇到的任务之间的重叠很大,所以从头开始对每个新任务进行模型训练是非常低效的。

另外,近年来反复出现的一个显着的观察结果是,训练同一个模型同时进行几个松散连接的任务会产生一个更好的模型。例如,训练一个同样的神经机器翻译模型来涵盖英语到德语的翻译和法语到意大利语的翻译将导致在每个语言对中更好的模型。与图像分割模型一起训练图像分类模型,共享相同的卷积基础,得到两个任务都更好的模型。等等。这很直观:总是有一些 这些表面上不连贯的任务之间的信息重叠,因此联合模型可以获得关于每个单独任务的大量信息,而不仅仅是关于那个特定任务的训练模型。

我们目前沿着跨任务的模型重用的方向做的事情是利用预先训练的权重来执行常见功能的模型,如视觉特征提取。在第五章中我们已经看到了这一点。将来,我会期望这个概括的版本是司空见惯的:我们不仅会利用以前学过的特性(子模型权重),还会模型架构和训练过程。随着模型越来越像程序,我们将开始重用程序子程序,比如人类编程语言中的函数和类。

想一下当今软件开发的过程:一旦工程师解决了一个特定的问题(例如Python中的HTTP查询),他们将把它打包成一个抽象的可重用的库。未来面临类似问题的工程师可以简单地搜索现有的库,下载并在自己的项目中使用它。以类似的方式,将来,元学习系统将能够通过筛选高级可重用块的全局库来组装新的程序。当系统会发现自己为几个不同的任务开发相似的程序子程序时,如果想出一个“抽象的”,可重用的子程序版本,并将其存储在全局库中。这样的过程将实现抽象的能力,这是实现“极端泛化”的必要组成部分:一个被发现在不同任务和领域中有用的子程序可以被称为“抽象”解决问题的某个方面。这个“抽象”的定义类似于软件工程中的抽象概念。这些子程序可以是几何(具有预先训练的表示的深度学习模块)或算法(更接近当代软件工程师操作的库)。

图: 元学习者能够使用可重用基元(算法和几何)快速开发任务特定模型,从而实现“极端泛化”。
图: 元学习者能够使用可重用基元(算法和几何)快速开发任务特定模型,从而实现“极端泛化”。

总结:长远愿景

总之,这是我对机器学习的长远愿景:

  • 模型将更像程序,并且将具有远远超出我们目前使用的输入数据的连续几何变换的能力。这些程序可以说更接近于人类对周围环境和自身的抽象心理模型,由于其丰富的算法性,它们将具有更强的泛化能力。
  • 特别是,模型将混合提供正式的推理,搜索和抽象能力的算法模块几何模块 提供非正式的直觉和模式识别能力。AlphaGo(一个需要大量手动软件工程和人为设计决策的系统)提供了一个早期的例子,说明符号和几何AI之间的这种混合是什么样的。
  • 它们将自动增长,而不是由人类工程师手工制作,使用存储在全球可重用子程序库中的模块化部件 - 通过学习数以千计的先前任务和数据集的高性能模型演变而来的库。由于元学习系统确定了常见的问题解决模式,所以它们将变成一个可重用的子程序,就像当代软件工程中的函数和类一样,并被添加到全局库中。这实现了抽象的能力。
  • 这个全局库和相关的模型增长系统将能够实现某种形式的人类“极端泛化”:在新的任务,新的情况下,系统将能够使用非常少的数据组装一个适合于任务的新的工作模型,这要归功于1)丰富的类似程序的原始语言,以及2)具有类似任务的丰富经验。就像人类可以用很少的游戏时间就可以学会玩一个复杂的新的视频游戏一样,因为他们有许多以前的游戏的经验,并且因为从以前的经验中得到的模型是抽象的和类似于程序的,而不是基本的映射刺激和行动之间。
  • 因此,这种永久学习模式增长系统可以被解释为一个人工智能。但不要指望任何奇异的机器人启示:这是一个纯粹的幻想,来自对智力和技术的一系列深刻的误解。然而,这个批评不属于这里。

@fchollet,2017年5月

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模型即程序
  • 反向传播和可微层以外
  • 自动机器学习
  • 终身学习和模块化子程序重用
  • 总结:长远愿景
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档