Press "Enter" to skip to content

机器学习之深度学习的未来

 

作者 | Francois Chollet

 

鉴于我们对深网的工作原理,局限性以及研究现状的了解,我们能否预测中期的发展方向?这是一些纯粹的个人想法。请注意,我没有水晶球,所以我预期的很多事情都可能无法实现。这是一个完全投机的职位。我之所以分享这些预测,并不是因为我希望它们将来能被证明是完全正确的,而是因为它们在当前很有趣并且可以付诸实践。

 

从高层次来看,我看到希望的主要方向是:

通用计算机程序更接近的模型,是建立在比我们当前的可区分层更丰富的基元之上的,这就是我们将如何推理和抽象的方法,这是当前模型的基本弱点。
使上述一切成为可能的新型学习形式-允许模型脱离可区分的变换。
不需要人工参与的模型-不断调整旋钮不是您的工作。
更好地,系统地重用以前学习的功能和体系结构;基于可重用和模块化程序子例程的元学习系统。

此外,请注意,这些注意事项并非到目前为止一直是深度学习的基础的那种监督学习,而是适用于任何形式的机器学习,包括无监督,自我监督和强化学习。标记的来源或训练循环的样子从根本上来说并不重要;机器学习的这些不同分支只是同一构造的不同方面。

 

模型作为序列模型

 

正如我们在前一篇文章中指出的那样,我们可以期望在机器学习领域进行必要的转型发展,是从执行纯模式识别并且只能实现局部概括的模型转向具有抽象和 推理能力的模型,实现极端概括。当前具有基本推理形式的AI程序都由人类程序员进行硬编码:例如,依赖于搜索算法,图操作,形式逻辑的软件。例如,在DeepMind的AlphaGo中,大多数“智能”都是由专业程序员设计和硬编码的(例如,蒙特卡洛树搜索);从数据中学习仅发生在专门的子模块(价值网络和政策网络)中。但是在将来,这样的AI系统可能会完全被了解,而无需人工参与。

 

 

实现这一目标的途径可能是什幺?考虑一种着名的网络:RNN。重要的是,与前馈网络相比,RNN的限制略少。这是因为RNN不仅仅是几何变换:它们是在for 循环内重复应用的几何变换。暂时的for循环本身是由开发人员进行硬编码的:它是网络的内置假设。自然地,RNN的表示能力仍然受到极大限制,主要是因为它们执行的每个步骤仍然只是可微的几何变换,并且它们从一步到一步传递信息的方式是通过连续几何空间中的点(状态向量)进行的。现在,想象一下以类似的方式通过编程原语(例如for循环)来“增强”神经网络,但不仅仅是for具有硬编码几何内存的单个硬编码循环,而是模型所包含的大量编程原语可以随意操作以扩展其处理功能,例如if分支,while语句,变量创建,用于长期内存的磁盘存储,排序运算符,高级数据结构(如列表,图形和哈希表)等等。这样的网络可以代表的程序空间将比当前深度学习模型所代表的程序要广阔得多,并且其中一些程序可以实现更高的泛化能力。

 

一言以蔽之,我们将摆脱一方面拥有“硬编码算法智能”(手工软件),另一方面不再具有“学习几何智能”(深度学习)的能力。我们将混合使用提供推理和抽象功能的形式化算法模块和提供非正式直觉和模式识别功能的几何模块。整个系统将在几乎没有人参与的情况下学习。

 

我认为AI的一个相关子领域可能会大有作为,它是程序综合领域,尤其是神经程序综合领域。程序合成包括通过使用搜索算法(可能是遗传搜索,如遗传编程)自动生成简单程序,以探索大量可能的程序。当找到符合所需规范的程序时,搜索将停止,该程序通常以一组输入输出对的形式提供。正如您所看到的,它是否使人联想到机器学习:给定输入和输出对提供的“训练数据”,我们找到了一个将输入与输出匹配并可以归纳为新输入的“程序”。不同之处在于,我们生成的不是在硬编码程序(神经网络)中学习参数值通过离散搜索过程获取源代码。

 

我绝对希望这个子领域在未来几年内会引起新的兴趣。特别是,我希望在深度学习和程序合成之间出现一个交叉子域,在该领域中,我们不会以通用语言生成程序,而会在其中生成神经网络(几何数据处理)。流)增加了一组丰富的算法的图元,如for循环等等。与直接生成源代码相比,这应该更容易处理和有用,并且它将大大扩展机器学习可以解决的问题的范围-在给定适当的训练数据的情况下,我们可以自动生成的程序空间。象征性AI和几何AI的融合。当代的RNN可以看作是这种混合算法-几何模型的史前祖先。

 

 

超越反向传播和可微层

 

如果机器学习模型变得更像程序,那幺它们将几乎不再是可区分的—当然,这些程序仍将利用连续的几何层作为子例程,这将是可区分的,但整个模型则不会。结果,使用反向传播来调整固定的硬编码网络中的权重值,将不再是将来训练模型的首选方法,至少,它不可能是全部。我们需要找出有效地训练不可微系统的方法。当前的方法包括遗传算法,“进化策略”,某些强化学习方法和ADMM(乘数的交替方向方法)。自然,梯度下降无处不在-梯度信息对于优化可微分参数函数总是有用的。

 

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

 

可以想象到一个未来,其中将使用不会利用梯度的有效搜索过程来训练(增长)全局不可微(但具有可区分部分)的模型,而可利用优势来更快地训练可区分部分。使用一些更有效的反向传播版本的梯度。

 

自动化机器学习

 

将来,将学习模型架构,而不是由工匠手工制作。使用更丰富的原语集和类似程序的机器学习模型,学习体系结构会自动并驾齐驱。

 

当前,深度学习工程师的大部分工作包括使用Python脚本处理数据,然后冗长地调整深度网络的体系结构和超参数,以获得工作模型,甚至达到最新技术水平模型,如果工程师如此雄心勃勃。不用说,这不是最佳设置。但是人工智能也可以提供帮助。不幸的是,数据处理部分很难自动化,因为它通常需要领域知识以及对工程师想要达到的目标的清晰的高级理解。但是,超参数调整是一个简单的搜索过程,在这种情况下,我们已经知道工程师想要实现的目标:它由要调整的网络的损耗函数来定义。设置基本的“ AutoML”已经是常见的做法 系统将负责大多数模型旋钮的调整。我甚至在几年前就成立了自己的公司以赢得Kaggle比赛。

 

 

在最基本的层次上,这样的系统将简单地调整堆栈中的层数,其顺序以及每一层中的单元或过滤器数。这通常是使用Hyperopt之类的库完成的。但是,我们也可以野心勃勃,并尝试从头开始学习一种尽可能少的约束的适当架构。这可以通过例如强化学习或遗传算法来实现。AutoML的另一个重要方向是与模型权重一起学习模型体系结构。因为每次我们尝试稍有不同的体系结构都从头开始训练新模型时,效率非常低下,所以真正强大的AutoML系统将能够在通过对训练数据进行反向调整来调整模型的功能的同时,对体系结构进行改进,因此消除所有计算冗余。在我撰写这些内容时,这种方法已经开始出现。

 

当这种情况开始发生时,机器学习工程师的工作不会消失,而是工程师将在价值创造链中向更高的方向发展。他们将开始投入更多的精力来构建能够真正反映业务目标的复杂损失函数,并深刻理解其模型如何影响部署它们的数字生态系统(例如,使用模型预测并生成模型训练数据的用户) -目前只有最大的公司可以负担的问题。

 

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

 

如果模型变得更加复杂并且建立在更丰富的算法原语之上,那幺这种增加的复杂性将要求任务之间具有更高的重用性,而不是每当我们有新任务或新数据集时从头开始训练新模型。实际上,很多数据集将包含的信息不足以从头开始开发新的复杂模型,因此有必要利用先前遇到的数据集的信息。就像您每次打开一本新书都不会从头开始学习英语一样,这是不可能的。此外,由于当前任务与先前遇到的任务之间存在大量重叠,因此从头开始对每个新任务进行训练的模型效率非常低下。

 

另外,近年来反复观察到的一个显着发现是,训练 相同的 模型以同时执行多个松散连接的任务会得到一个 在每个任务上更好 的模型。例如,训练相同的神经机器翻译模型以涵盖英语到德语的翻译和法语到意大利语的翻译,将得到一个在每种语言对上都更好的模型。共同训练图像分类模型和图像分割模型,共享相同的卷积基础,得到的模型在两个任务上都更好。等等。这很直观:总 有一些 这些看似脱节的任务之间的信息重叠,因此与仅针对特定任务训练的模型相比,联合模型可以访问有关每个单独任务的更多信息。

 

 

我们目前在跨任务的模型重用过程中所要做的就是利用预训练的权重来执行执行常见功能(如视觉特征提取)的模型。您将在第5章中看到了这一点。在将来,我希望它的通用版本是司空见惯的:我们不仅将利用先前学习的功能(子模型权重),还将利用模型架构和训练过程。随着模型变得更像程序,我们将开始重用 程序子例程 ,例如人类编程语言中的函数和类。

 

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

 

 

总结:长期愿景

 

简而言之,这是我对机器学习的长期愿景:

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

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注