作者 | Francois Chollet
编译 | CDA数据分析师
The future of deep learning
鉴于我们对深网的工作原理,局限性以及研究现状的了解,我们能否预测中期的发展方向?这是一些纯粹的个人想法。请注意,我没有水晶球,所以我预期的很多事情都可能无法实现。这是一个完全投机的职位。我之所以分享这些预测,并不是因为我希望它们将来能被证明是完全正确的,而是因为它们在当前很有趣并且可以付诸实践。
从高层次来看,我看到希望的主要方向是:
此外,请注意,这些注意事项并非到目前为止一直是深度学习的基础的那种监督学习,而是适用于任何形式的机器学习,包括无监督,自我监督和强化学习。标记的来源或训练循环的样子从根本上来说并不重要;机器学习的这些不同分支只是同一构造的不同方面。
模型作为序列模型
正如我们在前一篇文章中指出的那样,我们可以期望在机器学习领域进行必要的转型发展,是从执行纯模式识别并且只能实现局部概括的模型转向具有抽象和 推理能力的模型,实现极端概括。当前具有基本推理形式的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查询),他们就会将其打包为一个抽象且可重用的库。将来面临类似问题的工程师可以简单地搜索现有库,下载一个库并在自己的项目中使用它。以类似的方式,将来,元学习系统将能够通过在高级可重用块的全局库中筛选来组装新程序。当系统发现自己正在为几种不同的任务开发类似的程序子例程时,如果会想出该子例程的“抽象”可重用版本并将其存储在全局库中。这样的过程将实现抽象能力,是实现“极端泛化”的必要组件:可以说子例程在不同的任务和领域中都有用,可以说它“抽象”了解决问题的某些方面。“抽象”的定义类似于软件工程中的抽象概念。这些子例程可以是几何的(具有预训练表示形式的深度学习模块),也可以是算法的(更接近于当代软件工程师操作的库)。
简而言之,这是我对机器学习的长期愿景:
数据分析咨询请扫描二维码
《Python数据分析极简入门》 第2节 5 Pandas数学计算 importpandasaspdd=np.array([[81,&n ...
2024-11-23数据分析涉及多个方面的学习,包括理论知识和实践技能。以下是数据分析需要学习的主要方面: 基础知识: 数据分析的基本概念 ...
2024-11-22数据分析适合在多个单位工作,包括但不限于以下领域: 金融行业:金融行业对数据分析人才的需求非常大,数据分析师可以从事经 ...
2024-11-22数据分析是一种涉及从大量数据中提取有用信息和洞察力的过程。其工作内容主要包括以下几个方面: 数据收集与整理:数据分析师 ...
2024-11-22数据分析师需要掌握多种技能,以确保能够有效地处理和分析数据,并为业务决策提供支持。以下是数据分析师需要掌握的主要技能: ...
2024-11-22数据开发和数据分析是两个密切相关但又有所区别的领域。以下是它们的主要区别: 定义和目标: 数据开发:数据开发涉及数据的 ...
2024-11-22数据架构师是负责设计和管理企业数据架构的关键角色,其职责涵盖了多个方面,包括数据治理、数据模型设计、数据仓库构建、数据安 ...
2024-11-22数据分析师需要具备一系列技能,以确保能够有效地处理、分析和解释数据,从而支持决策制定。以下是数据分析师所需的关键技能: ...
2024-11-22数据分析师需要具备一系列技能,以确保能够有效地处理、分析和解释数据,从而支持决策制定。以下是数据分析师所需的关键技能: ...
2024-11-22数据分析师需要具备一系列的技能和能力,以确保能够有效地处理、分析和解释数据,从而支持业务决策。以下是数据分析师所需的主要 ...
2024-11-22需求持续增长 - 未来数据分析师需求将持续上升,企业对数据驱动决策的依赖加深。 - 预测到2025年,中国将需要高达220万的数据人 ...
2024-11-22《Python数据分析极简入门》 第2节 4 Pandas条件查询 在pandas中,可以使用条件筛选来选择满足特定条件的数据 importpanda ...
2024-11-22数据分析师的工作内容涉及多个方面,主要包括数据的收集、整理、分析和可视化,以支持商业决策和问题解决。以下是数据分析师的一 ...
2024-11-21数据分析师必须掌握的技能可以从多个方面进行归纳和总结。以下是数据分析师需要具备的主要技能: 统计学基础:数据分析师需要 ...
2024-11-21数据分析入门的难易程度因人而异,总体来看,入门并不算特别困难,但需要一定的学习和实践积累。 入门难度:数据分析入门相对 ...
2024-11-21数据分析是一项通过收集、整理和解释数据来发现有用信息的过程,它在现代社会中具有广泛的应用和重要性。数据分析能够帮助人们更 ...
2024-11-21数据分析行业正在迅速发展,随着技术的不断进步和数据量的爆炸式增长,企业对数据分析人才的需求也与日俱增。本文将探讨数据分析 ...
2024-11-21数据分析的常用方法包括多种技术,每种方法都有其特定的应用场景和优势。以下是几种常见的数据分析方法: 对比分析法:通过比 ...
2024-11-21企业数字化转型是指企业利用数字技术对其业务进行改造和升级,以实现提高效率、降低成本、创新业务模式等目标的过程。这一过程不 ...
2024-11-21数据分析作为一个备受追捧的职业领域,吸引着越来越多的女性加入其中。对于女生而言,在选择成为一名数据分析师时,行业选择至关 ...
2024-11-21