
1.4.3 GPT是对数据的无损压缩
1.4.2节介绍了算术编码的原理,它可以实现无损压缩,从而减少传输的数据量。我们的目标是最小化传输的数据量,也就是最小化二分查找的次数。
为了计算二分查找的次数的上界,我们可以用一个直观的方法。还是用1.4.2节中的例子,把的区间均匀铺满整个[0,1]区间,假设
,那么会分成
个区间,大约需要查询
次。如果不考虑取整的误差,可以得到二分查找的次数,表示为
(1-5)
实际上,二分查找的次数的上界可以表示为
(1-6)
这样就可以知道传输数据集的代价
,表示为
(1-7)
仔细观察,我们会发现其实就是训练时
这个标记的损失值。因此我们可以进一步发现,
就是训练曲线下方的面积,如图1-18所示。

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

图1-19 GPT的无损压缩
按照图1-19所示的方式计算并存储,“训练代码和所有
”便是对数据集D的无损压缩。只是在平时训练中计算得到下一个标记分布,并且计算损失进行反传后,便扔掉了这个分布,自然也没有计算并存储
。但是“无损压缩”和“模型训练”的过程是等价的。
有了压缩的上述量化公式,便可以很方便地计算压缩率。压缩率的计算公式为
(1-8)
式(1-8)也解释了为何模型规模越大,往往表现越智能。这是因为在给定数据集,并假设验证集与训练集同分布的情况下,大模型往往具有较低的损失,进而可能实现更高的压缩率,使得模型表现更为智能。
图1-20是Llama模型的一些训练曲线(见文前彩图)[3],由于绿线和红线表示的两个模型只在数据集上训练了1个轮次(epoch),因此可以把训练损失视为预测损失。同时也可以粗略地估计模型描述长度(约为1 MB)。即便模型的参数量不同,但Llama 33B和Llama 65B两个模型有着相同的模型描述长度(用于训练的代码相同)。65 B模型显然有着更低的训练损失,把训练损失和模型描述长度两项相加,可以看出65 B实际上是更好的压缩器。

图1-20 损失值曲线下的面积表示为数据集的无损压缩
图1-21是更具体的数据(见文前彩图),用于初始化和训练模型的代码大小约为1 MB,粗略地计算负对数似然,大约是0.4 TB,而用于训练的原始数据是5.6 TB的文本,因此该模型的压缩率为7.14%(0.4 TB/5.6 TB×100%≈7.14%)。接下来,我们讨论一下压缩率的变化。

图1-21 Llama模型压缩率计算
假设训练稳定,损失值平滑下降,收敛到,那么当数据集D无限增长时,压缩率的极限可以表示为
(1-9)
当(预测得完全准确),压缩率的变化曲线如图1-22所示。由此可见,预测下一个词(next token prection)可以用压缩理论完美地解释,这也是OpenAI坚持“预测下一个词”的原因。同时,压缩理论也印证了,在生成任务中,GPT架构比BERT架构更加合理,更加符合自然语言的规律。
虽然像GPT这样的大模型可以实现压缩,但是这种压缩方式也有局限性。例如,由于像素级的图像建模的开销非常大,对视频进行像素级的建模非常不现实,因此很多现实中的数据无法被直接观测到,不能寄希望于压缩所有可观测到的数据来实现通用人工智能。

图1-22 压缩率的变化曲线