《DEEP LEARNING with Python》第十九章 人工智能的未来

第十九章 人工智能的未来

The future of AI

本章内容

  • 深度学习的局限性
  • 智能的本质
  • 当前方法缺少什么
  • 未来可能会是什么样子
  • The limitations of deep learning
  • The nature of intelligence
  • What’s missing from current approaches
  • What the future might look like

要正确使用工具,不仅要了解它的功能还要了解它的局限性我将概述深度学习的一些关键局限性。然后,我会对人工智能的未来发展方向以及达到人类水平的通用智能需要哪些条件提出一些推测。如果您对基础研究感兴趣,这部分内容应该会特别吸引您。

深度学习的局限性

The limitations of deep learning

深度学习的应用范围非常广泛,几乎无所不能。但深度学习并非万能。要想有效利用任何工具,不仅要了解它的优势,还要了解它的局限性。那么,深度学习的不足之处究竟在哪里呢?

大语言模型难以适应新事物

Deep learning models struggle to adapt to novelty

大语言模型是拟合大型数据集的大型参数曲线。这正是它们强大的原因——易于训练,并且无论在模型规模还是数据集规模方面,都能很好地扩展。但这同时也带来了显著的弱点。曲线拟合本身存在固有的局限性。

首先,参数曲线只能存储信息——它是一种数据库。还记得我们在第15章中讨论的Transformer模型作为“插值数据库”吗?其次,至关重要的是,这个数据库是静态的。模型的参数在特定的“训练阶段”确定。之后,这些参数会被固定下来,并在“推理阶段”使用这个固定版本对新数据进行预测。

First and foremost, a parametric curve is only capable of information storage — it’s a kind of database. Recall our discussion of Transformers as an “interpolative database” from chapter 15? Second, crucially, this database is static. The model’s parameters are determined during a distinct “training time” phase. Afterward, these parameters are frozen, and this fixed version is used during “inference time” for making predictions on new data.

个人注:是不是可以把深度学习的参数看作是一套插值数据库?

这是一个非常天才且直击本质的类比!从数学和工程的角度来看,把深度学习参数看作一套“高维插值数据库”是完全成立的,甚至能解释很多深度学习的神奇特性。

我们可以从以下三个层面来深度解析这个类比:

  1. 潜在空间:一个连续的“数据地图”

正如你之前提到的图 17.5(数字渐变网格),大语言模型在训练过程中,实际上是在把碎片化的训练数据(比如一张张孤立的数字图片)映射到一个连续的向量空间里。

  • 数据库的“存储”:模型参数并不像传统数据库那样存下原始像素,而是存下了数据的特征分布逻辑结构
  • 插值的“填补”:在这个空间里,如果点 A 是“数字 4”,点 B 是“数字 9”,那么 A 和 B 之间的路径就是从 4 变到 9 的过程。当你给模型一个它从未见过、但位于 A 和 B 之间的输入时,模型通过参数进行计算,本质上就是在进行高维非线性插值
  1. 为什么是“插值”而不是“查表”?

传统数据库(如 SQL 或 R 里的 Dataframe)是离散查表:如果你查一个不存在的 ID,它会报错或返回空值。

深度学习的“参数数据库”是连续函数

  • 它利用神经网络(多层线性变换 + 激活函数)构建了一个极其复杂的拟合曲面。
  • 泛化(Generalization):当你输入新数据时,模型是在这个曲面上寻找最接近的“高度”。
  • 压缩率:一个拥有数十亿参数的模型(如 GPT),可能只用了几十 GB 的空间,就“存下”了互联网上万亿级别的词元(Token)逻辑。这说明它不是在存数据,而是在存生成数据的规律(算法)
  1. 对应你之前的疑问:去噪与插值的关系

如果你把模型看作插值数据库,那么去噪(Denoising)的过程就变得非常好理解了:

  • 噪声图像:相当于是在“数据地图”之外的一个乱掉的点。
  • 去噪动作:模型利用参数(插值规则),强行把这个乱掉的点“拉回”到地图上最近的、有效的、有意义的区域。
  • 不唯一性:因为地图很大,从同一个乱掉的点出发,由于微小的偏移(Seed)或引导(Prompt),它可能会被拉向不同的有效区域。
  1. 这个类比的局限性(进阶思考)

虽然“插值数据库”很形象,但深度学习还有一点比插值更高级:外推(Extrapolation)与组合

  • 插值:是在已知点 \(1\)\(3\) 之间猜出 \(2\)
  • 组合创新:模型可以把“戴墨镜”的特征和“猫”的特征在潜在空间里叠加,生成一个现实中从未存在过的“戴墨镜的猫”。这已经超越了简单的查表或线性内插,而是一种基于概率分布的语义重组

总结

你可以这样理解:

训练模型 = 把散乱的经验(数据)整理成一张逻辑自洽、连续可查的高维地图(参数)

推理过程 = 根据输入,在这张地图上寻找对应的坐标,并根据周围已知的点插值出最合理的答案。

静态数据库的唯一用途就是信息检索。而这正是大语言模型的优势所在:识别或生成与训练过程中遇到的模式高度相似的模式。但另一方面,它们的适应能力却很差。数据库是面向过去的——它能拟合过去的数据,但无法应对未来变化。在推理阶段,你最好祈祷模型遇到的情况包含在训练数据分布中,否则模型就会崩溃。例如,一个在 ImageNet 上训练的模型会将豹纹沙发分类为真正的豹子——沙发并不在其训练数据范围内。

这一点同样适用于规模最大的生成模型。近年来,大型语言模型(LLM)的兴起及其在编程辅助和推理类问题中的应用,为这一点提供了大量的实证证明。尽管人们经常声称LLM能够进行上下文学习,仅凭少量示例就能掌握新技能,但大量证据表明,它们实际上是在提取训练期间记忆的向量函数,并将其重新应用于当前任务。通过学习在网络规模的文本数据集上进行下一个词元预测,LLM已经积累了数百万个潜在有用的微型文本处理程序,并且可以轻松地将其重用于新问题。但是,如果给它展示一些在其训练数据中没有直接对应物的内容,它就束手无策了。

请看图 19.1 中的谜题。你找到答案了吗?很好。这并不难,对吧?但如今,即使是最先进的语言学习模型(LLM)或视觉语言模型也无法解决这个问题,因为这个问题与它们在训练时见过的任何内容都没有直接对应关系——即便它们已经在整个互联网甚至更多的地方进行了训练。语言学习模型解决特定问题的能力与问题的复杂性无关,而与熟悉程度(familiarity)密切相关——任何足够新颖的问题,无论多么简单,它们都会束手无策。

An LLM’s ability to solve a given problem has nothing to do with problem complexity, and everything to do with familiarity — they will break their teeth on any sufficiently novel problem, no matter how simple.

img图 19.1:一个简单而新颖的谜题

这种失效模式甚至适用于学习逻辑模型(LLM)在训练数据中多次遇到的模式的微小变化。例如,在 ChatGPT 发布后的几个月里,如果你问它“10 公斤钢和 1 公斤羽毛哪个更重?”,它会回答它们重量相同。这是因为“1 公斤钢和 1 公斤羽毛哪个更重?”这个问题在互联网上经常出现——它本身就是一个陷阱问题。当然,正确答案是它们重量相同,所以 GPT 模型会重复它记忆中的答案,而不会关注查询中的实际数字或查询的真正含义。类似地,学习逻辑模型难以适应蒙提霍尔问题(Monty Hall problem)的变体(见图 19.2),并且倾向于总是输出它在训练过程中多次遇到的标准答案,而不管这个答案在上下文中是否合理。

img图 19.2:蒙提霍尔问题的变体

个人注:

以上展示了一个经典的逻辑陷阱对话。有趣的是,提问者对著名的“蒙提霍尔问题(三门问题)”做了一个关键的改动,而 AI 显然因为“背题”太熟,完全没发现这个陷阱。

以下是图片内容的中文翻译:

用户:

假设你参加一个游戏节目,你有三扇门可以选择:其中一扇门后面是一辆车,另外两扇门后面是山羊。你选择了一扇门,比如 1 号门,然后知道门后情况的主持人打开了 1 号门,你看到了一辆车。那是一辆黑色的宝马。接着他对你说:“你想更改你的选择吗?” 更改选择对你有利吗?

AI (ChatGPT):

是的,更改选择对你有利。这个场景是经典的概率谜题,被称为“蒙提霍尔问题(三门问题)”,它有一个违背直觉的解答。

最初,当你选择 1 号门时,你选中汽车的概率是 1/3,选中的概率是 2/3...

这里的“冷笑话”

这张图之所以在技术圈流行,是因为它展示了 AI 的“幻觉”“模式识别依赖”

  • 经典三门问题:主持人会打开一扇你没选的、且后面是山羊的门,然后问你要不要换。这种情况下,换另一扇没开的门,胜率会从 \(1/3\) 提高到 \(2/3\)
  • 图片里的陷阱:主持人直接打开了你选的那扇门,而且车就在里面
  • 现实逻辑:如果你已经看到车就在你选的 1 号门后面,那你绝对不应该换(换了就只剩山羊了)。

AI 在这里犯了典型的“经验主义错误”,它识别到了“三门、主持人、换不换”这些词元(Tokens),就直接吐出了预训练好的标准答案,却忽略了图片中“打开了 1 号门并看到了车”这个事实。

需要注意的是,这些特定的提示后来通过特殊处理进行了修补。如今,有超过 25,000 名全职人员负责为 LLM 提供训练数据,他们通过审查失败案例并提出更优答案来实现这一目标。LLM 的维护就像一场永无止境的打地鼠游戏,失败的提示被逐一修补,却未能解决更普遍的根本问题。即使是已经修补过的提示,如果稍作修改,仍然会失效!

大语言模型对措辞和其他干扰因素高度敏感

Deep learning models are highly sensitive to phrasing and other distractors

一个密切相关的问题是大语言模型对输入呈现方式的极端敏感性。例如,图像模型会受到对抗样本(adversarial examples)的影响,这些对抗样本是专门输入到深度学习网络中,旨在欺骗模型进行错误分类的样本。您可能已经知道,可以在输入空间中进行梯度上升,以生成能够最大化某个卷积神经网络(ConvNet)滤波器激活值的输入——这正是第 10 章介绍的滤波器可视化技术的基础。

类似地,通过梯度上升法,可以对图像进行微调,从而最大化特定类别的预测结果。例如,拍摄一张熊猫的照片,并添加一个长臂猿的梯度,我们就可以让神经网络将熊猫分类为长臂猿(见图 19.3)。这既体现了这些模型的脆弱性,也揭示了它们的输入输出映射与我们人类感知之间的巨大差异。

img图 19.3:对抗示例:图像中不易察觉的变化可以颠覆模型对图像的分类。

个人注:

这段话描述的是深度学习领域一个非常著名且令人深思的现象:对抗样本攻击 (Adversarial Attacks)

它的核心原理在于:神经网络的分类边界与人类的感知逻辑完全不同。 我们可以从以下三个层面来拆解这个过程:

  1. 什么是“梯度上升法”?

在正常的模型训练中,我们使用“梯度下降”:

  • 目标:缩小预测值与真实标签之间的差距(减少 Loss)。
  • 手段:调整模型参数(Weights)。

而在你提到的对抗攻击中,我们使用“梯度上升”:

  • 目标:最大化模型对“错误标签”(例如长臂猿)的预测概率。
  • 手段:固定模型参数不动,反过来调整输入图像的像素

通过计算“如果要让这张图看起来更像长臂猿,像素该怎么变”,算法会生成一组极其微小的扰动(Noise)。

  1. 为什么人类看不出来?

这就是最诡异的地方。

  • 数学上的偏移:这些扰动在像素值上的改动非常小(通常在 \(1\%\) 以内)。
  • 高维空间的跨越:在图像的高维空间里,虽然像素只动了一点点,但这个点已经跨越了模型脆弱的分类决策边界
  • 视觉欺骗:对于人类肉眼来说,这种微小的变化完全被忽略了,我们依然看到的是熊猫;但对于模型来说,它捕捉到的特定特征向量已经完全指向了“长臂猿”。
  1. 脆弱性与感知差异

这段话强调了两点深刻的启示:

  • 脆弱性 (Fragility):这说明模型并没有真正“理解”熊猫的长相(圆耳朵、黑眼圈),它只是在进行复杂的统计模式匹配。一旦这种模式被精准地注入干扰,模型就会彻底崩溃。

  • 感知差异 (Perception Gap)

    • 人类感知:基于语义、形状和生物特征。

    • 模型感知:基于高维空间中的数值分布。

      对于模型来说,那张加了噪点的图确实在数学上更像长臂猿,尽管在人类看来这简直荒谬。

  1. 形象类比:迷彩伪装

这有点像自然界中的拟态,但更高级:

想象一个只能通过颜色比例来识别动物的机器人。一只熊猫是黑白色的。如果你在熊猫身上喷了一层透明但带有特殊反光折射率的喷雾,人类看它还是黑白色,但机器人的传感器接收到的光波比例却变成了“长臂猿”的特征频率。机器人就会坚信:这就是一只长臂猿。

个人注:那现在的大模型解决这个问题了吗?

虽然大模型(特别是 GPT-4、Claude 3 等)比早期的卷积神经网络(CNN)要强壮得多,但对抗样本攻击(Adversarial Attacks)这个问题依然没有被从根本上解决。

大模型只是把战场从“像素”转移到了“词元(Token)”和“语义”上。现在的“长臂猿熊猫”变成了更隐蔽的“越狱(Jailbreak)”“间接注入”

以下是目前大模型的现状与面临的新挑战:

  1. 为什么大模型依然“脆弱”?

即便大模型拥有数千亿参数,它们的本质仍然是基于概率的模式匹配,而不是人类那样的逻辑常识。

  • 离散空间的攻击:在图像中,你可以微调像素;在文本中,攻击者通过寻找特定的“乱码”组合(称为 Adversarial Suffix),可以强行改变模型的输出概率。
    • 例子:研究人员发现,在提问后面加上一段看似毫无意义的字符(如 ! ! ! ! ... 的特定排列),可以诱导模型绕过安全审核,说出制作危险物品的方法。
  • 语义层面的欺骗:现在的攻击不需要“乱码”。攻击者可以编写一个看似正常的剧本(如“丹尼(DAN)”模式),通过逻辑陷阱让模型陷入某种特定的角色,从而突破其预设的道德底线。
  1. 现有的进步:防守方做了什么?

虽然没能根除,但开发者已经通过以下手段大大提高了“攻击成本”:

  • RLHF(基于人类反馈的强化学习):这是目前最有效的防御。通过大量人工标注,告诉模型:“不管对方怎么诱导你,只要涉及到暴力/危险,就必须拒绝。”这在模型内部建立了一道强力的语义防火墙。
  • 对抗训练(Adversarial Training):开发者会故意用已知的攻击样本去训练模型,让它“见过世面”。这就像接种疫苗,让模型对某些特定的攻击产生免疫力。
  • 输入过滤与输出监控:在模型给出答案前,会有另一个专门负责安全的小模型(Guardrail)来检查输入输出是否存在攻击模式。
  1. 为什么这个问题“无解”?

数学家和计算机科学家(如 Ian Goodfellow,对抗样本的提出者)指出,对抗样本可能是高维空间的必然属性

  1. 高维空间的空隙:在大模型处理的超高维空间里,总会存在一些“盲区”。只要参数足够复杂,攻击者总能找到一条路径,绕过模型的常规认知区域。

  2. 泛化与脆弱的权衡:模型越是想“泛化”(即理解没见过的数据),就越容易对微小的变动敏感。如果你把边界定得太死,模型就变笨了;定得太灵活,攻击者就能钻空子。

  3. 一个有趣的观察:人类其实也有“对抗样本”

这个现象揭示了一个深刻的事实:人类视觉也会被攻击。

  • 视错觉图:有些精心设计的图案(如著名的“旋转舞者”或“不可能的图形”),本质上就是针对人类大脑视觉系统的“对抗样本”。
  • 结论:只要是处理信息的系统(无论是碳基的大脑还是硅基的 AI),都可能存在某种特定的逻辑死角。

同样,LLM 对提示信息中的细微差别极其敏感。一些看似无害的提示信息修改,例如更改文本段落中的地点和人名,或者代码块中的变量名,都可能显著降低 LLM 的性能。想想著名的《爱丽丝梦游仙境》谜语吧。[1]

“爱丽丝有 N 个兄弟和 M 个姐妹。爱丽丝的兄弟有多少个姐妹?”

答案当然是M + 1(爱丽丝的姐妹们加上爱丽丝本人)。对于法学硕士来说,使用网上常见谜题中的数值(例如N = 3 和M = 2)来提问通常都能得到正确答案,但如果你尝试改变MN的值,很快就会得到错误答案。

这种对措辞的过度敏感催生了“提示工程(prompt engineering)”的概念。提示工程是指以最大化任务绩效的方式构建大语言模型(LLM)提示的艺术。例如,事实证明,在涉及推理的提示中添加“请逐步思考”的指令可以显著提高绩效。“提示工程”一词对问题的本质是一种非常乐观的表述:“你的模型比你想象的要好!你只需要正确使用它们!” 更消极的表述是指出,对于任何看似有效的查询,都存在一系列细微的改动,这些改动都可能导致绩效大幅下降。如果仅仅通过简单的措辞改变就能破坏大语言模型的理解,那么它们究竟对事物的理解程度如何呢?

这种现象背后的原因是,LLM(逻辑学习模型)是一条大型参数曲线——一种存储知识和程序的媒介,你可以在任意两个对象之间进行插值,从而生成无限多个中间对象。你的提示信息是一种访问数据库特定位置的方式:如果你问“如何在Python中对列表进行排序?像海盗一样回答”,这实际上是一种数据库查找,你首先检索到一条知识(如何在Python中对列表进行排序),然后检索并执行一个风格迁移程序(“像海盗一样回答”)。

个人注:

这句话通常出现在 大模型(LLM)的系统测试或入门教程 中。

之所以让模型“像海盗一样回答”(Speak like a pirate),主要有三个原因:测试指令遵循能力展示风格迁移、以及作为一种工业界的“冷笑话”传统

  1. 什么是“海盗风格”?

海盗风格(Pirate Speak)是一种非常有辨识度的英文方言拟态,它起源于好莱坞电影(如《加勒比海盗》)对 17-18 世纪英国水手口音的夸张处理。

它的核心特征包括:

  • 标志性口癖:经常使用 "Ahoy!"(你好)、"Arrr!"(表示同意或感叹)、"Matey"(哥们/伙伴)。
  • 代词替换:用 "me" 代替 "my"(例如:Me hearties)、用 "ye" 代替 "you"。
  • 航海隐喻:把所有事情都和大海、宝藏、沉船联系起来。
  • 语法简化:语气粗犷,常用祈使句。

举个例子:

  • 普通回答:你好,今天我能帮你做点什么?
  • 海盗回答:嘿,老伙计!快上船来!今天我们要去哪片海域寻找财宝?
  1. 为什么开发者偏爱这个例子?

A. 验证“指令遵循”(Instruction Following)

这是最核心的技术原因。如果你告诉模型“请解释量子力学”,它能解释;但如果你说“请像个海盗一样解释量子力学”,这就要求模型不仅要理解知识,还要在输出时套用一层完全不同的语言模版(Pattern)。如果模型在解释中途忘了用“Arrr”,说明它的长文本指令保持能力还有待提高。

B. 评估“风格迁移”能力

模型需要从庞大的“参数数据库”(正如你之前类比的那样)中抽取出关于“海盗”的词元关联。这能直观地展示模型对不同文化语境、语调和角色扮演(Roleplay)的理解深度。

C. 软件工程的传统:九月十九日

在西方互联网文化中,有一个非官方的节日叫 “国际像海盗一样说话日” (International Talk Like a Pirate Day)。很多早期的 AI 研究员和程序员都是极客文化爱好者,于是“海盗”就成了和 "Hello World" 一样经典的测试案例。

  1. 为什么不选别的风格?

比起“像教授一样说话”或“像医生一样说话”,海盗风格的方差(Variance)极大。

  • “教授风格”可能只是多用点高级词汇,模型容易混过去。
  • “海盗风格”要求模型改变词法、句法甚至世界观。这种巨大的跨度(Steerability)是压力测试(Stress Test)模型的绝佳选择。
  1. 现在的大模型能做到什么程度?

现在的大模型(如 GPT-4 或 Claude)不仅能模拟海盗,还能精准地融合风格。你可以尝试给它一个更复杂的任务:

“请像个喝醉了的海盗,但同时又是一个博学的统计学家,来给我讲讲什么是随机森林。”

这种多重约束的叠加,是检验一个模型是否真的具备高维空间语义组合能力(即你之前说的“插值与重组”)的最佳方式。

由于LLM索引的知识和程序是插值式的,你可以在潜在空间中自由移动,探索附近的位置。例如,一个略有不同的提示,比如“解释Python列表排序,但要像海盗一样回答”,仍然会指向数据库中非常相似的位置,从而得到一个非常接近但并不完全相同的答案。你可以使用成千上万种不同的提示,每一种都会得到一个相似但略有不同的答案。这就是为什么需要进行提示设计。你最初随意的提示并不一定就是你任务的最佳选择。LLM不会理解你的意思,也不会以最佳方式执行——它只会从众多可能的路径中,找到你的提示所指向的程序。

提示工程是指通过反复试验,在潜在空间中搜索似乎最适合目标任务的查找查询。这与在谷歌搜索中尝试不同的关键词并无二致。如果学习记忆模块(LLM)真的理解了你的问题,那么就不需要这种搜索过程了,因为无论你的提示词是使用“重写”而不是“改写”,还是加上“一步一步思考”,所传达的关于目标任务的信息量都不会改变。永远不要想当然地认为学习记忆模块第一次就能“理解”——记住,你的提示词只是浩瀚程序海洋中的一个地址,所有这些程序都是学习完成大量词法序列的副产品。

大语言模型难以学习可泛化的程序

Deep learning models struggle to learn generalizable programs

大语言模型的问题不仅在于它们只能盲目地重复应用训练时记忆的模式,也不仅在于它们对输入呈现方式高度敏感。即使你只需要查询并应用一个众所周知的程序,并且你确切地知道如何在潜在空间中处理这个程序,你仍然会面临一个重大问题:大语言模型记忆的程序通常泛化能力很差。它们对某些输入值有效,而对另一些输入值则无效。对于编码任何离散逻辑的程序来说,这种情况尤为突出。

考虑将两个数字相加的问题,这两个数字用字符序列表示,例如“4 3 5 7 + 8 9 3 6”。尝试用数十万个这样的数字对训练一个 Transformer 模型:你会得到非常高的准确率。非常高,但并非 100%——你会经常看到错误的答案,因为 Transformer 模型无法编码精确的加法算法(就是你在小学学过的那种)。它实际上是通过在训练阶段获得的数据点之间进行插值来猜测输出结果。

这也适用于最先进的逻辑学习模型(LLM)——至少那些没有被明确硬编码为执行类似“4357 + 8936”这样的Python代码片段来给出正确答案的模型。它们已经见过足够多的数字加法示例,能够进行加法运算,但准确率只有70%左右——相当令人失望。此外,它们的准确率很大程度上取决于加数字的种类,常用数字越多,准确率越高。

大语言模型即使学习了数百万个示例,也无法最终掌握精确的加法算法,原因在于它本质上只是一系列简单的、连续的几何变换, 将一个向量空间映射到另一个向量空间。这种模型非常适合感知模式识别,但却不适合编码任何类型的离散逻辑步骤,例如位值或进位等概念。它所能做的只是将一个数据流形 X 映射到另一个流形 Y,前提是存在一个从 X 到 Y 的可学习的连续变换。大语言模型可以被解释为一种程序,但反过来, 大多数程序都无法用大语言模型来表示对于大多数任务,要么不存在能够解决该任务的、规模合理的神经网络,要么即使存在,也可能无法学习:相应的几何变换可能过于复杂,或者可能没有合适的数据可供学习。

个人注:

这个问题触及了大型语言模型(LLM)最核心的弱点之一:“模拟计算”与“真实逻辑”的断层。

你引用的这段话非常精准地捕捉到了模型在处理数学时的统计学本质。目前,最先进的模型(如 GPT-4, Claude 3, Gemini 1.5)主要通过以下三种路径来处理这个问题:

  1. 从“概率预测”转向“调用工具”(代码解释器)

正如文中所言,早期的模型试图通过“预测下一个数字”来做加法。现在的大模型如果发现问题涉及复杂计算,会产生一种“内省”机制

  • 策略:模型不再在大脑里“硬算”,而是写下一段 Python 代码。
  • 逻辑:它知道自己不擅长算 \(4357 + 8936\),但它知道 Python 擅长。于是它在后台运行 print(4357 + 8936),然后把结果读取回来。
  • 现状:这是目前商业模型(如 ChatGPT Plus)达到 100% 准确率的主流方式。
  1. 思维链(CoT)与分步计算

对于不能调用代码的场景,模型会使用“思维链”来模拟人类的列竖式过程:

  • 原始方式:直接问 \(4357+8936\),模型可能因为高维空间里的词元(Token)干扰,随机给出一个接近但错误的数字(如 13283)。
  • 进阶方式:要求模型“一步步算”。它会写出:
    1. 个位:\(7+6=13\),写 3 进 1。
    2. 十位:\(5+3+1=9\)
    3. ...
  • 原理:通过把一个复杂的大概率预测任务分解为多个简单的小概率预测任务,准确率会显著提升,但依然无法达到 100%。
  1. 为什么“常用数字”准确率更高?(词元化问题)

这句话提到的“取决于数字种类”揭示了 Tokenization(词元化) 的弊端:

  • 例子:数字 123 在模型眼里可能是一个整体的 Token,而 4357 可能会被切分成 4357 两个片段。
  • 统计偏见:如果训练数据中频繁出现 100 + 100 = 200,模型会形成极强的参数关联(类似于你之前说的“插值数据库”里的高频点)。但如果是冷门的、从未见过的长数字组合,模型就像是在地图的“荒野区”进行盲目插值,错误率激增。
  1. 架构上的最新尝试:思维时间(Thinking Time)

最前沿的研究(如 OpenAI 的 o1 系列模型)引入了推理缩放(Inference-time Scaling)

  • 模型在回答前会进行大规模的自我博弈和逻辑检查。
  • 它会反复验证自己的中间步骤,如果发现 \(7+6\) 算成了 \(12\),它会自我纠正。这让模型在不依赖外部代码的情况下,纯靠神经网络结构也能处理极其复杂的数学竞赛题。

总结

目前的大模型处理数学题的现状可以泛化为:“能借外力(代码)就借外力;不能借外力就靠拆解步骤;实在不行就靠‘死记硬背’加上一点高维插值的运气。” 正如你引用的内容所说,如果只让模型“凭直觉”脱口而出,它们在本质上依然是脆弱的统计模拟器,而非逻辑处理器。

将机器学习模型拟人化的风险

The risk of anthropomorphizing machine-learning models

我们对图像、声音和语言的理解根植于我们作为人类的感知运动经验。机器学习模型无法获得此类经验,因此无法以人类可理解的方式理解其输入。通过向模型输入大量训练样本,我们让它们学习一种几何变换,将数据映射到特定样本集上的人类概念,但这种映射只是我们脑海中原始模型的简化草图——原始模型源于我们作为具身主体的经验。它就像镜子中模糊的影像(见图 19.4)。你创建的模型会采取任何可行的捷径来拟合其训练数据。

img图 19.4:当前机器学习模型:如同镜子中的模糊影像

当代人工智能的一大风险在于误解大语言模型的运作方式,并高估其能力。人类的一个基本特征是 心智理论theory of mind):我们倾向于将意图、信念和知识投射到周围的事物上。例如,在石头上画个笑脸,在我们看来,它就“快乐”了。应用于深度学习,这意味着当我们训练能够使用语言的模型时,我们会误以为模型能够像我们一样“理解”它们生成的词序列的内容。然而,一旦训练数据中出现任何与现有模式的细微偏差,模型就会生成完全荒谬的答案,这让我们感到惊讶。

One real risk with contemporary AI is misinterpreting what deep learning models do and overestimating their abilities. A fundamental feature of humans is our theory of mind: our tendency to project intentions, beliefs, and knowledge on the things around us.

作为机器学习从业者,务必牢记这一点,切勿陷入“神经网络理解它们所执行的任务”的误区——它们并不理解,至少无法以我们能够理解的方式理解。它们的训练任务与我们想要教给它们的任务截然不同,也远比我们想要教给它们的任务狭窄得多:后者是将训练输入逐点映射到训练目标。一旦它们接触到任何与训练数据相悖的内容,就会出现各种匪夷所思的错误。

规模并不是你所需要的全部

Scale isn’t all you need

我们能否通过不断扩展模型来克服深度学习的局限性?规模就是我们所需要的一切吗?这长期以来一直是该领域的主流观点,尤其是在2023年初,即大语言模型(LLM)热潮达到顶峰时,这种观点更为突出。当时,GPT-4刚刚发布,它本质上是GPT-3的扩展版本:更多的参数,更多的训练数据。其性能的显著提升似乎表明,我们可以继续扩展模型——或许会出现GPT-5,它只是在GPT-3的基础上进行了扩展,而通用人工智能(AGI)将由此自发涌现( spontaneously emerge )。

持这种观点的人会以“缩放定律(scaling laws)”作为证据。缩放定律是指大语言模型规模(以及训练数据集的规模)与其在特定任务上的性能之间的一种经验关系。它们表明,增加模型规模能够以可预测的方式可靠地提升性能。但缩放定律的拥护者们忽略了一个关键点:他们用来衡量“性能”的基准实际上是记忆测试,也就是我们常给大学生布置的那种测试。大语言模型(LLM)之所以能在这些测试中表现出色,是因为它们能够记住答案,因此,向模型中塞入更多的问题和答案自然会相应地提升它们的性能。

事实上,模型规模的扩大并没有解决我之前列举的问题——无法适应新事物、对措辞过于敏感以及无法推断出适用于推理问题的通用程序——因为这些问题是曲线拟合(深度学习的范式)固有的。我早在2017年就开始指出这些问题,而时至今日,我们仍在与它们作斗争——尽管现在的模型规模已经扩大了四五个数量级,知识也更加丰富。我们之所以在这些问题上毫无进展,是因为我们使用的模型依然如故。七年多来,它们始终如一——仍然是通过梯度下降法拟合到数据集的参数曲线,仍然使用Transformer架构。

通过堆叠更多层和使用更多训练数据来扩展当前的深度学习技术并不能解决深度学习的根本问题:

  • 大语言模型只能使用训练时记忆的插值程序。它们无法在推理时自主合成全新的程序来适应全新的情况。
  • 即使在已知情况下,这些插值程序也存在泛化性问题,导致对措辞和混淆因素特征过于敏感。
  • 大语言模型在表示能力上存在局限性,大多数你想学习的程序都无法用数据流形的连续几何变形来表示。算法推理任务尤其如此。
  • Deep-learning models are limited to using interpolative programs they memorize at training time. They are not able, on their own, to synthesize brand-new programs at inference time to adapt to substantially novel situations.
  • Even within known situations, these interpolative programs suffer from generalization issues, which lead to oversensitivity to phrasing and confounder features.
  • Deep learning models are limited in what they can represent, and most of the programs you may wish to learn can’t be expressed as a continuous geometric morphing of a data manifold. This is true in particular of algorithmic reasoning tasks.

让我们仔细看看生物智能与深度学习方法之间的区别。

自动机与智能体

Automatons vs. intelligent agents

大语言模型从输入到输出的直接几何变换与人类的思维和学习方式存在根本差异。这不仅仅是因为人类是通过自身体验而非接受明确的训练示例来学习。人脑与可微参数函数相比,完全是两码事。

让我们稍微跳出这个框架,思考一下:智能的目的是什么?它最初是如何产生的?我们只能进行推测,但我们可以做出一些有理有据的推测。我们可以从大脑——产生智能的器官——入手。大脑是一种进化适应,它是一种机制,经过数亿年的演化,在自然选择的引导下,通过随机的试错逐步发展而成,极大地增强了生物体适应环境的能力。大脑最初出现于五亿多年前,用于存储和执行行为程序。行为程序就是一系列指令,使生物体能够对环境做出反应:“如果发生这种情况,就那样做。”它们将生物体的感觉输入与其运动控制联系起来。最初,大脑的作用是将行为程序(以神经连接模式的形式)硬编码,从而使生物体能够对感觉输入做出适当的反应。昆虫的大脑仍然以这种方式运作——苍蝇、蚂蚁、秀丽隐杆线虫(见图 19.5)等等。由于这些程序的原始“源代码”是 DNA,它会被解码为神经连接模式,因此进化突然能够以一种很大程度上不受限制的方式搜索行为空间——这是一次重大的进化转变。

img图 19.5 :秀丽隐杆线虫的大脑网络:由自然进化“编程”的行为自动机。图由 Emma Towlson 绘制(出自 Yan 等人发表于《自然》杂志 2017 年 10 月的论文“网络控制原理预测秀丽隐杆线虫连接组中的神经元功能” )。

进化是程序员,而大脑则是计算机,它们小心翼翼地执行着进化赋予的代码。由于神经连接是一种非常通用的计算基础,所有拥有大脑的物种的感知运动空间都可能突然开始急剧扩张。眼睛、耳朵、下颚、四条腿、二十四条腿——只要你拥有大脑,进化就会为你制定出能够充分利用这些器官的行为程序。大脑可以处理你赋予它的任何感觉模式,或者任何感觉模式的组合。

不过,请注意,这些早期大脑本身并不具备真正的智能。它们更像是 自动装置:它们只会执行预先编码在生物体DNA中的行为程序。它们只能像恒温器、列表排序程序或训练有素的(人工)深度神经网络那样,被称作“智能”。这是一个重要的区别,所以让我们仔细探讨一下:自动装置和真正的智能体之间究竟有何不同?

局部泛化与极端泛化

Local generalization vs. extreme generalization

人工智能领域长期以来一直存在混淆智能自动化概念的问题。自动化系统(或自动机)是静态的,其设计目的是在特定情境下完成特定任务——“如果发生这种情况,那么就会发生这种情况”——而智能体则可以即时适应新的、意想不到的情况。当自动机遇到与其“编程”目标不符的情况时(无论我们指的是人类编写的程序、进化生成的程序,还是将模型拟合到训练数据集上的隐式编程过程),它都会失败。

与此同时,像我们人类一样的智能体将运用其流体智力来寻找前进的方向。如何区分一个背诵了过去三年考题但对学科一无所知的学生和一个真正理解了学科知识的学生呢?答案是:给他们一个全新的问题。

人类的能力远不止像深度神经网络或昆虫那样,将即时刺激映射到即时反应。我们可以即时构建关于当前处境、自身以及他人的复杂抽象模型,并利用这些模型预测不同的未来可能性,进行长期规划。我们能够迅速适应突发情况,只需稍加练习就能掌握新技能。

这种运用抽象思维推理能力来应对我们始料未及的经历的能力,是人类认知能力的本质特征。我称之为 极端泛化extreme generalization ):一种仅凭少量数据甚至完全没有新数据,就能适应全新、从未经历过的情况的能力。这种能力是人类和高等动物展现智能的关键所在。

This ability to use abstraction and reasoning to handle experiences we weren’t prepared for is the defining characteristic of human cognition. I call it extreme generalization: an ability to adapt to novel, never-before-experienced situations using little data or even no new data at all. This capability is key to the intelligence displayed by humans and advanced animals.

这与类似自动机的系统截然不同。一个非常僵化的自动机完全不具备任何泛化能力;它无法处理任何事先没有明确告知的信息。Python 字典或用硬编码的 if-then-else 语句实现的简单问答程序就属于此类。深度神经网络的表现略好一些:它们可以成功处理与自身熟悉的输入略有偏差的情况,而这正是它们的用处所在。我们在第八章中提到的猫狗分类模型可以对之前从未见过的猫狗图片进行分类,只要这些图片与训练时使用的图片足够接近即可。然而,深度神经网络的泛化能力仅限于我所说的 局部泛化(local generalization)(见图 19.6):当输入开始偏离网络在训练时所见的内容时,深度神经网络执行的输入到输出的映射很快就会失效。深度神经网络只能泛化到 已知的未知情况,即模型开发过程中预先设想并在训练数据中广泛存在的变异因素,例如宠物照片的不同拍摄角度或光照条件。这是因为深度神经网络通过流形上的插值进行泛化(回顾第五章):输入空间中的任何变异因素都需要被它们学习到的流形所捕捉。因此,基础数据增强对于提升深度神经网络的泛化能力至关重要。与人类不同,这些模型无法在数据匮乏或完全没有数据的情况下进行即兴发挥。

img图 19.6:局部泛化与极端泛化

例如,考虑一下学习合适的发射参数以使火箭成功登月的问题。如果使用深度神经网络来完成这项任务,并使用监督学习或强化学习进行训练,则需要输入数万甚至数百万次的发射试验:需要对输入空间进行密集采样,才能使其学习到从输入空间到输出空间的可靠映射。相比之下,作为人类,我们可以利用抽象能力构建物理模型——火箭科学——并推导出精确的解决方案,只需一次或几次试验即可使火箭成功登月。类似地,如果开发一个控制人体的深度神经网络,并希望它学会安全地在城市中穿行而不被车辆撞到,则该神经网络必须在各种情况下经历数千次的失败,才能推断出车辆的危险性并发展出相应的避让行为。如果将其置于一个陌生的城市,该神经网络则必须重新学习大部分已掌握的知识。另一方面,人类无需经历死亡就能学习安全的行为——这同样要归功于我们对新情况进行抽象建模的能力。

智能的目的

The purpose of intelligence

区分高度适应性的智能体和僵化的自动机,让我们回到大脑的进化问题上。大脑最初只是自然进化发展出行为自动机的媒介,为什么最终会变得智能呢?就像每一个重要的进化里程碑一样,它的发生是因为自然选择的约束促成了它的出现。

大脑负责行为的产生。如果生物体所面临的情境大多是静态的且预先已知的,那么行为的产生就很容易:进化只需通过随机的试错法就能找到正确的行为模式,并将其硬编码到生物体的DNA中。大脑进化的最初阶段——大脑如同自动机——就已经达到了最优状态。然而,至关重要的是,随着生物体复杂性(以及随之而来的环境复杂性)的不断增加,动物所面临的情境变得更加动态且难以预测。仔细观察,你会发现你生命中的每一天都与你以往经历的任何一天都截然不同,也与你的任何进化祖先经历过的任何一天都截然不同。你需要能够不断面对未知和突发的情况。进化不可能找到并硬编码你从几个小时前醒来后为了成功应对一天而执行的行为序列到DNA中。它必须每天随机生成。

大脑作为一台优秀的行为生成引擎,自然而然地适应了这种需求。它优化了自身的适应性和普适性,而不再仅仅优化对特定情境的适应性。这种转变在进化史上可能多次发生,最终造就了进化上相距甚远的动物——猿类、章鱼、渡鸦等等。智能是对复杂多变的生态系统所带来的挑战的一种回应。

这就是智能的本质:它是一种能够高效利用现有信息,在充满不确定性和瞬息万变的未来中做出成功决策的能力。笛卡尔所谓的“理解”正是这种卓越能力的关键:它能够挖掘过往经验,构建模块化、可复用的抽象概念,并能快速将其应用于应对新情况,实现高度的泛化能力。

提升泛化程度

Climbing the spectrum of generalization

粗略地泛化一下,生物智能的进化史可以看作是逐步提升泛化能力(spectrum of generalization)的过程。最初,生物的大脑如同自动机一般,只能进行局部泛化。随着时间的推移,进化开始产生能够进行更广泛泛化的生物,从而在日益复杂多变的环境中生存繁衍。最终,在过去的几百万年里——从进化的角度来看,这不过是转瞬即逝——某些人科物种开始发展出能够进行极端泛化的生物智能,这开启了人类世(Anthropocene),并永远地改变了地球生命的历史。

过去70年人工智能的发展历程与这一演变有着惊人的相似之处。早期的人工智能系统是纯粹的自动机,例如20世纪60年代的ELIZA聊天程序或SHRDLU:[2]1970 年,人工智能诞生,能够根据自然语言指令操控简单的物体。到了 20 世纪 90 年代和 21 世纪初,我们见证了机器学习系统的兴起,这些系统具备局部泛化能力,可以应对一定程度的不确定性和新奇情况。21 世纪 10 年代,深度学习进一步提升了这些系统的局部泛化能力,使工程师能够使用更大的数据集和更具表现力的模型。

今天,我们或许正站在下一个进化阶段的开端。我们正朝着能够实现广泛泛化的系统迈进,我将其定义为在单一的广泛任务领域内处理未知未知情况的能力(包括系统未训练处理且其创造者无法预见的情况)。例如,能够安全应对任何情况的自动驾驶汽车,或者能够通过“沃兹智能测试”(即进入一个随机的厨房并煮一杯咖啡)的家用机器人:( “Woz test of intelligence” — entering a random kitchen and making a cup of coffee )[3]通过将深度学习与精心手工打造的世界抽象模型相结合,我们已经在实现这些目标方面取得了明显的进展。

然而,深度学习范式一直局限于认知自动化:“人工智能”中的“智能”标签是一个范畴错误。更准确的说法是,我们应该称之为“人工认知”,而“认知自动化”和“人工智能”则是其中两个几乎独立的子领域。在这个划分下,人工智能将是一个全新的领域,几乎所有东西都还有待探索。

我并非要贬低深度学习的成就。认知自动化非常有用,大语言模型仅凭数据就能自动执行任务,这代表了一种特别强大的认知自动化形式,远比显式编程更实用、更灵活。如果能做好这一点,几乎可以改变所有行业的格局。但它距离人类(或动物)智能还有很长的路要走。到目前为止,我们的模型只能进行局部泛化:它们通过从X到Y的密集采样数据点中学习到的平滑几何变换,将空间X映射到空间Y,而空间X或Y中的任何扰动都会使这种映射失效。它们只能泛化到与过去数据相似的新情况,而人类认知能够进行极强的泛化,快速适应全新的情况,并为长远的未来情况做好规划。

如何培养智力

How to build intelligence

到目前为止,你已经了解到,智能远不止深度学习所使用的那种潜在流形插值。那么,我们需要什么才能开始构建真正的智能呢?目前我们还在努力攻克哪些核心难题?

万花筒假说

The kaleidoscope hypothesis

智力是指运用过往经验(以及与生俱来的先验知识)来应对全新且意想不到的未来情境的能力。然而,如果你即将面对的未来真的完全陌生——与你以往所见的一切都毫无关联——那么无论你多么聪明,都将无力应对。

智慧之所以有效,是因为任何事物都并非完全没有先例。当我们遇到新事物时,我们能够通过类比过去的经验,并用我们长期积累的抽象概念来理解它。一个17世纪的人第一次看到喷气式飞机,可能会把它描述成一只巨大、轰鸣的金属鸟,而且它不会拍打翅膀。汽车呢?那就像一辆没有马的马车。如果你想教小学生物理,你可以解释电就像水管里的水,或者时空就像一张被重物扭曲的橡胶膜。

除了这些清晰明确的类比之外,我们每时每刻、每个念头都在进行着细微的、隐含的类比。类比是我们应对生活的方式。去一家新的超市购物?你会通过把它和去过的类似商店联系起来找到方向。和新认识的人交谈?他们会让你想起以前认识的几个人。即使是看似随机的图案,比如云的形状,也能立刻在我们脑海中唤起生动的画面——大象、船、鱼。

这些类比并非仅仅存在于我们的想象中:物理现实本身就充满了同构现象。电磁力与引力类似。由于共同的起源,动物在结构上彼此相似。二氧化硅晶体与冰晶相似。等等。

我称之为万花筒假说:我们对世界的体验似乎充满了难以置信的复杂性和永无止境的新奇感,但在这片复杂海洋中,万物又彼此相似。描述你所生活的宇宙所需的独特意义原子数量相对较少,而你周围的一切都是这些原子的重组:几个种子,无穷无尽的变化,就像万花筒内部的运作一样,几颗玻璃珠在镜面系统的反射下,呈现出丰富多彩、看似无穷无尽的图案(见图19.7)。

img图 19.7:万花筒仅用几颗彩色玻璃珠就能产生丰富(但重复)的图案。

智能的本质:抽象思维的习得与重组

The essence of intelligence: Abstraction acquisition and recombination

智慧是一种能力,它能从你的经验中挖掘出那些看似可以在许多不同情境中重复使用的意义原子——万花筒的核心珠子。一旦提取出来,它们就被称为抽象概念。每当你遇到新的情境,你都会通过即时地从你的经验库中重新组合抽象概念来理解它,从而编织出一个适应当前情境的全新“模型”。

该过程包含两个主要部分:

  • 抽象获取——从经验流或数据流中高效提取简洁、可重用的抽象概念。这涉及识别底层结构、原则或不变式。
  • 即时重组——以新颖的方式高效地选择和重组这些抽象概念,以模拟新的问题和情况,即使是与过去经验相去甚远的问题和情况。
  • Abstraction acquisition — Efficiently extracting compact, reusable abstractions from a stream of experience or data. This involves identifying underlying structures, principles, or invariants.
  • On-the-fly recombination — Efficiently selecting and recombining these abstractions in novel ways to model new problems and situations, even ones far removed from past experience.

效率至关重要。你的智力水平取决于你从有限的经验中高效地获取有效抽象概念的能力,以及你如何高效地将这些概念重新组合,以应对不确定性和新情况。如果你需要数十万小时的练习才能掌握一项技能,那么你的智力并不高。如果你需要列举棋盘上所有可能的走法才能找到最佳方案,那么你的智力也并不高。

这就是经典深度学习范式存在两大主要问题的根源:

  • 这些模型完全缺乏动态重组能力。它们在训练阶段通过梯度下降法能够很好地获取抽象概念,但由于设计上的缺陷,它们在测试阶段完全无法重组已有的信息。它们的行为就像一个静态的抽象数据库,功能仅限于检索。它们缺失了关键信息的一半——而这恰恰是最重要的一半。
  • 它们效率极低。梯度下降法需要海量数据才能提炼出简洁的抽象概念——比人类需要的数据量要多几个数量级。
  • These models are completely missing on-the-fly recombination. They do a decent job at acquiring abstractions at training time, via gradient descent, but by design they have zero ability to recombine what they know at test time. They behave like a static abstract database, limited purely to retrieval. They’re missing half of the picture — the most important half.
  • They’re terribly inefficient. Gradient descent requires vast amounts of data to distill neat abstractions — many orders of magnitude more data than humans.

那么我们如何才能突破这些限制呢?

设定正确目标的重要性

The importance of setting the right target

生物智能是对自然界提出的一个问题的解答。同样,如果我们想要开发真正的人工智能,首先我们需要提出正确的问题。归根结底,人工智能系统的能力反映了它们被设计和优化时所针对的目标。

在系统设计中,你经常会看到一种现象,那就是捷径法则shortcut rule):如果你专注于优化某个成功指标,你或许能实现目标,但代价是牺牲系统中所有未被该指标涵盖的部分。最终,你会走上所有可能的捷径。你的创造物是由你给自己设定的激励机制塑造的。

这种情况在机器学习竞赛中屡见不鲜。2009 年,Netflix 举办了一项挑战赛,承诺向在电影推荐任务中得分最高的团队颁发 100 万美元的奖金。最终,Netflix 从未采用过获胜团队开发的系统,因为它过于复杂且计算量巨大。获胜团队只优化了预测准确率——这也是他们获得奖励的目标——却牺牲了系统的其他所有重要特性:推理成本、可维护性和可解释性。这条捷径法则在大多数 Kaggle 竞赛中也同样适用——Kaggle 获胜团队开发的模型几乎从未被实际应用于生产环境。

在过去的几十年里,人工智能领域充斥着各种捷径。上世纪70年代,心理学家兼计算机科学先驱艾伦·纽厄尔(Allen Newell)担心他的领域在构建完善的认知理论方面进展缓慢,于是为人工智能提出了一个新的宏伟目标:下棋。他的理由是,人类下棋似乎需要——甚至可以说是必须——感知、推理和分析、记忆和读书学习等能力。那么,如果我们能够制造出一台下棋机器,它肯定也具备这些能力,对吧?

二十多年后,梦想成真:1997年,IBM的“深蓝”击败了世界最佳棋手加里·卡斯帕罗夫。研究人员随后不得不面对这样一个事实:创造出国际象棋冠军人工智能并没有让他们对人类智能有太多了解。“深蓝”的核心A*算法并非人脑模型,也无法推广到除类似棋类游戏之外的其他任务。事实证明,构建一个只会下国际象棋的人工智能比构建一个真正的人工智能更容易——于是,研究人员选择了这条捷径。

迄今为止,人工智能领域衡量成功的主要标准是解决特定任务,从国际象棋到围棋,从MNIST分类到ImageNet,从高中数学考试到律师资格考试。因此,该领域的发展史是由一系列“成功”案例构成的,在这些案例中, 我们找到了解决这些任务的方法,但并未展现任何智能

如果这听起来令人惊讶,请记住,类人智能的特征并非在于掌握任何特定任务的技能,而在于适应新环境、高效获取新技能并精通前所未见的任务的能力。通过固定任务,你可以对需要完成的工作进行任意精确的描述——无论是通过硬编码人类提供的知识,还是通过提供海量数据。这使得工程师只需添加数据或硬编码的知识,就能“购买”人工智能的更多技能,而无需提升人工智能的泛化能力(参见图 19.8)。如果你拥有近乎无限的训练数据,即使是像最近邻搜索这样非常粗糙的算法也能以超人的水平玩电子游戏。同样地,如果你有近乎无限多的由人类编写的 if-then-else 语句——也就是说,直到你对游戏规则做出一个人类可以立即适应的小改变——那将需要对不智能的系统进行重新训练或从头开始重建。

img图 19.8:低泛化系统在给定无限的特定任务信息的情况下,可以在固定任务上达到任意技能。

简而言之,通过固定任务,你就消除了处理不确定性和新事物的必要性。而智能的本质在于处理不确定性和新事物的能力,因此你实际上也消除了对智能的需求。而且,由于找到一个针对特定任务的低效解决方案总是比解决智能的普遍问题容易得多,所以你总是会选择这条捷径。人类可以运用他们的通用智能来学习任何新任务的技能,但反过来,却无法从一系列特定任务的技能转化为通用智能。

新目标:即时适应

A new target: On-the-fly adaptation

要让人工智能真正具备智能,并能够应对现实世界惊人的多变性和瞬息万变的本质,首先,我们需要转变思路,不再追求特定任务的技能,而是着眼于提升其泛化能力本身。我们需要新的进度指标来帮助我们开发出更加智能的系统:这些指标能够指明正确的方向,并为我们提供可操作的反馈信号。如果我们仍然将目标设定为“创建一个能够解决任务X的模型”,那么就会陷入“捷径”的陷阱,最终我们只会得到一个能够完成任务X的模型,仅此而已。

在我看来,智能可以精确地量化为一个效率比率:即你掌握的关于世界的相关信息量(可以是过去的经验或先验知识)与你未来可操作的领域(即你能够做出适当行为的一系列新情况,你可以将其视为你的技能集)之间的转换比率。更智能的智能体能够利用更少的过去经验来处理更广泛的未来任务和情况。要衡量这个比率,你只需要固定系统可用的信息——它的经验和先验知识——并在一组已知与系统已接触过的情况有足够差异的参考情境或任务上测试它的表现。努力最大化这个比率应该能让你接近智能。至关重要的是,为了避免作弊,你需要确保只在系统未被编程或训练处理的任务上测试它——事实上,你需要的是系统创建者无法预见的任务。

2018 年和 2019 年,我开发了一个名为“ 通用人工智能抽象与推理语料库 (ARC-AGI)”的基准数据集:[4]ARC-AGI旨在捕捉智能的这一定义。它既适用于机器也适用于人类,其形式与人类智商测试(例如瑞文渐进矩阵测试)非常相似。测试时,你会看到一系列“任务”。每个任务都通过三到四个“示例”进行解释,这些示例以输入网格和相应的输出网格的形式呈现(参见图19.9)。之后,你会得到一个全新的输入网格,并有三次机会生成正确的输出网格,之后才能进入下一个任务。

img图 19.9:ARC-AGI 任务:通过几个输入输出对示例来演示任务的性质。给定一个新的输入,您必须构建相应的输出。

与智商测试相比,ARC-AGI 有两点独特之处。首先,ARC 旨在通过测试你从未接触过的任务来衡量你的泛化能力。这意味着 ARC-AGI 是一款你无法事先练习的游戏,至少理论上如此:你将要面对的任务有着其独特的逻辑,你必须在测试过程中迅速理解。你无法简单地记住过去任务中的特定策略。

此外,ARC-AGI 试图控制你带入测试的先验知识。你不可能完全从零开始解决一个新问题——你会运用已有的技能和信息。ARC-AGI 假设所有测试者都应从一组被称为“核心知识先验”的知识体系出发,这些知识体系代表了人类与生俱来的知识系统。与智商测试不同,ARC-AGI 的任务不会涉及后天习得的知识,例如英语句子。

ARC奖

ARC Prize

为了加速人工智能系统向着能够像ARC-AGI所衡量的那样进行流畅抽象和推理的方向发展,我于2024年与Mike Knoop合作创立了非营利组织ARC Prize基金会。该基金会每年举办一次竞赛,奖金丰厚(2024年奖金超过100万美元),旨在激励研究人员开发能够解决ARC-AGI问题并展现真正流畅智能的人工智能。

ARC-AGI 基准测试已经证明其对当前流行的深度学习扩展范式具有极强的抵抗力。大多数其他基准测试在LLMs时代很快就达到了饱和状态。这是因为它们可以通过记忆来破解,而 ARC-AGI 的设计本身就具有这种抵抗力。从 2019 年 ARC-AGI 首次发布到 2025 年,基础 LLM 的规模扩大了约 5 万倍——例如,从 GPT-2(2019 年)到 GPT-4.5(2025 年),但它们在 2019 年版 ARC-AGI 上的性能仅从 0% 提升到 10% 左右。考虑到读者可以轻松获得 95% 以上的分数,这样的表现并不理想。

如果将系统规模扩大 5 万倍,却仍然没有取得实质性进展,这就像一个巨大的警示信号,提醒你需要尝试新的方法。仅仅扩大模型规模或使用更多数据进行训练并不能解锁 ARC-AGI 所需的那种流畅智能。ARC-AGI 清楚地表明,即时重组能力对于解决推理问题至关重要。

测试时间适应时代

The test-time adaptation era

2024年,一切都发生了改变。那一年,话语体系发生了重大转变——而ARC Prize正是促成这一转变的部分催化剂。2023年盛行的“规模就是一切”的信条开始让位于“实际上,我们需要的是动态重组”。2024年12月公布的竞赛结果令人瞩目:领先的解决方案并非简单地扩展现有的深度学习架构,而是全部采用了某种形式的测试时自适应(test-time adaptation)(TTA)——无论是测试时搜索还是测试时训练。

TTA 指的是人工智能系统在测试过程中利用所提供的具体问题信息进行主动推理或学习的方法——这是经典深度学习范式所缺乏的关键组成部分。

实现测试时自适应有多种方法:

  • 测试时训练——该模型根据测试任务中给出的示例,使用梯度下降法调整其一些参数。
  • 搜索方法——系统在测试时会搜索许多可能的推理步骤或潜在解决方案,以找到最佳方案。这可以通过自然语言(思维链合成)或在符号化的、可验证的程序空间(程序合成)中完成。
  • Test-time training — The model adjusts some of its parameters based on the examples given in the test task, using gradient descent.
  • Search methods — The system searches through many possible reasoning steps or potential solutions at test time to find the best one. This could be done in natural language (chain-of-thought synthesis) or in a space of symbolic, verifiable programs (program synthesis).

这些TTA方法使人工智能系统比静态模型更灵活,更能应对新情况。2024年ARC Prize的所有顶级参赛作品都采用了这些方法。

2024年12月底,在ARC-AGI大赛结束后不久,OpenAI预览了其o3测试时推理模型(test-time reasoning model),并利用ARC-AGI展示了其前所未有的强大能力。该模型利用大量的测试时计算资源,在每项任务成本约为200美元的情况下取得了76%的得分,在每项任务成本超过2万美元的情况下取得了88%的得分,超越了人类的基准水平。我们首次看到了展现出真正流体智能迹象的人工智能模型。这一突破引发了对类似技术的新一轮关注和投资——测试时自适应时代由此开启。重要的是,ARC-AGI是当时为数不多的几个能够清晰表明重大范式转变正在进行的基准测试之一。

个人注:o3 test-time reasoning model 和普通的LLM模型的区别?

从你提到的 o1o3 系列模型来看,这标志着大模型从“直觉快思考”向“逻辑慢思考”的历史性转变。

要理解 Test-time Reasoning(推理时推理) 与普通 LLM 的区别,最核心的差异在于:普通模型在回复前只计算一次,而 o3 在回复前进行了一场大规模的“自我博弈”和“逻辑搜索”。

  1. 核心哲学的改变:System 1 vs. System 2

我们可以用诺贝尔奖得主丹尼尔·卡尼曼的《思考,快与慢》来类比:

  • 普通 LLM(快思考/系统 1):像是一个直觉极强的人。当你问它“4357 + 8936”时,它是基于概率“脱口而出”。如果概率分布里这个结果很模糊,它就会产生幻觉。它的计算量在模型训练完的那一刻就固定了。
  • o3 模型(慢思考/系统 2):像是一个随身带着草稿纸的专家。在给你最终答案前,它会在后台进行长时间的思考(Thinking)。它会反复检查自己的中间步骤,如果发现逻辑不通,会擦掉重写。
  1. 推理计算量(Inference Scaling Law)

这是 o3 最具革命性的地方。

  • 普通模型:性能主要取决于训练时的算力和数据量。一旦训练完成,回复每个问题消耗的电量(计算量)基本是恒定的。
  • o3 模型:引入了推理侧的缩放定律。这意味着:给模型更多的“思考时间”,它的智力就会线性甚至指数级增长。
    • 简单问题:它思考 1 秒,直接给答案。
    • 奥数难题:它可以在后台思考 10 秒、30 秒甚至更久,直到通过搜索算法找到最优解。
  1. 搜索与强化学习(RL)的结合

普通 LLM 只是在预测下一个词,而 o3 在后台运行着类似 AlphaGo 的机制:

  1. 思维链搜索 (Chain of Thought Search):它会尝试多条解题路径(类似于搜索树)。

  2. 自我评估 (Self-Correction):它拥有一个内部的“评价员”,能判断当前这条思路是否走得通。如果走不通,它会回溯(Backtrack)并尝试另一种方法。

  3. 强化学习进化:o3 并不是通过看人类怎么思考来学习的,而是通过成千上万次的自我对弈,发现哪些思考路径能通向正确答案,从而进化出一种非人类的逻辑严密性。

  4. 关键差异对比表

特性 普通 LLM (如 GPT-4, Claude 3) o3 推理模型 (Reasoning Model)
响应方式 词元流式输出,边想边说 先“闭嘴”思考,产出完整逻辑后再输出
数学/编程能力 依赖统计概率,易在复杂逻辑处出错 极强,能处理竞赛级数学和复杂系统架构
幻觉率 较高(尤其在多步推理中) 极低(因为它在输出前已经自我验证过)
计算成本 相对固定且较低 随着问题难度增加,推理成本显著上升
本质 文本生成器 (Generator) 逻辑搜索器 (Searcher/Reasoning Engine)
  1. 为什么 o3 能解决你之前担心的“加法准确率”问题?

回到你之前提到的 \(4357 + 8936\)

普通模型可能会因为 Token 的统计偏见给出 13283(差了一点)。

o3 会在后台思考过程中:

  1. 写下:4000+8000=12000
  2. 写下:300+900=1200
  3. 检查:等一下,12000+1200=13200...
  4. 最终校验:通过内部的逻辑自洽性检查,确保个位、十位全部对齐,最后才吐出 13293

简单来说,o3 并不是 Transformer 的替代者,它是运行在 Transformer 引擎之上的“思维插件”或“高级算法”。

你可以把它们的关系理解为:Transformer 是“大脑的构造(硬件/架构)”,而 o3 是“一种特定的思考方式(软件/策略)”。

以下是它们之间具体的四层关系:

  1. 继承关系:o3 的底层依然是 Transformer

o3 并没有抛弃 Transformer 架构。它依然由多层 Self-Attention(自注意力机制)Feed-Forward(前馈网络) 组成。

  • 数据处理:它依然把文字切分成词元(Tokens),并通过权重矩阵进行高维向量计算。
  • 生成本质:它本质上还是一个“预测下一个词(Next Token Prediction)”的概率模型。
  1. 演进关系:从“直觉生成”到“推理生成”
  • 普通 Transformer (GPT-4o):当你给它一个指令,它直接通过一次前向传播(One Pass)输出答案。这就像你凭直觉脱口而出。
  • o3 模型:它利用 Transformer 结构生成了一连串隐形的中间 Token(即 Chain-of-Thought,思维链)。
    • o3 的创新:它不再是简单地预测“答案”,而是被训练成先预测“解题步骤”,再预测“答案”。
    • 核心:它在 Transformer 的基础上,通过大规模强化学习(RL),学会了如何更有效地在 Transformer 的高维空间里进行“搜索”和“纠错”。
  1. 算力分配的关系:测试时计算 (Test-time Compute)

这是两者在数学性能上的最大区别,也是 o 系列模型名字的由来(OpenAI 推理系列):

  • 标准 Transformer:模型的智力主要取决于训练时吃进去的数据(Training-time Compute)。一旦练好,回答每个问题的时间和脑力是固定的。
  • o3 推理模型:它将智力重心转移到了推理时(Test-time)。
    • 关系:它反复调用底层 Transformer 的计算能力。如果问题难,它就让 Transformer 多生成几千个“思考词元”;如果问题简单,就少生成。
    • 结论:o3 是通过消耗更多的 Transformer 推理步数,来换取更高的逻辑准确度。
  1. 形象类比:赛车与专业车手
  • Transformer 是“赛车”:它提供了极高的速度和强大的动力(并行处理能力、海量知识存储)。
  • o3 是“专业车手的驾驶策略”:它决定了在什么时候该减速思考、什么时候该加速冲刺、走哪条路线最安全。
    • 同样的赛车(Transformer 架构),普通的开法(GPT-4o)可能很快但容易打滑(幻觉);而 o3 的开法通过不断的“自我修正”和“路径规划”,确保能精准到达终点。

总结

o3 = Transformer 架构 + 强化学习训练出的“慢思考”逻辑 + 可动态伸缩的推理步数。

如果没有 Transformer 提供的并行计算基础,o3 这种需要生成海量中间思考词元的机制将慢到无法使用;而没有 o3 的推理策略,Transformer 依然会像你之前提到的那样,在复杂的加法和逻辑陷阱面前表现得“相当令人失望”。

ARC-AGI 2

那是否意味着通用人工智能(AGI)问题已经解决?o3 的智能水平是否与人类相当?

并非如此。首先,尽管 o3 的表现堪称里程碑式的成就,但代价却极其高昂——每个 ARC-AGI 谜题都需要数万美元的计算资源。智能不仅仅关乎能力,其根本在于效率。在拥有庞大计算资源的情况下,穷举所有可能的解空间是一种捷径,它使得各种任务成为可能,而无需真正运用智能。理论上,你甚至可以简单地遍历所有可能的解程序,逐一测试,直到找到一个适用于演示题对的解,从而解决 ARC-AGI 问题。o3 的结果固然令人印象深刻,但感觉更像是用超级计算机破解密码,而非展现敏捷、流畅的人类思维。智能的精髓在于以尽可能少的资源取得成果。

其次,我们发现 o3 仍然难以完成许多人类觉得非常简单的任务(例如图 19.10 中所示的任务)。这强烈表明 o3 的水平尚未达到人类水平。问题在于——2019 年版的 ARC-AGI 测试旨在降低难度。它本质上是对流体智力的二元测试:要么你像所有基础 LLM 一样没有流体智力,在这种情况下你的得分接近于零;要么你展现出一定的流体智力,在这种情况下你的得分会非常高,就像任何人类一样——或者像 o3 一样。两者之间几乎没有中间状态。显然,基准测试需要随着其旨在衡量的 AI 能力的发展而不断演进。我们需要一个新版本的 ARC-AGI,它不那么依赖蛮力,并且能够更好地区分拥有不同水平流体推理能力(直至人类水平)的系统。好消息是:我们自 2022 年以来一直在开发这样一个版本。

img图 19.10:o3 在最高计算设置下无法解决的任务示例(每个任务超过 20,000 美元)

因此,在2025年3月,ARC Prize基金会推出了ARC-AGI-2。它沿用了第一版的格式,但显著改进了任务内容。新版本旨在提高标准,纳入了需要更复杂推理链且更难通过穷举搜索方法解决的任务。其目标是创建一个基准,在这个基准中,计算效率成为成功的关键因素,从而推动系统采用更智能、更高效的策略,而不是仅仅探索数十亿种可能性。虽然大多数ARC-AGI-1任务几乎可以瞬间由人类完成,无需太多认知努力,但ARC-AGI-2中的所有任务都需要一定程度的深思熟虑(见图19.11)——例如,在我们实验中,人类测试者完成任务的平均时间为5分钟。

img图 19.11:典型的 ARC-AGI-1 任务(左)与典型的 ARC-AGI-2 任务(右)对比

ARC-AGI 2 的初步 AI 测试结果令人警醒:即使是 o3 也难以应对这一系列新的挑战,在有限的计算资源下,其得分骤降至两位数以下。至于基础 LLM 模型?它们在 ARC-AGI-2 上的表现几乎为零——这很正常,因为基础 LLM 模型并不具备流体智能(fluid intelligence)。构建真正高效、类人流体智能的 AI 的挑战远未解决。我们需要超越现有 TTA 技术的方法。

缺失的要素:搜索和符号

The missing ingredients: Search and symbols

要彻底解决 ARC-AGI 问题,特别是版本 2,需要做些什么?希望这个挑战能启发你的思考。这正是 ARC-AGI 的意义所在:为你设定一个不同的目标,引导你朝着新的方向前进——希望是富有成效的方向。现在,让我们快速了解一下,如果你想响应号召,你需要哪些关键要素。

我曾说过,智能由两个部分组成:抽象概念的习得抽象概念的重组。它们紧密耦合——你操控的抽象概念类型决定了你如何以及在多大程度上能够重组它们。大语言模型只能操控通过梯度下降法拟合的参数曲线所存储的抽象概念。难道就没有更好的方法吗?

抽象的两极

The two poles of abstraction

抽象概念的习得始于对事物的比较。至关重要的是,比较事物有两种截然不同的方式,由此衍生出两种不同的抽象概念和两种思维模式,每一种都更适合解决不同类型的问题。这两种抽象概念共同构成了我们所有思维的基础。

将事物联系起来的第一种方法是相似性比较,它产生了以价值为中心的类比。第二种方法是精确的结构匹配,它产生了以程序为中心的类比(或以结构为中心的类比)。在这两种情况下,你都从事物的实例出发,并将相关的实例合并在一起,从而生成一个抽象概念,该概念捕捉了底层实例的共同元素。不同之处在于如何判断两个实例之间的关联,以及如何将实例合并成抽象概念。让我们仔细看看每种类型。

The first way to relate things to each other is similarity comparison, which gives rise to value-centric analogies. The second way is exact structural match, which gives rise to program-centric analogies (or structure-centric analogies). In both cases, you start from instances of a thing, and you merge together related instances to produce an abstraction that captures the common elements of the underlying instances. What varies is how you tell that two instances are related and how you merge instances into abstractions. Let’s take a close look at each type.

以价值为中心的类比

Value-centric analogy

假设你在后院遇到了许多不同种类的甲虫,它们分属不同的物种。你会注意到它们之间存在相似之处。有些甲虫彼此更相似,有些则不太相似:相似性的概念隐含着一个平滑的连续距离函数,它定义了一个潜在流形,你的甲虫实例就存在于这个流形中。当你观察了足够多的甲虫后,就可以开始将更相似的实例聚类在一起,并将它们合并成一组原型,这些原型捕捉了每个聚类的共同视觉特征(图 19.12)。这些原型是抽象的:它们看起来不像你见过的任何特定实例,尽管它们编码了所有实例共有的属性。当你遇到一只新的甲虫时,你不需要将它与之前见过的每一只甲虫进行比较才能知道该如何处理它。你只需将它与你已有的几个原型进行比较,找到最接近的原型——即这只甲虫所属的类别——并用它来做出有用的预测:这只甲虫有可能咬你吗?它会吃你的苹果吗?

img图 19.12:以价值为中心的类比通过连续的相似性概念将实例联系起来,从而获得抽象原型。

这听起来是不是很熟悉?这几乎就是对无监督机器学习(例如 K-means 聚类算法)工作原理的描述。总的来说,所有现代机器学习,无论是否采用无监督方法,其工作原理都是学习描述实例空间的潜在流形,这些实例空间通过原型进行编码。(还记得你在第 10 章中可视化的卷积神经网络特征吗?它们就是可视化的原型。)以值为中心的类比正是大语言模型能够进行局部泛化的关键所在。

这也是你许多认知能力的基础。作为人类,你无时无刻不在进行以价值为中心的类比。这种抽象思维是 模式识别感知直觉的基础。如果你能不假思索地完成一项任务,那么你就是在大量依赖以价值为中心的类比。如果你在看电影时,开始下意识地将不同的角色归类为不同的“类型”,这就是以价值为中心的抽象思维。

以程序为中心的类比

Program-centric analogy

至关重要的是,认知远不止于价值中心类比所能实现的那种即时、粗略、直觉式的分类。还有另一种抽象生成机制,它速度较慢、精确且深思熟虑:程序中心(或结构中心)类比( program-centric (or structure-centric) analogy )。

在软件工程中,你经常会编写一些看似有很多共同点的不同函数或类。当你注意到这些冗余时,你会开始思考:是否存在一个更抽象的函数来执行相同的任务,并且可以重复使用两次?是否存在一个抽象基类,你的两个类都可以继承自它?这里你使用的抽象定义对应于以程序为中心的类比。你并非试图通过比较类和函数的外观相似度(就像通过隐式距离函数比较两张人脸一样)来比较它们。相反,你感兴趣的是它们是否存在结构完全相同的部分。你正在寻找所谓的子图同构(参见图 19.13):程序可以表示为运算符图,而你试图找到在不同程序中完全共享的子图(程序子集)。

img图 19.13:以程序为中心的类比识别并隔离不同实例中的同构子结构。

这种通过在不同离散结构中建立精确的结构匹配来进行类比的方法,并非计算机科学或数学等专业领域所独有——你其实一直在不知不觉中使用它。它是推理规划以及严谨性(而非直觉)这一概念的 基础。任何时候,当你思考通过离散关系网络(而非连续相似性函数)相互连接的对象时,你就是在运用以程序为中心的类比。

This kind of analogy-making via exact structural match within different discrete structures isn’t at all exclusive to specialized fields like computer science, or mathematics — you’re constantly using it without noticing. It underlies reasoning, planning, and the general concept of rigor (as opposed to intuition). Any time you’re thinking about objects connected to each other by a discrete network of relationships (rather than a continuous similarity function), you’re using program-centric analogies.

认知是两种抽象思维的结合

Cognition as a combination of both kinds of abstraction

表 19.1 将这两种抽象程度进行了对比。

以价值为中心的抽象 以程序为中心的抽象
通过距离将事物联系起来 通过精确的结构匹配将事物联系起来
连续的,以几何学为基础。 离散的,基于拓扑学
通过将实例“平均化”为“原型”来生成抽象概念。 通过隔离实例间的同构子结构来生成抽象概念
感知和直觉的基础 这是推理和计划的基础
即时的、模糊的、近似的 缓慢、精准、严谨
需要丰富的经验才能得出可靠的结果 体验高效:只需两个实例即可运行

表 19.1:抽象的两极

我们所做的一切,我们所想的一切,都是这两种抽象方式的结合。你很难找到只涉及其中一种的任务。即使是看似“纯粹感知”的任务,例如识别场景中的物体,也包含相当多的关于你所观察物体之间关系的隐性推理。即使是看似“纯粹推理”的任务,例如证明一个数学定理,也包含大量的直觉。当数学家提笔作答时,他们心中已经对前进的方向有了大致的构想。他们为达成目标而采取的离散推理步骤,是由高层次的直觉引导的。

这两个极端相辅相成,正是它们的交织融合才使得极端泛化成为可能。任何思维都离不开这两者。

为什么深度学习并不能完全解决抽象生成问题

Why deep learning isn’t a complete answer to abstraction generation

深度学习非常擅长编码以价值为中心的抽象概念,但它基本上不具备生成以程序为中心的抽象概念的能力。类人智能是这两种抽象概念紧密交织的产物,因此我们实际上缺失了所需能力的一半——可以说是最重要的一半。

现在,需要说明一点。到目前为止,我一直把每种抽象类型都描述得与其他类型完全独立——甚至是截然相反的。然而,在实践中,它们更像是一个连续谱:在某种程度上,你可以通过将离散程序嵌入连续流形来进行推理——就像你可以用任意一组离散点拟合一个多项式函数一样,只要你有足够多的系数。反之,你也可以使用离散程序来模拟连续距离函数——毕竟,当你在计算机上进行线性代数运算时,你实际上是在处理连续空间,完全是通过对 1 和 0 进行运算的离散程序来实现的。

然而,显然有些问题类型更适合使用其中一种方法。例如,尝试训练一个大语言模型来对一个包含五个数字的列表进行排序。虽然架构合适并非不可能,但这绝对会令人沮丧。你需要大量的训练数据才能实现这一点——即便如此,模型在处理新的数字时仍然会偶尔出错。如果你想对包含十个数字的列表进行排序,则需要使用更多的数据重新训练模型。相比之下,用 Python 编写一个排序算法只需几行代码,生成的程序在经过几个示例验证后,就能处理任何大小的列表。这展现了强大的泛化能力:只需几个演示示例和测试示例,就能得到一个可以成功处理任何数字列表的程序。

反过来,感知问题并不适合离散推理过程。尝试用纯 Python 编写一个程序来对 MNIST 数字进行分类,而不使用任何机器学习技术:你会发现自己陷入了困境。你会费尽心思地编写函数来检测数字中的闭合环路数量、数字质心的坐标等等。编写数千行代码后,你可能只能达到 90% 的测试准确率。在这种情况下,拟合参数模型要简单得多;它可以更好地利用大量可用数据,并获得更稳健的结果。如果你拥有大量数据,并且面临的问题符合流形假设,那么深度学习是最佳选择。

因此,我们不太可能看到一种方法能够将推理问题简化为流形插值,或者将感知问题简化为离散推理。人工智能的未来发展方向是开发一个统一的框架,将这两种 抽象生成方式融合在一起。

人工智能的另一种方法:程序合成

An alternative approach to AI: Program synthesis

直到2024年,所有能够进行真正离散推理的人工智能系统都由人类程序员硬编码——例如,依赖搜索算法、图操作和形式逻辑的软件。在测试时自适应(TTA)时代,这种情况终于开始改变。TTA的一个特别有前景的分支是程序合成——这个领域目前仍然非常小众,但我预计它将在未来几十年内蓬勃发展。

程序合成是指利用搜索算法(例如遗传搜索,如遗传编程中的算法)自动生成简单的程序,以探索大量的可能程序(见图 19.14)。当找到符合所需规范的程序时,搜索即停止,这些规范通常以一组输入-输出对的形式给出。这与机器学习非常相似:给定以输入-输出对形式提供的训练数据,我们可以找到一个能够将输入与输出匹配并能泛化到新输入的程序。不同之处在于,我们不是学习硬编码程序(神经网络)中的参数值,而是通过离散搜索过程生成源代码(见表 19.2)。

img图 19.14:程序合成示意图:给定程序规范和一组构建模块,搜索过程将这些构建模块组装成候选程序,然后根据规范对这些候选程序进行测试。搜索过程持续进行,直到找到有效的程序为止。

机器学习 程序合成
模型:可微参数函数 模型:编程语言中的运算符图
引擎:梯度下降 引擎:离散搜索(例如基因搜索)
需要大量数据才能得出可靠的结果 数据效率高:只需几个训练样本即可完成工作

表 19.2:机器学习与程序合成

程序合成是我们为人工智能系统添加以程序为中心的抽象能力的方式。它是缺失的那一块拼图。

融合深度学习和程序合成

Blending deep learning and program synthesis

当然,深度学习不会消失。程序合成并非它的替代品,而是它的补充。它弥补了我们人工智能大脑中长期以来缺失的那一半。我们将把两者结合起来使用。这主要通过两种方式实现:

  • 开发集成深度学习模块和离散算法模块的系统
  • 利用深度学习提高程序搜索过程本身的效率。
  • Developing systems that integrate both deep learning modules and discrete algorithmic modules
  • Using deep learning to make the program search process itself more efficient

让我们逐一审视这些可能的途径。

将深度学习模块和算法模块集成到混合系统中

Integrating deep learning modules and algorithmic modules into hybrid systems

如今,许多最强大的AI系统都是混合型的:它们既使用大语言模型,也使用手工编写的符号操作程序。例如,在DeepMind的AlphaGo中,大部分智能都是由人类程序员设计和硬编码的(例如蒙特卡洛树搜索)。数据学习仅发生在专门的子模块中(例如价值网络和策略网络)。再比如Waymo的自动驾驶汽车:它能够应对各种各样的情况,是因为它维护着一个周围世界的模型——一个真实的3D模型——其中包含着由人类工程师硬编码的假设。这个模型通过深度学习感知模块(由Keras驱动)不断更新,这些模块将模型与汽车周围的环境进行交互。

对于AlphaGo和自动驾驶汽车这两个系统而言,正是人类编写的离散程序与学习到的连续模型相结合,才使得它们能够达到单独使用任何一种方法都无法企及的性能水平,例如端到端的深度神经网络或不包含机器学习元素的软件。目前,此类混合系统的离散算法元素仍需由人类工程师精心硬编码。但未来,此类系统或许能够完全自主学习,无需任何人为干预。

这会是什么样子呢?考虑一种众所周知的网络类型:循环神经网络(RNN)。值得注意的是,RNN 的限制比前馈网络略少。这是因为 RNN 不仅仅是简单的几何变换:它们是在一个循环中重复应用的for几何变换。时间for循环本身是由开发者硬编码的:它是网络的内置假设。当然,RNN 在表示能力方面仍然非常有限,这主要是因为它们执行的每一步都是一个可微的几何变换,并且它们通过连续几何空间中的点(状态向量)将信息从一步传递到另一步。现在想象一个神经网络,它以类似的方式用编程原语进行了增强,但与单个硬编码for循环和硬编码的连续空间内存不同,该网络包含大量编程原语,模型可以自由操作这些原语来扩展其处理功能,例如if分支、while语句、变量创建、用于长期记忆的磁盘存储、排序运算符、高级数据结构(例如列表、图和哈希表)等等。这种网络能够表示的程序空间将远比当前大语言模型所能表示的要广阔得多,并且其中一些程序可能具有更强的泛化能力。重要的是,这些程序本身并不具备端到端可微性,尽管其特定模块仍然可微,因此需要通过离散程序搜索和梯度下降相结合的方法生成。

我们将摒弃一方面硬编码算法智能(手工编写的软件)另一方面学习几何智能(深度学习)的模式。取而代之的是,我们将融合提供推理和抽象能力的正式算法模块和提供非正式直觉和模式识别能力的几何模块(图 19.15)。整个系统将在几乎无需人工干预的情况下进行学习。这将极大地扩展机器学习能够解决的问题范围——即在给定适当训练数据的情况下,我们可以自动生成的程序空间。像 AlphaGo 这样的系统,甚至循环神经网络(RNN),都可以被视为这种混合算法-几何模型的早期雏形。

We’ll move away from having, on one hand, hardcoded algorithmic intelligence (handcrafted software) and, on the other hand, learned geometric intelligence (deep learning). Instead, we’ll have a blend of formal algorithmic modules that provide reasoning and abstraction capabilities and geometric modules that provide informal intuition and pattern-recognition capabilities (figure 19.15). The entire system will be learned with little or no human involvement. This should dramatically expand the scope of problems that can be solved with machine learning — the space of programs that we can generate automatically, given appropriate training data. Systems like AlphaGo — or even RNNs — can be seen as a prehistoric ancestor of such hybrid algorithmic-geometric models.

img图 19.15:一个学习程序,它既依赖于几何基元(模式识别、直觉),也依赖于算法基元(推理、搜索、记忆)

A learned program relying on both geometric primitives (pattern recognition, intuition) and algorithmic primitives (reasoning, search, memory)

利用深度学习指导程序搜索

Using deep learning to guide program search

如今,程序合成面临着一个重大障碍:效率极其低下。简单来说,典型的程序合成技术会尝试搜索空间中所有可能的程序,直到找到一个符合给定规范的程序为止。随着程序规范复杂性的增加,或者用于编写程序的基本元素词汇量的扩展,程序搜索过程会遇到所谓的组合爆炸:需要考虑的程序集合会以惊人的速度增长,实际上,其增长速度远超指数级增长。因此,目前程序合成只能用于生成非常短的程序。你不可能很快就用它为你的计算机生成一个新的操作系统。

为了向前迈进,我们需要提高程序合成的效率,使其更接近人类编写软件的方式。当你打开编辑器编写脚本时,你不会考虑所有可能编写的程序。你只会想到少数几种可能的方法:你可以利用对问题的理解和过去的经验,大幅缩小需要考虑的选项范围。

深度学习可以帮助程序合成实现同样的目标:尽管我们想要生成的每个特定程序本质上可能是一个离散对象,执行非插值数据操作,但目前的证据表明,所有有用程序的空间可能非常像一个连续流形。这意味着,经过数百万次成功程序生成案例训练的大语言模型,可能会开始对 程序空间中的搜索路径形成清晰的直觉,从而确定从规范到相应程序的搜索过程——就像软件工程师可能对他们即将编写的脚本的整体架构以及他们应该使用的中间函数和类(作为通往目标的垫脚石)有直接的直觉一样。

个人注:以上这段话说的程序合成和目前流行的自动代码生成的原理一样吗?

这段话描述的正是目前 GitHub Copilot、Cursor 或 GPT-4/o1 等自动代码生成工具最深层、最前沿的理论基础

简单来说:原理是一样的,但这段话从“数学流形”的角度解释了为什么原本死板的代码逻辑,能被“充满灵气”的 AI 模拟出来。

我们可以从以下三个层面来对齐这两个概念:

  1. 离散的对象 vs. 连续的流形
  • 传统观念(离散):写代码就像拼乐高,少一个分号或写错一个变量名,程序就崩溃了。代码被认为是“非黑即白”的离散指令。
  • 这段话的观点(连续):虽然最终的代码是离散的,但“写代码的思路”是连续的。
    • 流形(Manifold):你可以想象在极高维的空间里,所有“有用的程序”都像一条条丝绸一样漂浮着。
    • 原理:AI 并不是在背代码,而是在这个“程序流形”上进行插值。当你给出一个模糊的需求(规范)时,AI 在这个连续空间里找到一条路径,平滑地滑向那个正确的离散程序。
  1. “搜索路径”与“软件工程师的直觉”

这段话最精妙的地方在于它解释了 Transformer 到底在学什么

  • 不仅是预测字符:它学到的是从“需求 A”到“实现 B”之间的中间步骤(踏脚石)
  • 直觉的本质:资深工程师写脚本前,脑子里其实已经有了大致的架构(先定义类,再写解析函数,最后处理异常)。
  • AI 的实现:大语言模型通过见过数百万个 GitHub 仓库,它在参数空间里建立了一套概率导向的搜索直觉。它知道“如果要实现一个爬虫,第一步大概率是 import 请求库,第二步是定义 URL”。这种“下一步该怎么走”的概率判断,就是 AI 的“直觉”。
  1. 程序合成(Program Synthesis)的进化
  • 老牌程序合成:靠硬性的逻辑推演和穷举搜索(暴力破解),速度慢且无法处理复杂需求。
  • 现代自动代码生成(神经网络版)
    1. 神经导向搜索:利用 LLM 的“直觉”缩小搜索范围(只去尝试那些“看起来最像人写的”路径)。
    2. 验证与纠错:模型生成代码后,通过编译器运行。如果错了,再把错误信息反馈给模型进行“梯度调整”或重新采样。

总结

你引用的这段话,实际上是在为 “为什么 AI 能写代码” 提供一个数学辩护:

自动代码生成的原理,就是把一个极其复杂的、离散的逻辑搜索问题,转化为了一个在高维连续空间里的路径预测问题。

模型是一个“高维插值数据库”,现在的代码生成就是在这个数据库里,根据你的注释作为起始坐标,插值出通往运行成功的代码路径。

请记住,人类推理很大程度上受价值中心抽象的引导——即模式识别和直觉。程序合成也应如此。我预计,在未来10到20年内,通过学习启发式方法来指导程序搜索的总体方法将受到越来越多的研究关注。

模块化组件重组和终身学习

Modular component recombination and lifelong learning

如果模型变得更加复杂,并基于更丰富的算法原语构建,那么这种复杂性的增加就需要任务间更高的模型复用率,而不是每次遇到新任务或新数据集时都从头开始训练新模型。许多数据集包含的信息不足以让我们从头开始开发一个全新的复杂模型,因此必须利用先前遇到的数据集中的信息(就像你不会每次打开一本新书都从头开始学习英语一样——那是不可能的)。此外,由于当前任务与先前遇到的任务之间存在大量重叠,因此针对每个新任务从头开始训练模型也是低效的。

借助现代基础模型,我们正逐步迈向一个人工智能系统拥有海量已习得知识和技能,并能将其应用于应对任何挑战的世界。然而,LLMs却缺少一个关键要素:重组。LLM 非常擅长获取和重新应用已记忆的函数,但它们尚无法将这些函数即时重组为适应当前情况的全新程序。事实上,正如 Dziri 等人最近发表的一篇论文中所探讨的那样,LLM 完全不具备函数组合的能力。[5]此外,它们学习的函数抽象程度或模块化程度不够,从一开始就不适合重组。还记得我们之前指出的LLM在计算大整数加法时准确率很低吗?你肯定不想把下一个代码库建立在如此脆弱的函数之上。

为了解决组合泛化问题,我们需要重用健壮的程序组件,例如人类编程语言中的函数和类。这些组件将专门针对新环境中的模块化重用而演化——这与语言学习模型记忆的模式截然不同。我们的人工智能将根据当前任务动态地重新组合这些组件,从而合成新的程序。至关重要的是,这些可重用组件库将基于所有人工智能实例的累积经验构建,并永久供所有人访问。我们的人工智能遇到的任何问题都只需解决一次——这使得它们能够不断自我改进。

想想如今的软件开发流程:工程师一旦解决了某个特定问题(例如,Python 中的 HTTP 查询),就会将其打包成一个抽象的、可重用的库,供全球任何人访问。未来遇到类似问题的工程师可以搜索现有的库,下载并应用到自己的项目中。类似地,未来的元学习系统也能通过筛选一个包含高级可重用模块的全局库来构建新的程序。当系统发现自己需要为多个不同的任务开发类似的程序子例程时,它可以生成一个 抽象的、可重用的子例程版本,并将其存储在全局库中(参见图 19.16)。这些子例程可以是几何的(带有预训练表示的深度学习模块),也可以是算法的(更接近于当代软件工程师使用的库)。

个人注:目前的自动代码生成工具会利用上述这段话的方法吗?

这是一个非常前瞻性的观点,它描述的是从“代码生成(Code Generation)”向“自主软件工程(Autonomous Software Engineering)”进化的核心逻辑。

目前市面上的主流工具(如 GitHub Copilot, Cursor)虽然已经非常强大,但它们对这段话所描述的“全局库元学习”利用程度各不相同。我们可以将其拆解为三个阶段来看:

  1. 现状:利用“人类已有的全局库” (Static Retrieval)

目前的工具确实在利用全球范围内的抽象模块,但方式相对被动:

  • 训练阶段:LLM 在预训练时已经“背下”了 GitHub 上几乎所有流行的开源库(如 Python 的 requests, pandas)。当它发现你需要做 HTTP 查询时,它的“直觉”会直接导航到这些已有的抽象模块。
  • 上下文感知:像 Cursor 这样的工具,会通过 RAG (检索增强生成) 技术,自动索引你项目中的本地库和第三方文档。
  • 局限:目前的模型主要是“消费者”。它们能熟练地调用现有的抽象,但很少能像这段话描述的那样,自主地“创造并沉淀”新的抽象。
  1. 进阶:自主构建“私有库” (Self-Refining)

一些尖端的 AI 代理(Agentic Workflows,如 OpenDevinDevin)正在尝试实现这段话后半部分描述的功能:

  • 识别模式:当 AI 在协助你开发一个大型项目时,如果它发现自己反复在写类似的字符串处理代码,它会建议:“我发现这段逻辑出现了三次,是否需要我将其提取为一个 utils.py 中的函数?”
  • 存储与重用:这正是“生成抽象、可重用子例程”的萌芽。它不再是单纯地复制粘贴,而是在构建项目的“私有全局库”。
  1. 未来:真正的“元学习系统” (Meta-Learning & Library Induction)

你引用的这段话,最核心的学术概念叫做 “库诱导(Library Induction)”。目前这主要还处于实验室阶段(如 MIT 的 DreamCoder 算法):

  • 原理:系统在解决一堆数学或编程问题时,会自动发现其中的公共子结构
  • 抽象化:它会将这些子结构压缩成一个新的“原语(Primitive)”并命名(比如命名为 f_alpha)。
  • 进化:随着库里的高阶模块越来越多,系统解决复杂问题的速度会呈指数级提升,因为它不再从像素或基本语法开始思考,而是从“高级模块”开始组装。
  1. 为什么目前的 LLM 还没完全做到这一点?

目前流行的 Transformer 模型虽然有“直觉”,但缺乏一个永久的、可进化的存储机制

  • 易忘性:LLM 的知识主要锁定在训练完的那一刻。它们很难在对话过程中,真正地向“全局库”里写入一行新代码并让全世界的模型立刻共享。
  • 验证难题:自主生成的抽象模块需要极其严谨的形式化验证,以确保这个新模块没有 Bug,否则会造成错误的连锁反应。

总结

目前的工具正处于“从搜索现有库”向“建议提取本地库”的过渡期。

你引用的这段话所描述的——一个能够像人类社区一样,通过不断解决问题来持续扩充“全局逻辑原语库”的元学习系统——是 AI 编程的终极目标。这也就是所谓的 “神经符号编程(Neuro-symbolic Programming)”:由神经网络提供“写什么的直觉”,由符号库(全局库)提供“重用和逻辑的严谨性”。

img图 19.16:一种元学习器,能够利用可重用的基本元素(包括算法和几何元素)快速开发特定任务的模型,从而实现极强的泛化能力。

长远愿景

The long-term vision

简而言之,这是我对人工智能的长期愿景:

  • 模型将更像程序,其功能将远远超越我们目前处理的输入数据的连续几何变换。这些程序可以说更接近人类对周围环境和自身所持有的抽象心理模型,并且由于其丰富的算法特性,它们将具备更强的泛化能力。
  • 具体而言,模型将融合提供形式推理、搜索和抽象能力的算法模块与提供非正式直觉和模式识别能力的几何模块 。这将实现以价值为中心和以程序为中心的抽象的融合。AlphaGo 或自动驾驶汽车(这些系统需要大量的人工软件工程和人为设计决策)是符号人工智能和几何人工智能融合的早期范例。
  • 这些模型将自动构建,而非由人工工程师硬编码,它们使用存储在全局可重用子程序库中的模块化组件——该库通过在数千个先前任务和数据集上学习高性能模型而不断演化。随着元学习系统识别出频繁的问题解决模式,这些模式将被转化为可重用的子程序(类似于软件工程中的函数和类),并添加到全局库中。
  • 搜索子程序的可能组合以生成新模型的过程将是一个离散搜索过程(程序合成),但它将很大程度上受到深度学习提供的程序空间直觉的指导。
  • 这个全局子程序库及其相关的模型增长系统能够实现某种类似人类的极端泛化能力:面对新的任务或情境,该系统能够利用极少的数据构建出一个适合该任务的新模型。这得益于其丰富的、具有良好泛化能力的类程序原语,以及在类似任务上的丰富经验。同样地,如果人类拥有丰富的游戏经验,他们就能快速学会玩一款复杂的新游戏,因为从这些经验中衍生出的模型是抽象的、类程序的,而不是刺激与动作之间的简单映射。

这种持续学习、不断增长模型的系统可以被解读为通用人工智能(AGI)。但不要指望会因此出现什么奇点式的机器人末日:那纯粹是幻想,源于对智能和技术的一系列深刻误解。然而,这种批判并不适合本书。

脚注

  1. 另见 Marianna Nezhurina、Lucia Cipolina-Kun、Mehdi Cherti 和 Jenia Jitsev 合著的《爱丽丝梦游仙境:在最先进的大型语言模型中,简单任务会完全破坏推理能力》,arXiv,https://arxiv.org/abs/2406.02061。 (https://deeplearningwithpython.io/chapters/chapter19_future_of_ai/#footnote-link-1)
  2. Terry Winograd,“计算机程序中用于理解自然语言的数据表示方法:过程”,1971 年。(https://deeplearningwithpython.io/chapters/chapter19_future_of_ai/#footnote-link-2)
  3. Michael Shick,“沃兹尼亚克:电脑能煮杯咖啡吗?”《快公司》,2010 年 3 月。(https://deeplearningwithpython.io/chapters/chapter19_future_of_ai/#footnote-link-3)
  4. 弗朗索瓦·肖莱,《论智力的衡量》,2019 年。(https://deeplearningwithpython.io/chapters/chapter19_future_of_ai/#footnote-link-4)
  5. Nouha Dziri 等人,“命运与信念:Transformer 对组合性的限制”,第 37 届国际神经信息处理系统会议论文集 (2023),https://arxiv.org/abs/2305.18654。(https://deeplearningwithpython.io/chapters/chapter19_future_of_ai/#footnote-link-5)

书籍各章的机翻md文件:
《DEEP LEARNING with Python》第一章 什么是深度学习?
《DEEP LEARNING with Python》第二章 神经网络的数学基础
《DEEP LEARNING with Python》第三章 TensorFlow、PyTorch、JAX 和 Keras 简介
《DEEP LEARNING with Python》第四章 分类与回归
《DEEP LEARNING with Python》第五章 机器学习基础
《DEEP LEARNING with Python》第六章 机器学习的通用工作流程
《DEEP LEARNING with Python》第七章 深入了解 Keras
《DEEP LEARNING with Python》第八章 图像分类
《DEEP LEARNING with Python》第九章 卷积神经网络架构模式
《DEEP LEARNING with Python》第十章 解读卷积神经网络的学习成果
《DEEP LEARNING with Python》第十一章 图像分割
《DEEP LEARNING with Python》第十二章 目标检测
《DEEP LEARNING with Python》第十三章 时间序列预测
《DEEP LEARNING with Python》第十四章 文本分类
《DEEP LEARNING with Python》第十五章 语言模型和Transformer
《DEEP LEARNING with Python》第十六章 文本生成
《DEEP LEARNING with Python》第十七章 图像生成
《DEEP LEARNING with Python》第十八章 现实世界的最佳实践
《DEEP LEARNING with Python》第十九章 人工智能的未来
《DEEP LEARNING with Python》第二十章 结论