摘要
已有研究表明,预测模型可以转化为无损压缩器,反之亦然。近年来,机器学习领域逐渐专注于训练规模越来越大、性能越来越强的自监督(语言)模型。由于这些大型语言模型展现了强大的预测能力,因此在压缩方面也具有潜力。
在本研究中,我们主张从压缩的视角审视预测问题,并评估大型(基础)模型的压缩能力。我们证明,大型语言模型不仅是强大的通用预测器,压缩视角还为理解其扩展规律、分词方法和上下文学习提供了新的见解。
例如,尽管Chinchilla 70B模型主要接受文本训练,但它能够将ImageNet图像块压缩至原始大小的43.4%,将LibriSpeech语音样本压缩至16.4%,分别优于专用压缩器如PNG(58.5%)或 FLAC(30.3%)。
最后,我们展示了预测和压缩的等价性,利用这一特性可以通过任意压缩器(如gzip)来构建条件生成模型。
1 引言
信息论与机器学习密不可分,甚至常被比喻为“一枚硬币的两面”(MacKay, 2003)。其中一个优雅的联系在于数据的概率模型与无损压缩之间的本质等价性。香农的源编码定理(1948)就描述了这一概念:最佳熵编码的期望信息长度等于统计模型的负对数似然值。换句话说,最大化对数似然(数据的对数概率)等同于最小化每条信息所需的比特数。
基于概率模型的无损压缩可以通过多种方式实现,如哈夫曼编码(Huffman, 1952)、算术编码(Pasco, 1977; Rissanen, 1976)和非对称数字系统(Duda, 2009)。其中,算术编码因编码长度最优而被认可,其总体压缩效果取决于概率模型的性能(见图1算术编码概述)。
近年来,经过大规模预训练的Transformer模型(Vaswani等, 2017),即所谓的基础模型(Bommasani等, 2021),在各种预测任务中展现了卓越的表现(Bubeck等, 2023; Rae等, 2021),因此被认为是适用于算术编码的理想选择。
基于Transformer的算术编码压缩已在在线(Bellard, 2021; Mao等, 2022)和离线(Valmeekam等, 2023)场景中取得了最先进的结果。在在线场景中,模型以伪随机初始化后直接训练于需压缩的数据流上;而离线场景(本文研究的重点)则是在外部数据集上训练模型,再用于压缩不同的数据流。
因此,离线压缩是在上下文环境下进行的,模型参数固定。Transformer展现了出色的上下文学习能力(Laskin等, 2023; Brown等, 2020; Wei等, 2022; Genewein等, 2023),非常适合用于离线压缩任务。
上下文长度是离线压缩的一个关键限制因素,因为它决定了一个模型一次可以压缩的字节的最大数量。Transformer模型只能压缩几千字节(每个“令牌”用2或3字节编码),同时需要大量的计算。相应地,许多具有挑战性的预测任务(例如,算法推理或长期记忆)需要长的上下文(Delétang等人,2023),因此,扩展这些模型的上下文长度是一个关键的挑战,正在得到越来越多的关注(Zaheer等人,2020;Guo等人,2022;Bulatov等人,2023)。上下文压缩视角为我们提供了对当前基础模型失效模式的洞察。
在这项工作中,我们主张使用(无损)压缩来研究基础模型。为此,我们对大型语言模型的离线(上下文)压缩能力进行了广泛的实证研究,理由是它们已经变得容易获得(Touvron等人,2023a;2023b),因此可以用于压缩,无需训练开销。我们实证显示,这些模型虽然主要在文本上进行(元)训练,但在不同的数据模态上都能实现具有竞争力的压缩率,超过领域特定的标准压缩器(不考虑模型参数大小)。
此外,我们认为scaling law(Kaplan等,2020)的理念同样适用于模型压缩,但需注意的是在压缩时要关注“压缩率”而非通常用来衡量性能的“对数损失”。这是一个关键点,因为scaling law常用于描述模型规模和性能的关系,在这里被引入到压缩中。
随着压缩比的提升(即模型压缩得越来越小),一旦超过某个临界点,压缩反而会损害性能。原因在于,模型压缩过程中需要在输出中引入模型参数的信息量,过度压缩会导致对模型结构信息的过多依赖,从而影响最终性能。
作者主张从压缩的角度构建(自我监督)预测模型,原因是“好的压缩”也能提高模型泛化能力。Hutter(2006)的观点支持这一说法:在训练数据之外能保持良好表现的模型往往也是压缩率较高的模型,因为它们包含的信息更具代表性并去除了冗余。
-
语言模型研究与压缩之间的联系:通过算术编码和预测模型进行压缩。
-
大型语言模型(LLM)在文本之外的数据模态(如图像和语音)上也展现出高效的压缩能力,甚至超越了专门设计的压缩算法。例如,Chinchilla 70B在ImageNet补丁上的压缩率为43.4%,在LibriSpeech样本上的压缩率为16.4%,超过了专门的压缩器如PNG(58.5%)或FLAC(30.3%)。
-
虽然提升模型规模能带来更好的压缩效果,但当数据集大小固定时,模型大小的增加会遇到一个“硬限制”,即模型可能无法再显著提升压缩性能。这对模型扩展的“scaling law”提出了挑战,表明增加模型参数并非始终有效的策略。
-
使用压缩器作为生成模型,并直观地展示了基础压缩器的性能。
-
tokenization 可以被视为预压缩,一般不会提高压缩性能,但允许模型增加其上下文中的信息内容,因此通常被用来提高预测性能。
2 背景
在这一部分,我们回顾了信息理论所需的背景知识,以及它与似然最大化的关系。为此,我们考虑来自有限符号集 X 的长度为 n 的数据流 x1:n := x1x2…xn ∈ X^n。对于j ≤ n,我们用 x≤j = x<j+1 := x1:j 表示数据流的 前j个字符,并将空字符串表示为 ϵ。最后,我们用 sr 表示两个字符串s和r的连接。
编码分布
无损压缩
算术编码
算术编码器:将序列 x1:n 编码为一个介于 [0, 1) 区间内的数 λ 的二进制表示。我们通过逐步缩小包含 λ 的区间(在整个过程中保持 λ 的二进制表示的前缀不断增长)来确定 λ。最初,这个区间是 I0 = [0, 1)。在第 k 步(即编码 xk),我们首先将前一个区间 Ik-1 = [lk-1, uk-1) 分成 N 个子区间 ˜Ik(x1), ˜Ik(x2), …, 每个子区间对应 X = {x1, x2, …, xN} 中的一个字母。表示字母 y 的子区间 ˜Ik(y) 的大小是 (uk-1 − lk-1)·ρ(y | x<k)。形式上,我们定义
假设 X 上有一个严格的顺序。为了编码 xk,我们继续使用与其对应的区间,即 Ik = ˜Ik(xk)。最后,我们从终止区间 In 中选择具有最短二进制表示的 λ,并使用该二进制表示来编码 x1:n,图 1 展示了这个过程。
算术解码器:给定 λ 和条件概率 ρ,解码第 k 个字符的过程十分简单:从初始区间 I0 = [0, 1) 开始。寻找一个 y,使得 λ 落在 ˜Ik(y) 区间内,从而解码出 xk = y。接着,将 Ik 设置为 ˜Ik(xk),并继续解码下一个字符,即第 k+1 个字符。
最大似然估计:在实践中,源分布 ρ 通常未知,而是用一个参数化的概率模型 ρˆ 来估计。因此,我们不是实现序列 x1:n 的编码长度 −∑_{i=1}^{n} log2 ρ(xi | x<i),而是得到了次优长度 −∑_{i=1}^{n} log2 ρˆ(xi | x<i)。结果,期望的(次优)位数是交叉熵:
因此,我们可以通过最小化与某些 ρˆ 相关的交叉熵来最小化编码数据流的期望长度,这相当于似然最大化(MacKay, 2003)。然而,公式(2)正是用于训练当前基础模型的目标,即,对数损失。因此,最小化对数损失相当于最小化作为无损压缩器使用算术编码的该模型的压缩率,即,当前的语言模型训练协议使用最大压缩目标。
基于压缩的序列预测:类似于如何使用预测分布进行无损压缩(通过算术编码,如上所述),任何压缩器都可用于序列预测(Frank et al., 2000)。主要思想是将 ρ(x1:n) 定义为编码分布 2^(-ℓc(·)),其中 ℓc(x1:n) 是使用压缩器 c(例如 gzip)编码序列 x1:n 的长度。因此,我们通过计算 2^(ℓc(x<i) - ℓc(x<ixi)) 来恢复条件分布 ρ(xi | x<i),对所有的 xi 都这样做。
通用编码:在信息论中,我们通常考虑如何最优地压缩数据,即找到一种编码方法,使得数据的平均编码长度尽可能短。对于一个固定的分布ρ,我们可以设计一种最优编码(如算术编码)。但是,如果我们不知道数据的分布,或者数据可能来自多种不同的分布,我们就需要一种“通用”的编码方法,它对所有可能的数据分布都是最优的。
Kolmogorov复杂度是一个序列的最短描述的长度。它是一种理论上的度量,表示对序列进行编码的最短可能长度。如果我们能够根据Kolmogorov复杂度来编码数据,那么我们就能实现通用编码。
最优压缩等同于最优预测,这是因为,如果我们能够预测序列的下一个元素,那么我们就可以为它分配一个更短的编码,从而减少整体的编码长度。反之,如果我们能够最优地压缩一个序列,那么我们也必须在某种程度上预测了序列的结构,因为这样才能减少编码长度。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。