当前位置: 华文问答 > 数码

为什么大模型能通过自然语言训练表现出智能?智能的载体是自然语言吗?

2023-12-04数码

这个问题之前OpenAI 的核心研发人员 Jack Rae在一次分享中解答过。下面我们就分享下如何通过压缩理论,解释为什么像GPT这样的自然语言模型拥有智能。

1. 压缩即智能——为什么ChatGPT拥有智能

目前规模较大的语言模型,在训练基础模型时,都采用了预测下一个词的任务。这个任务非常简单,就是根据语言中前面的词,来生成下一个词。这样学习到的似乎只是词之间的表面统计关系,怎么就能体现出智能呢?这确实很难理解。

2月28日,OpenAI 的核心研发人员 Jack Rae 在 Stanford MLSys Seminar 上分享了一个主题:压缩与人工通用智能。他的核心观点是:人工通用智能的基础模型应该能够最大程度地无损压缩有效信息。他还分析了这个目标的合理性,以及 OpenAI 是如何按照这个目标进行工作的。

Jack Rae 是 OpenAI 的团队负责人,主要研究大型语言模型和远程记忆。他曾在 DeepMind 工作了 8年,领导了大型语言模型研究组。在分享中,Jack Rae 提出了以下两个核心观点。

  • 压缩就是智能
  • 语言模型就是压缩(GPT 的预测下一个词的任务本质上是对训练数据的无损压缩)。他通过论证压缩就是智能,以及 GPT 的训练过程是对数据的无损压缩,从而证明了 GPT 具有智能。
  • Jack Rae 在 Stanford ML Seminar 上的分享非常精彩,让人感觉豁然开朗。他用压缩理论来解释为什么 GPT 具有智能,是一个很有创意的观点。下面我们就具体介绍一下 Jack Rae 是如何论证的。

    1.1 直观理解AGI

    在探讨压缩如何能够实现人工通用智能之前,先来了解一下什么是人工通用智能。「中文房间」是约翰·塞尔(John Searle)在1980年提出的一个著名的思想实验,用来质疑计算机是否能够真正理解语言。实验的设想可以通过下面的文字描述。

    一个只会说英语,对中文一无所知的人被关在一个密闭的房间里。房间里只有一个小窗口,还有一本中英文对照的手册,以及足够的纸和笔。有人从窗口递进来一些写着中文的纸条。房间里的人根据手册上的规则,把这些纸条翻译成中文,并用中文写回去。尽管他完全不懂中文,但是通过这个过程,他可以让房间外的人认为他会说流利的中文。这就是「中文房间」的实验,图1-1展示了它的示意图。

    图1-1 中文房间

    一个庞大而烦琐的手册说明了这个人的智能水平很低,因为他只能按照手册上的指示去做,一旦遇到手册中没有的情况,他就束手无策了。

    如果我们能够从海量的数据中学习到一些语法和规则,那么就可以用一个简洁而高效的手册来指导这个人,这样他就能够更灵活地应对各种情况,表现出更高的智能水平(泛化能力更强)。

    手册的厚度反映了智能的强度。手册越厚,说明智能越弱;手册越薄,说明智能越强。就像在公司里,你雇用一个人,他能力越强,你需要给他的指示就越少;他能力越弱,你需要给他的指示就越多。

    这个例子用一个比较形象的方式解释了为什么压缩就是智能。

    1.2 如何实现无损压缩

    假设 Alice 需要把一个(可能无限长)的数据集D = \{x_1, x_2, ..., x_n, ...\} 从遥远的半人马座星系传输回地球上的 Bob,假设如下。

  • x_t 表示一个 token ,词表大小 m = 256 , x_t \in \{0,1,\ldots,255\}
  • Alice 和 Bob 都有足够的计算资源
  • 假设现在已经传输了 x_{1:t} , Alice 会将下一个 x_{t+1} 编码为 z_{t+1} 后传给 Bob
  • Alice 希望 最小化传输的数据量 S ,以 number of bits 比特数量来衡量。
  • 先看一下基准传输方法。由于 x_{t+1} 的可能性有m = 256种,所以 z_{t+1} 可以表示为一个8比特的整数(即1字节)。假如当 x_{t+1}=7 时, z_{t+1}=00000111 表示 x_{t+1} 。这时需要传输的比特数 |z_{t+1}| = \log m = \log 256 = 8 。另外,Alice还要将上面的代码写成代码 f_0 ,在一开始传输给Bob。图1-2是编码数据传输的示意图。

    图1-2 编码数据传输

    这样传输一个大小为n的数据集的D_n = \{x_1, x_2, ..., x_n\} 的代价S_0 可以表示为如下形式。

    \begin{align} S_0 & = \#bits \\ & = |f_0| + \sum_{t=1}^n |z_{t}| \\ & = |f_0| + n \log m \end{align} \\ \tag1 接下来从信息论角度解释一下基准的信息量。

    基准方法对于 x_{t+1} 的分布没有先验知识,因此其概率分布故P(x_{t+1}) = \dfrac{1}{m} 是一个离散均匀分布。此时信息量表示为如下形式。

    I= -\log P(x_{t+1}) = -\log \dfrac{1}{m} = \log m = |z_{t+1}| \\\tag2

    因此, |z_{t+1}| 也可以看作是 P(x_{t+1}) 的信息量。

    在介绍了基准方法之后,接下来介绍一下基于神经网络的无损压缩方法。想要利用一个自回归神经网络来实现压缩。具体来说,假设如下的一个场景。

  • Alice首先把一个自回归神经网络(比如GPT)的训练代码f 发送给 Bob。这个网络的输入是\{x_1, x_2, ..., x_t\} , 输出是下一个数据 x_{t+1} 的概率分布 P(x_{t+1} | x_{1:t}, f) 。注意,网络的「大小」是由 f 决定的,但网络的权重 \theta 是由 f 初始化并不断训练得到的。可以把网络的参数 \theta_t 看作 (f, x_{1:t}) 的一个函数。图1-3是概率分布 P(x_{t+1} | x_{1:t}, f) 的示意图。
  • 图1-3 当前传输数据的概率分布
  • 网络的权重 \theta_t 是由 Alice 和 Bob 各自独立地初始化和训练的,但他们使用相同的方法和随机种子,这样他们的初始权重 \theta_0 是相同的,并且会随着数据的传输而保持同步更新,因此 \theta_t 是 (f, x_{1:t}) 的函数。
  • 假设Alice已经把x_{1:t} 发送给了Bob,现在她要把x_{t+1} 编码为z_{t+1} 发送给Bob。此时Alice 和 Bob 根据相同的代码 f 和相同的数据 x_{1:t} 训练了相同的网络。因此他们对 x_{t+1} 的概率分布也有相同的预测 P(x_{t+1} | x_{1:t}, f) 。为了简便起见,后面省略条件部分,直接写作 P(x_{t+1}) 。
  • 考虑使用算术编码的二分查找法来把x_{t+1} 编码为z_{t+1} ,假设x_{t+1} 可能等于 0,1,2,3 四个值,它们出现的概率分别为 0.2,0.25,0.22,0.175。如果要把x_{t+1}=3 编码成 z_{t+1} ,可以用以下过程来表示。每一次的动作都有两种可能的结果:向左或向右。
  • 如果使用1表示向右,0表示向左,那么上面的查找过程便可以表示为一个长度为 3 的动作序列。[a1, a2, a3] = [1, 0, 1],刚好可以用一个3比特的二进制数字 \left( 1,0,1 \right)_2 表示。
  • Alice将这个动作序列编码为一个3比特的二进制数字 z_{t+1}=\left( 1,0,1 \right)_2 ,发送给Bob。z_{t+1} 等价于二分查找的次数。在这个例子里面 |z_{t+1}| = 3
  • Bob收到 z_{t+1}=\left( 1,0,1 \right)_2 后,得到x_{t+1} 的过程为:首先Bob也预测得到分布 P(x_{t+1} | x_{1:t}, f) ;然后根据 z_{t+1} 代表的动作序列,复现二分查找的过程,得到 0.6875 这个有限精度的实数;找到这个实数所在的区间是第4个(zero-based)区间,则 Bob 解码x_{t+1}=3
  • 这样一来,Alice 就实现了把x_{t+1}=3 按照 Alice 和 Bob 共同掌握的概率分布编码成 z_{t+1}=\left( 1,0,1 \right)_2 ,并且把它无损地传输给 Bob。Bob 也可以按照同样的概率分布把z_{t+1}=\left( 1,0,1 \right)_2 解码回 x_{t+1}=3 。这个过程比基准方法节省了很多传输的数据量。原本需要传8比特,现在只需要传3比特。图1-4是整个过程的示意图。

    图1-4 算术编码的二分查找过程

    2. GPT是对数据的无损压缩

    前面介绍了算术编码的原理,它可以实现无损压缩,从而减少数据传输的量。我们的目标是最小化传输的量,也就是最小化二分查找的次数。

    为了计算二分查找的次数的上界,可以用一个直观的方法。还是用上面的例子,x_{t+1} = 3 。将x_{t+1} 的区间均匀铺满整个[0,1] 区间,假设p = P(x_{t+1}=3 | x_{1:t}, f) ,那么会分成m= {\large\lceil} \dfrac{1}{p}\large\rceil 个区间,那么大约要查询\log m 次。如果不考虑取整的误差,可以得到二分查找的次数,表示为如下的形式。

    |z_{t+1}| \sim \log m \sim -\log p\tag3 实际上,二分查找的次数的上界可以表示为如下的形式。

    |z_{t+1}|\le \lceil \log \dfrac{1}{p}\rceil \lt -\log p + 1 \\\tag4

    这样就可以知道传输数据集 D_n 的代价 S_1 ,表示为如下的形式。 \begin{align} S_1 & = |f_1| + \sum_{t=1}^n |z_{t+1}| \\ & \lt |f_1| + \sum_{t=1}^n [-\log P(x_{t+1} | x_{1:t}, f) + 1] \\ & = |f_1| + n + \sum_{t=1}^n -\log P(x_{t+1} | x_{1:t}, f_1) \end{align} \\\tag5

    如果仔细观察,会发现-\log P(x_{t+1} ) 其实就是训练时x_{t+1} 这个 token 的 loss。所以可以进一步发现\sum_{t=1}^n -\log P(x_{t+1} | x_{1:t}, f_1) 这一项就是训练曲线下方的面积,具体示例如图2-1所示。

    图2-1 训练过程的损失值曲线

    因此,GPT的训练过程本质上就是对整个数据集 D 的无损压缩。图2-2详细展示了GPT无损压缩的每一项内容。

    图2-2 GPT的无损压缩

    按照上述方式计算并存储z_{t} ,那么 "训练代码 + 所有的z_t " 便是对数据集D 的无损压缩。只是在平时训练中计算得到下一个token的分布,并且计算loss进行反传后,便扔掉了这个分布,自然也没有计算并存储z_t 。但是「无损压缩」和「模型训练」的过程是等价的。

    有了压缩的量化公式,便可以很方便地计算压缩率,下面是压缩率的计算公式。 \begin{align} r_n = 1 - \dfrac{S_1}{S_0} \gt 1 - \dfrac{|f_1| + n + \sum_{t=1}^n -\log P(x_{t+1} | x_{1:t}, f_1)}{|f_0| + n \log m} \end{align} \\\tag6

    这也解释了为什么模型越大,往往表现越智能,更容易出现涌现。这是因为模型越大,往往loss越低,从而压缩率越高,模型越智能。(这里是根据数据压缩理论,就是压缩率越高,模型越智能)。

    图2-3 损失值曲线下的面积表示为数据集的无损压缩

    上图2-3是 LLaMA 模型的一些训练曲线,绿线和红线表示的两个模型只在数据集上训练了1个epoch,因此可以把训练损失视为| D |中下一个词(next-token)预测损失。同时也可以粗略地估计模型的描述长度(~1MB)。即便模型的参数量不同,但LLaMA 33B和LLaMA 65B两个模型有着相同的数据描述长度(用于训练的代码相同)。但65B模型显然有着更低的训练损失,把两项相加,可以看出65B实际上是更好的压缩器。

    下图2-4是更具体的数据,用于初始化和训练模型的代码约为 1MB,粗略地计算负对数似然大约是 400GB,而用于训练的原始数据是5.6TB的文本,因此该模型的压缩率为14倍。而Hutter Prize上最好的文本压缩器能实现8.7倍的压缩。接下来,讨论一下压缩率的变化。

    图2-4 LLaMa压缩率计算

    假设训练稳定,loss 平滑下降收敛到 \lim_{t\rightarrow\infty} -\log P(x_{t+1} | x_{1:t}, f_1) = - \log p^* ,那么当数据集D 无限增长时,压缩的极限可以表示为如下形式。

    \begin{align} r & = \lim_{n \rightarrow \infty} r_n \\ & = \lim_{n \rightarrow \infty} 1 - \dfrac{|f_1| + n + \sum_{t=1}^n -\log P(x_{t+1} | x_{1:t}, f_1)}{|f_0| + n \log m} \\ & = \lim_{n \rightarrow \infty} 1 - \dfrac{|f_1| + n + n(- \log p^*)}{|f_0| + n \log m} \\ & = 1 - \dfrac{1-\log p^*}{\log m} \\ & = 1 - \log_m 2 + \log_m p^* \\ \end{align} \\\tag7

    当 p^* \to 1 (预测得完全准确),压缩率的曲线如图2-5所示。由此可见,预测下一个词(next token prection)看似简单,但是却可以用压缩理论完美地解释,这也是为什么OpenAI坚持「预测下一个词」的原因。

    图2-5 压缩率变化曲线

    虽然像GPT这样的大模型可以实现压缩机制,但是这种压缩方式也有局限性。比如对于所有的一切都进行压缩非常不现实,像素级的图像建模开销非常大,对视频进行像素级别的建模非常不现实。还有就是非常多在现实中的数据可能是无法直接观测到的,不能指望通过压缩所有可观测到的数据实现通用人工智能。以围棋游戏AlphaZero为例,观察有限数量的人类游戏不足以实现真实的突破。相反,需要其智能体(Agent)自行进行对弈并收集数据中间的数据。

    参考