Dario's Big Blog of Compute Hypothesis

BBOC:核心假说与七个关键因素

大计算团块(Big Blob of Compute,BBOC)假说是一种基于经验的观点,讨论智能如何涌现。它认为,产生某种特定的智能行为,很大程度上取决于两件事:一是提供充足、结构极简的计算能力与存储容量;二是通过与丰富环境的交互以及恰当的训练过程来塑造这些能力。

许多看似根本性的算法差异,可能在很大程度上只是对相似的底层计算进行重新组织或重新描述。与其规定智能必须包含哪些模块,更应优先创造条件,使所需的计算能够被学到。算法仍然重要。但作者认为,设计不良的架构很容易阻碍学习;而精心手工设计的结构,相比简单、灵活的系统,带来的收益可能有限。

BBOC 强调七个关键因素:

  1. 计算(Compute): 提供足够的计算能力,让计算在观测与动作之间顺畅流动,并使其对训练保持响应,不施加不必要的结构性约束。
  2. 参数(Parameters): 系统既需要容量来保留训练中获得的知识,也需要容量来保存执行任务时获得的临时信息。在简单神经网络中,二者分别对应权重和激活值。
  3. 经验数量(Quantity of experience): 学习需要足够的经验;静态数据是与环境交互的一种特例。当系统能够在内部模拟经验的某些方面时,计算可以部分替代外部经验。
  4. 经验分布(Distribution of experience): 训练应使在训练任务上取得成功的最简单方式,同样适用于最终任务。这可以通过使训练分布与测试分布相匹配来实现,也可以借助足够多样的任务来实现:这些任务使发现共同原理比记忆个别案例更经济。训练也可能需要从较简单的任务逐步过渡到较难的任务。
  5. 归一化与条件调节(Normalization and conditioning): 数值计算应保持稳定且易于优化。作者将 Adam、批归一化(Batch Normalization)和 ResNet 等方法的许多益处归入这一类,即改善计算与优化得以进行的条件。
  6. 对称性与形状(Symmetries and shape): 利用世界中的对称性与稀疏性来减少参数需求、提高学习效率。计算图还应避免狭窄的信息瓶颈,也不应迫使观测在被充分分析之前就被压缩。
  7. 训练目标(Training target): 系统学到的是整个训练过程实际激励的行为。这一目标不必是单一损失函数;它可能从奖励、人类反馈以及多个相互作用的学习过程中涌现。错误的训练目标会导致系统学到错误的任务。

核心论断是:如果前六个因素设置得当,且该任务能以计算上可处理的方式学到,那么系统很可能会学到第七个因素实际规定的行为。

文中的例子还提示了若干进一步的要点:

  • 你得到的是训练过程实际优化的东西,而不是人类认为系统应当具备的属性。
  • 改善泛化的一条重要途径,是提供能促使模型发现共同原理、而非依赖少数特例的经验。
  • 规划作为一种计算活动很重要;一个系统是否进行规划,不能仅凭“基于模型”和“无模型”这两个标签来判断。
  • 如果目标是快速适应新任务,那么快速适应后的表现就应当成为训练目标的一部分。
  • 对抗样本暴露了训练覆盖范围与训练目标的局限;作者以当时对抗训练的有效性来说明,期望的属性需要得到训练过程的支持。
  • 智能或许类似雪花:复杂的结构可以从简单的生成条件中涌现,因此这些条件应成为研究的核心对象。

这些是基于作者经验的高层判断。BBOC 承认专用算法在狭窄任务上的价值,也为新的架构和训练方法留有余地。它并不保证原封不动地扩展现有算法就能产生 AGI。


原文(中文译文)

作者:Dario Amodei。所提供的文本包含第 1–3 节及其脚注;对第 4–6 节的引用按原文保留。

大计算团块假说

1. 引言

我曾数次考虑写下自己对 AGI 安全的整体看法。迄今没有动笔,主要是因为我对这个问题的看法相当高层。它与 Paul 和 Eliezer 所写的那类“框架式”研究议程属于不同的体裁;事实上,其中很大一部分正是在论证这类框架所处的抽象层次是错误的(话虽如此,Paul 的框架与我的想法大体相容,而 Eliezer 的框架则大体不相容)。然而后来我意识到,支撑我安全观的核心信念,同样是我对 AGI 时间线看法的核心,因此把它写下来显得格外重要。

有几点需要说明。这并不是一个精确的假说,我对它也并非极有把握;而且无论是对 AGI 时间线还是对 AGI 安全,我持有现有观点都还有其他更具体的理由。它更像是对我的一些高层直觉(由经验塑造)的提炼,这些直觉关乎智能大概如何运作。它们使我预期事情在默认情况下会朝某个方向发展,也使我先验地高度怀疑那些不正视、或似乎没有充分理解这一图景的研究方向。我将首先仅就 AI 本身来描述这一观点,随后再讨论它对安全的(微妙)含义。

对 AGI 时间线持乐观与悲观态度的人之间,一大分歧在于:对 AI 进展而言,原始算力和新算法哪个更重要。我无疑更接近“原始算力”一方,但我也认为这个问题的表述不够精确。什么算作算法?原始算力究竟必须以何种方式运用?那些既不是算法也不是算力的东西(比如环境设计)又该怎么算?此外,大量算力仅仅是通向 AGI 的充分条件(即多条路径之一),还是在某种意义上确实是必要的?

我对这一状况的理解,就是我所说的大计算团块(BBOC)假说。它认为,创造任何给定的智能行为,主要在于提供一大块结构极简的计算能力,然后通过两方面赋予它形状与形态:一是与丰富环境的交互,二是一个将其驱向适合当前任务之行为的训练过程。这些高层“旋钮”包括:训练信号(一个或多个)是什么?智能体与之交互的环境具有怎样的性质?它接触到多少经验?要控制智能体把给定任务做得多好、以及具体怎样去做,这些旋钮是最有效的手段。一旦它们设定好,学会执行该任务主要就取决于智能体是否有足够的计算和存储容量来习得所需的认知技能。

少数算法设置确实重要,但它们往往落入几个非常简单的类别:利用世界的简单对称性,帮助对计算进行正则化并改善其数值条件,或使计算图的形状更平滑、更不别扭。更复杂的算法思想很少有帮助。尤其是那些据称“根本性”的算法差异(下文我会举例,比如贝叶斯与非贝叶斯方法、基于模型与无模型的 RL,甚至 ML 与非 ML 方法),最终通常主要只是对相同的底层计算进行重新索引或重新描述。它们像玩一场“猜豆子”的把戏,把完全相同的处理过程挪来挪去,表面上却显得在做某种实质不同的事情。此外,有些算法试图僵硬地规定计算应当做什么,或者规定计算应如何在(人类所认定的)任务“组成部分”之间分配;这类算法往往表现尤其糟糕,结果常常比同等规模的无结构计算团块差得多。更广泛地说,算法在负面意义上的重要性远大于正面意义。人们完全可能设计出彻底阻断计算流动的糟糕架构,但要大幅超越无结构团块却非常困难。同样非常困难(甚至可能不可能)的是,通过改动算法让智能体做出其环境和训练过程所蕴含之外的任何事情。

这一图景影响着我对 AI 时间线和 AI 安全两方面的看法。由于上面的概述有些抽象,我将首先(第 2 节)给出 BBOC 的更详细表述,并(第 3 节)举例说明它在哪些地方已经成立、或我预测它将在哪些地方成立。然后我将(第 4 节)描述它所提示的安全观,并(第 5 节)说明为什么这使我怀疑 MIRI 的 HRAD 议程,并对一般的“框架”式 AI 安全计划持轻度怀疑。最后,我将(第 6 节)描述我认为一种与 BBOC 相容的安全方法应当是什么样子,以及它与 OpenAI 安全团队目前工作的关系。

2. BBOC 的更详细表述

假设你想学会某项任务,然后反复执行它,比如识别图像、玩电子游戏、做科学研究、证明定理、模仿人类,甚至是快速学习新事物这项技能。你该怎么做?BBOC 假说认为,你应当主要关注以下 7 件事;其他一切通常只有次要影响,或者所处的抽象层次过低,无法真正具有普遍性:

  1. 计算(Compute): 你需要足够的计算来学习当前任务。你需要计算在对环境的观测与智能体的动作之间顺畅、自由地流动。它应当相对无结构,并对训练过程保持响应;除此之外,其确切形式是次要的。

  2. 参数(Parameters): 智能体需要一种机制,在训练期间持久地存储它学到的关于一般任务的信息,并在执行期间暂时地存储它学到的关于任务某个实例的信息。这些信息可以是隐式的或显式的,可以是直接存储的观测,也可以是统计模型的参数。(在简单的深度神经网络中,持久信息和暂时信息分别是权重和激活值;对于进化这样的过程,则分别是一类生物的基因组和某个特定大脑的突触权重。)如果参数不够,你就学不好这项任务。

  3. 经验数量(Quantity of experience): 智能体需要在执行任务的环境中积累足够的行动经验。我用“经验”而不是“数据”一词,是因为静态数据是与动态环境交互的一种特例。如果智能体能够在内部模拟经验的某些方面,经验在一定程度上可以与计算相互权衡。

  4. 经验分布(Distribution of experience): 学习过程中的经验分布必须满足:在训练任务上表现良好的最简单方式,在最终任务的一个实例上也表现良好。实现这一点的一种方式,是让训练任务实例与测试任务实例从同一分布中独立同分布(i.i.d.)地抽取。另一种方式同样奏效:训练任务之间的差异方式,使得找出它们的高层共性(比如物理定律,或某个描述长度很短的程序)所需的比特数,少于分别解决每个任务所需的比特数。这样,即使测试任务与训练任务差别很大,只要高层共性得以保留,智能体就会表现良好。另外,训练任务可能需要比最终任务更简单,或者难度需要平滑递增。

  5. 归一化与条件调节(Normalization and conditioning): 自由流动的数值计算很容易出现数值稳定性或病态条件(conditioning)问题。过去 5 年 AI 领域的许多“算法”创新,实际上都是对数值计算进行归一化和条件调节的简单方法:想想 Adam、BatchNormalization 或 ResNet。这些方法基本上只是规定,计算某个环节中出现的数值量应当归一化到 1,或重新参数化为相对于 1 的差值。这种简单的“流量控制”常常胜过深度学习内外许多复杂得多的想法。

  6. 对称性与形状(Symmetries and shape): 最具影响力的算法创新中,另一大块是利用对称性来减少模型的参数数量,从而使模型学得快得多。智能之所以能够运作,完全是因为我们生活在一个低熵的世界里;低熵的一种表现形式,就是物理世界中的对称性和稀疏性。例如,卷积网络利用了空间平移不变性;RNN 利用了时间平移不变性(记忆架构可能是未来的候选者,因为它们利用了一般性的稀疏性)。没有这些对称性,我们很可能也能学会同样的任务,但这将需要多得多的计算和参数(这些计算和参数最终会自行发现这些对称性)。类似地,计算的形状也可能很重要:我们不希望信息在一个非常小的层上形成瓶颈,也不希望观测在被分析之前就被迫压缩。计算的形状应当灵活且合理。随着任务变得更加通用,对称性可能会变得不那么重要,因为它们可能无法跨任务成立;而且我们或许也能训练元学习架构,在对象层面上尝试各种对称性。

  7. 训练目标(Training target): 计算需要由适合当前任务的正确评估机制来驱动。这种机制可以是损失函数、奖励、预测误差、GAN 损失、适应度函数、人类评估、长时间的人类交互,或者组合上述任意几项的过程。训练过程在渐近意义上激励什么,你就会学到什么;如果训练过程是错的,你就会学到错误的任务。这不仅仅是针对安全问题的评论:如今许多深度学习论文都在学习错误的任务。例如,试图在对话中匹配人类回应的对话系统(人类对话的目标并不是匹配另一个人的回应,而是实现这个人在对话中的目标,无论那是什么);又如,在一个任务上训练、再将结果应用于另一个任务的非元学习系统(智能体并没有在“迁移到另一个任务”这一任务上接受训练,因此它在这方面不会是最优的)。请注意,“训练目标”不一定是单一的目标函数或奖励函数;它可以是一个由若干部分组成、共同驱向某种渐近条件的复杂过程。例如,基于人类反馈的 RL 中,训练目标来自两个不同学习过程的结合,大致是:“学会以这样一种方式在环境中行动:与你可能采取的其他动作的短片段相比,人类会更偏好你实际动作的短片段。”

BBOC 的说法大致是:“如果你把 1–6 做对了,那么只要第 7 项所规定的行为能以计算上可处理的方式学到,你很可能就会学到它。1–7 之外的东西重要的可能性要低得多,尽管也有例外。”

与 BBOC 相关的一个概念(可能有助于建立直觉)是我所说的智能的“雪花模型”。如果你观察雪花的分形结构,你可能会认为:无论是谁造出了它,都完成了某种精细和困难到不可思议的事情;但既然有人做到了,一块一块地搭建它就一定以某种方式是可能的。事实上,这两种说法都是错的。制造雪花的方法不是从它的组成部分去思考,而是了解物理定律(训练目标),拥有足够的原材料(计算)和足够大的腔室(参数),正确设定温度、压力和湿度(归一化、形状),然后等待足够长的时间(经验数量)。此外,这是你制造雪花的唯一方式,也是你影响其形状的唯一抓手;试图用小冰粒拼出一片雪花基本上是没有希望的。对于雪花,你或许可以称之为“大雪团”理论。

Ilya Sutskever 把 BBOC 表述为“网络想要学习”(networks want to learn)。

值得指出一些例外或表面上的例外。在一个任务的狭窄版本上训练时(比如玩单个 Atari 游戏,而不是玩任意电子游戏),常常可以专门为该任务手工设计一种方法。这会带来表面上巨大的算法改进,以及对计算更具规定性的结构,但代价是系统变得脆弱,对更广泛任务的泛化能力也差(例如,想想那一大批针对 Atari 上的 RL 提出小改动的论文)。这种(往往是不自觉地)对狭窄任务过拟合的现象,制造了算法创新成功的错觉,同时使我们的智能体显得脆弱而过于复杂,并掩盖了计算与结果之间的简单关系。有些人主要关注小任务,并期望突破首先在那里出现;我认为,这会让他们对整个领域形成非常扭曲的看法。相比之下,参与大型项目的经验似乎会培养出 BBOC 直觉1。我还相信,随着我们转向更通用的任务(这些任务在算法上比更狭窄的任务更容易学习),BBOC 会变得更加明显。

上一段的一个极端情形是:有些任务狭窄到根本不需要任何参数,人类只需编写一个简短的程序就能解决它们(或者在一小批此类程序中进行试验)。这方面的例子可能包括排序、图导航或 alpha-beta 剪枝。在这种情形下,该方法能非常好地解决这一狭窄任务;其效率可能因所用算法不同而高得多或低得多;它能在该狭窄任务的各个实例之间完美泛化(例如对更长的数字列表进行排序),但完全没有泛化到该任务之外的能力(即给它排序以外的算法任务时,它无法很好地应对)。在 ML 出现之前,基本上所有 AI 工作都是这种形式:ML 之前的 AI 大多只是针对某些选定领域的编程。这段历史掩盖了 BBOC,让人觉得算法可能带来巨大收益,而且正确的算法能带来完美的泛化。然而实际上,哪怕只是稍稍超出这些单一算法任务进行泛化,都需要在程序空间中搜索。这种搜索必然是启发式的,必然会把学习/ML/参数牵扯进来;如果任务足够通用(例如解决任意一道编程面试题),还将需要大量计算,并遵循 BBOC 的常规规律。

按上文的写法,BBOC 的许多描述读起来可能像是一份设计深度学习系统的常识指南。但大多数人并没有仔细思考过它能延伸多远,或者它对智能意味着什么。无论在领域内还是领域外,人们关于深度学习常说的许多话都与 BBOC 严重矛盾;如果你真正相信 BBOC,这些话就会开始显得荒唐。下面我举一些例子,说明在 AI 训练中什么重要、什么不重要,以帮助阐明这一假说有多么出人意料、影响多么深远。

3. BBOC 的证据与例子

以下是我在 3 年训练 AI 系统和多年研究大脑的过程中观察到的一些现象。它们要么是支持 BBOC 的证据,要么是 BBOC 的推论/预测:

  • BBOC 的经典(也是最广为人知的)例子是将卷积神经网络用于视觉。在 2012 年之前的那些年里,人们精心尝试设计边缘检测器、轮廓整合系统、分割系统、前景-背景分析器、姿态估计器等等,然后试图将它们组装成视觉系统。这些系统之所以失败,是因为它们没有使用足够的计算(1),没有足够的参数(2),对计算的组织过于僵硬(6),也没有正确的目标函数(7):各个组件是在诸如边缘检测之类的任务上训练的,而不是在识别最终物体上训练的。CNN 解决了所有这些问题。如果你保留那些精心设计的系统,只修正(1)、(2)和(7),它们在 ImageNet 上可以表现得尚可,但仍然低效、复杂且泛化能力差。

  • 基本上,我训练 AI 系统的全部经验都与 CNN 的情形相吻合:尽可能使用最简单的架构和算法,把(1)–(7)做对,你就会做得很好。如果你没有足够的计算、参数或数据,什么也救不了你。语音、语言建模、翻译、强化学习、生成模型,以及很快会加入其中的机器人学,似乎都遵循这一模式。陈述这一事实只需寥寥数语,但经验的分量怎么强调都不为过:训练数百个模型,尝试数百种方法,看清什么有效、什么无效。

  • 我在 Google 时参与过一个项目,想看看神经网络对深度学习是否真的必不可少。我们尝试把每一层中的“矩阵+非线性”替换为某种其他类型的机器学习模型(我不能透露具体是什么),基本上就是做出一个“深度<某种其他机器学习技术>”。我们发现这些模型能够工作,但始终比规模相近的神经网络表现略差。最终我发现,这些定制层中的任何一个,只要它愿意,都可以用其参数的一个子集构成一个标准的神经网络层,而它正是选择了这样做。基本上,它对我们给它的模型进行了重新参数化,从而在内部悄悄地构成了一个神经网络。换句话说,换用不同的层,实际上只是导致神经网络本会进行的同一计算被重新排列。一方面,这告诉我们深度神经网络是相当有效的模型(其他模型都想变成它们);另一方面,这也告诉我们其他模型同样可以奏效,“深度学习”并没有什么神奇之处。更确切地说,某些计算真的“想要”发生,并会围绕你给它们的任何类型的模型来塑造自身。

  • 在 RL 教科书中,有基于模型的 RL 与无模型 RL 之分。前者拥有一个进行预测的环境模型以及一个策略,后者只有一个策略。理论上,基于模型的 RL 有点像系统 2,因为它能够预先思考和规划,而无模型 RL 则像系统 1。在实践中,无模型 RL 往往会在内部进行一些规划。我们开始怀疑,只要以不同方式塑造无模型策略,比如允许它们在采取行动之前自我迭代许多步,它们就能够(隐式地)进行规划,且效果至少与基于模型的系统一样好。与此同时,实际的基于模型的 RL 系统表现相对较差,也许是因为我们人为地强迫计算在 2 个互不相连的块中进行。关键在于,规划这种计算活动很重要;但这种活动是否发生,更多取决于计算团块的形状,而不是我们表面上所用的算法,也不取决于哪个神经网络被指定去做什么。当环境和目标函数有此要求时,“无模型”系统会在内部学到一个模型。如果它有时学到的是一个有缺陷的模型,那可能只是因为我们通常不会给无模型网络赋予足够的内部循环,让它们能够隐式地进行类模型计算。

  • 类似地,人们说普通 RL 在长时间跨度上存在问题,比如在 100 万个时间步上进行规划。分层 RL 本应解决这个问题。其思路是设立目标和子目标,由不同的策略在不同的时间尺度上设定目标。遗憾的是,到目前为止,分层 RL 设定目标和子目标的能力,并不比普通 RL 算法内部隐式学到的好多少;层级结构往往会坍缩成大致相当于单个(更深的)神经网络本会做的事情。我们最终可能会让分层 RL 奏效,但就目前而言,它似乎又是一个例子:计算对自己想做什么有自己的主意,并会绕开一个据称很重要的算法强加给它的结构。与此同时,当我们把策略做得非常大时,普通 RL 算法在长时间跨度上正取得令人惊讶的成功,有时能解决每 10,000 个时间步才有 1 次奖励的任务。我们最终确实需要在 RL 策略中表示层级结构,但这可能会以隐式方式发生,而不是通过我们贴上“分层 RL”标签的那些技术。

  • 据说 LSTM 比简单 RNN 更好,因为它们能更长时间地保存状态,这被视为深度学习中为数不多的真正算法创新之一。然而现在有证据表明,在恰当调参的情况下,简单 RNN 的表现与 LSTM 一样好;LSTM 唯一的优势是能在更宽的超参数范围内良好工作。事实上,在参数数量和计算量保持不变的情况下,不同的循环架构(RNN、LSTM、GRU)在容量和性能上似乎相似得出奇。

  • 当现有神经网络泛化不好时,人们常常把它说成某种算法缺陷,仿佛某处存在某种尚待发现、泛化能力好得多的算法2。但我的经验是,只要让神经网络接触更宽的数据分布,迫使它们找到一般性解法而不是仅仅记住少数特例,它们就会泛化得更好。例如,在训练语音模型时,我发现如果只用美国口音训练,模型在许多其他口音上会表现很差。然而,如果用 5 到 6 种口音训练,它立刻就能在一种未见过的口音上表现良好。可能的情况是:只有 1 到 2 种口音时,直接记住每种口音的特点很容易;而随着口音数量增加,识别并存储它们之间的共性变得更容易(且所需比特更少),这就带来了泛化。总结一下:带来泛化的与其说是算法,不如说是训练设置和环境。

  • 我有时在学术 ML 界和 AI 安全界都会听到这样的讨论:深度神经网络缺少了某种东西,而贝叶斯方法会在某些方面做得更好(能表示不确定性、校准得更好、我们更容易理解它们的信念,等等)。但事实上,神经网络已经能表示不确定性(例如通过类别概率);只要愿意,它们甚至可以像理想化的贝叶斯方法一样,输出完整的联合分布,而不是分解后的概率。问题在于,这需要多出指数级的参数,无论对神经网络还是对某种理想化的贝叶斯模型都是如此;两者都会遇到同样的实际限制。人们还说,如果有一个贝叶斯模型,你就能明确知道它相信哪些命题、相信到什么程度;但我始终觉得这说不通。难点在于弄清如何把世界切分成“陈述”,而这必须由你用来容纳和填充模型的结构去学习,不论这种结构是否是贝叶斯式的(例如贝叶斯网络或神经网络)。一旦做到这一点,贝叶斯网络节点中持有的信念,就和神经网络内部的激活值一样,同样可能可理解或不可理解、经过校准或未经校准。而且神经网络的激活值从各方面看都像是在持有信念、权衡证据,尽管它们并未被明确标注为在这样做。最后,人们还说贝叶斯模型更擅长泛化、更能避免过拟合。这在理想极限下是成立的(因为你在对一个分布建模);但在实践中,深度学习为应对过拟合而即兴发明的那些最简单的临时方法,比如 dropout,可以被证明等价于某种贝叶斯近似。与此同时,人们确实尝试过显式的贝叶斯神经网络(在权重上引入不确定性),但它们在泛化或校准方面并没有明显胜出;正如你所预期的,它们的表现与 dropout 之类的方法相似。关键点再一次是:算法本身没有看上去那么重要。它们给人一种在做不同事情的表象,而实际上往往只是给同一个计算过程重新贴上标签。

  • 人们似乎对对抗样本感到非常惊讶,说这意味着神经网络并没有真正理解它们所分类的物体,或者在某种意义上很脆弱。但 BBOC 对此并不惊讶:这些分类器训练时所用的经验分布中,并不包含以这种方式刻意构造的图像。与 BBOC 相一致,目前对抗样本的最佳防御方法,就是直接在对抗样本上训练。目前第二好的防御方法(也是我认为最终会成为解决方案的方法),是用一个生成模型来判断什么是、什么不是自然图像。这之所以有效,是因为训练该生成模型的目标函数要求它区分数据流形之上与之外的东西,而分类器没有这样的目标函数。BBOC 认为,你优化什么就得到什么;你得不到的,是人类设想中系统应当具有的那些属性。

  • 新闻报道偶尔会谈到我们需要某种反向传播的替代方案,仿佛我们缺少了某个关键的算法洞见、某种新的更新规则,它将彻底改变我们所做的一切,让我们的网络终于能以真正类人的方式学习(经常被提到的是“赫布学习”)。我们完全有可能找到一种新的更新规则(事实上,我怀疑许多类梯度的更新都会差不多好),但我预期任何此类改变的效果都只会非常有限。在高维空间中寻路是困难的;从经验上看,我们已经尝试过大量方法,最终都只比简单梯度略好一些。赋予更新规则这种近乎图腾般的重要性,正是 BBOC 旨在纠正的那种思维方式的一个例子。

  • 有一段时间,人们进行迁移学习的方式是:先在一系列任务上训练一个策略,再尝试在新任务上微调。人们尝试了这种做法的许多复杂变体,结果都差不多一样糟糕。这实际上是错误的训练程序(它在渐近意义上并不会导向能快速适应的策略)。当人们改用正确的目标函数后,情况开始有所好转:训练一个针对快速适应后表现进行优化的初始策略(即在“快速适应新环境”这一任务上进行学习和评估)。同样,具体的算法并没有带来多大差别;似乎有帮助的是拥有正确的目标。

  • 现有大量算法,试图为强化学习带来更好的探索或更好的内在动机,或者试图更安全地探索,等等。许多聪明人(包括我)研究过这些问题,并提出了一些似乎带来改进的算法。但随着时间推移,这些算法已经变成一堆杂乱、笨重的拼凑物,有点让人联想到 CNN 出现之前的边缘检测器。由于这些方法使用的是端到端的深度 RL,人们很容易以为我们已经超越了那个阶段。但也许我们需要再上升一个抽象层次:基于许多智能体的学习过程,去学习如何探索、如何激励、以及如何安全地探索。我们已经看到这类“元学习”取得了初步进展,但事情最终会走向何方仍无定论。

  • 那么非 ML 系统呢,比如搜索或推理系统?它们难道不是在做某种真正不同的事情吗?既然它们包含一套符号化的配方,而 ML 系统没有,难道不应该预期它们泛化得更好吗?我认为这里存在一个误解。ML 系统完全能够驱动符号计算,神经网络驱动的定理证明方面的所有工作都表明了这一点;它们还能依据算法或程序对数据的拟合程度,在算法或程序空间中进行搜索(你可以用神经网络来演化代码,尽管目前效果还不好)。事实上,我认为,如果神经网络系统接触到多种多样、彼此只具有高层相似性(例如物理定律)的环境,并且其形状和结构组织得当,它们将不可避免地收敛到实现简单程序的参数上(例如它们会推导出或表示出物理定律)。我们的大脑尽管基于非常模糊的计算,却做到了这一点。一旦这种情况发生,神经网络将是在程序空间中搜索,而非 ML 方法代表的是固定的程序(或小的程序族,比如树搜索);到那时,非 ML 方法将只是在执行 ML 方法所做计算中一个固定、僵化的子集3。因此我们可以预期,ML 系统将比非 ML 系统做得好得多(即使在符号任务上也是如此),同时为此使用更多的计算,这与 BBOC 相一致。我们已经可以在 MCTS 上看到这一点:DeepMind 发表了一些论文,表明学会搜索可以胜过固定的树搜索算法;把这一点整合进 AlphaGo 等系统只是时间问题。

  • 想想人类进化。大自然是如何发现并发展出能够揭示物理定律、证明费马大定理、创作交响乐的大脑的?你可以一步一步地追溯它是如何发生的,并为每一步给出解释,然而整个过程的力量仍然令人惊讶。BBOC 提供了一个简单的高层解释:足够的计算,足够多的结构极简的大脑记忆容量,足够宽广的环境经验与挑战分布,再加上一个让智能体彼此对抗的驱动目标,就足以使这一结果最终不可避免。

希望以上内容能让读者体会到,为什么我认为 BBOC 极有可能成立,尽管它乍看之下显得奇怪,而且从小规模基准测试中也看不出来。

请注意,这些都不意味着把今天的算法原封不动地扩大规模就会通向 AGI。它确实表明,任何算法上的改变,很可能是利用对称性或稀疏性的简单改动(好的候选者可能是基于记忆的模型,或在训练过程中规模不断增长的神经网络),或者是训练过程上的创新,而规模将是故事中极其重要的一部分。它还表明,“深度学习的替代方案”极有可能要么行不通,要么只是在重演深度学习;而那些据称引入了某种理想属性的算法创新,应当以怀疑的态度对待。

BBOC 的一个显著特点是:一个研究方向可能在很长时间内看起来完全合理,并吸引许多最聪明的人投身其中(视觉边缘检测器、基于模型的 RL、分层 RL、探索),然后人们才逐渐看清,它只是在重新排列计算,或者在如何解决问题上试图规定得过于具体。然而随着时间推移,你会培养出一种直觉,能判断一种方法何时“过于手工化”,就像程序员能凭直觉判断某个抽象何时不够通用或不够模块化。基于模型、分层和探索这几个方向仍有争议,也许我们仍能从中有所收获;但它们开始显得越来越可疑,越来越像 2011 年的边缘检测器。

最后要说明的是,有时很难或不可能立即对一个问题采用 BBOC 所推荐的方法。有时你需要先在一个较窄的问题上从较低层次着手(例如,在尝试于许多电子游戏上进行元 RL 之前,先在一个电子游戏上做普通的深度 RL),以便找准方向,并理解如何设计更高层的算法。因此,设计较低层架构的较窄项目可以作为垫脚石。我将在讨论自己在 AI 安全方面的研究策略时(第 6 节)再回到这一点。

脚注

  1. 我在 AI 领域的第一份工作,参与的是 Deep Speech 2 项目。我现在相信,它是截至当时单个训练过程中计算用量最大的一次:2015 年,每个训练出的模型使用了约 0.3 petaflop-day。 ↩

  2. 我认为这源于 ML 之前的 AI 系统的经验。在那时,选对算法意味着你能在单一算法任务内完美泛化,基本上是因为这类“AI”只是编程。我在上一节对此略有讨论。 ↩

  3. 上文那一节也讨论了这一点:早期 AI 工作专注于解决特定狭窄问题的固定程序或小程序族;把这类工作称为“AI”掩盖了 BBOC,并错误地让我们以为符号计算有某种不同之处。 ↩