GPT作为序列数据的无损压缩器

预测下一词的自回归大模型GPT早已风靡全球。压缩即智能的说法已经广为人知,但关于其无损压缩的能力貌似一直有争议。GPT压缩到底是无损还是有损呢?

这是一个非常值得打破沙锅问到底的问题,它正好切入了LLM压缩最核心、也最巧妙的部分。我们来把这个过程彻底拆解一下,让它变得清晰易懂。

一个直观的比喻:在无限的图书馆里找书

想象一个图书馆,里面包含了所有可能的句子。

    • 像 “人工智能将重塑未来产业格局” 这种符合语法、逻辑且有意义的句子,位于图书馆里非常显眼、容易找到的区域 (比如“热门新书区”)。
    • 而像 “产业未来将格局人工智能重塑” 这种语法不通的句子,位于偏僻的角落
    • 像 “猫枕头跳跃蓝色因为星期三” 这种完全随机的胡言乱语,则位于几乎无法访问的尘封地下室

现在,我需要告诉您具体是哪句话。

    • 对于那句热门句子,我不需要把整句话念给您听。我只需要给您一个极短的指令:“热门区,第3排,第5本”。这个指令就是压缩后信息 (少量比特)
    • 对于那句胡言乱语,我没有捷径可走,只能把整句话一字不差地读给您听。这个指令非常长,几乎和原文一样。

GPT的作用,就是建立了这个图书馆的终极索引系统(世界模型)。它知道每一句话“热门”的程度(概率)。算术编码就是那个高效的区间定位系统

核心机制:算术编码如何划分“区间”

现在我们进入技术细节。算术编码的精髓是把一整段信息表示成 0.01.0 之间的一个小数。

压缩:一步步“缩小”区间

我们以您的例子 “人工智能将重塑未来产业格局” 来走一遍流程。为了简化,我们假设分词是:“人工”, “智能”, “将”, “重塑”, “未来”, “产业”, “格局”。

  1. 初始状态:我们的区间是 [0.0, 1.0]
  2. 编码第一个词“人工”
    • GPT模型启动,预测第一个词的概率。假设在所有可能开头的词中,"人工" 的概率是 5% : P("人工")=0.05。
    • 算术编码器就在 [0.0, 1.0] 的区间里,把开头 5% 的位置,也就是 [0.0, 0.05],分配给"人工"。
    • 我们“放大”进入这个新区间 [0.0, 0.05]
  3. 编码第二个词“智能”
    • 现在,GPT的上下文是“人工”。它预测下一个词。因为“人工智能”是高频词,所以 P("智能" | "人工") 的概率会非常高,比如 80%。
    • 算术编码器就在当前区间 [0.0, 0.05] 里,把前 80% 的位置分配给"智能"。
    • 新的区间是 [0.0, (0.05 * 0.8)],即 [0.0, 0.04]
    • 我们再次“放大”进入这个更小的区间 [0.0, 0.04]
  4. 编码第三个词“将”
    • 上下文是“人工智能”。GPT预测 P("将" | "人工智能") 的概率也很高,比如 60%。
    • 新区间是 [0.0, (0.04 * 0.6)],即 [0.0, 0.024]
  5. ...持续这个过程...

最终结果:当整句话编码完毕,我们得到了一个非常精确定位的、极小的最终区间,比如 [0.02113, 0.02114]

关键来了:我们只需要从这个最终区间里随便挑选一个数,比如 0.02113,把它转换成二进制(比如 0.00010101...),这个二进制串就是我们的压缩结果。因为它是一个高概率句子,每一步都取了较大的百分比,所以最终区间的范围相对较大(虽然数值很小),可以用较少的二进制位数来精确表示。

解压:按图索骥,还原路径

解压过程就是上述步骤的逆向操作,像拿着藏宝图找宝藏一样。让我们用数学语言走一遍解压流程。

    • 压缩数字V = 0.02113
    • GPT模型:随时待命

第一轮:解码第一个词

  1. 获取概率:GPT预测,(无上下文时)'人工'的概率是0.05,'智能'是0.03...
  2. 划分区间[0.0, 1.0] 被划分为:
    • [0.0, 0.05] -> '人工'
    • [0.05, 0.08] -> '智能'
    • ...
  3. 定位V = 0.02113 落在 [0.0, 0.05] 区间内。
  4. 解码:输出第一个词 “人工”
  5. 更新区间:我们接下来的工作区间是 L=0.0, H=0.05

第二轮:解码第二个词 

  1. 区间归一化 (Rescaling) 
    • 我们需要更新我们的指针 V,计算它在 [0.0, 0.05] 这个新区间里的相对位置。
    • 公式:V_new = (V_old - L) / (H - L)
    • 计算:V_new = (0.02113 - 0.0) / (0.05 - 0.0) = 0.4226
    • 现在,我们用来做决策的指针变成了 0.4226
  2. 获取概率:解压器给GPT输入上下文“人工”,GPT预测下一个词的概率:
    • P("智能" | "人工") = 0.8
    • P("智慧" | "人工") = 0.1
    • ...
  3. 在新坐标系下划分区间:我们根据新概率划分标准区间 [0.0, 1.0]
    • [0.0, 0.8] -> '智能'
    • [0.8, 0.9] -> '智慧'
    • ...
  4. 定位:我们用归一化后的新指针 V_new = 0.4226 来比较。它落在 [0.0, 0.8] 这个区间内。
  5. 解码:输出第二个词 “智能”
  6. 更新区间[L, H]:为下一轮的计算定义新的边界。方:将相对的 [l,h] 区间缩小/映射回绝对坐标系中。'智能'对应的区间是 [0.0, 0.8]。映射回绝对坐标系的工作区间是 [0.0, 0.04]。这个 [0.0, 0.04] 精确地定义了“人工智能”这个词序列在整个 [0.0, 1.0] 空间中的最终位置。
    • L_new = L_prev + (l_curr * Width_Previous)
    • H_new = L_prev + (h_curr * Width_Previous)

这个过程不断重复,每一步都包含 定位 -> 解码 -> 归一化 三个动作,直到结束。具体说,更新指针 V 与 更新区间 [L, H] 这两个过程交替进行,一个负责“决策”,一个负责“更新状态”,共同驱动解码器精确地还原出原始文本。因为每一步的选择都是唯一的,所以解压结果能100%保证和原文一致。

总结:为什么高概率 = 少比特

这背后的数学原理是信息论。一个事件所包含的信息量是其概率的负对数:

I(x) = -log₂(P(x))

    • 高概率事件 (P → 1):比如GPT预测下一个词是“格局”的概率是95% (P=0.95)。它所包含的信息量就非常小(-log₂(0.95) ≈ 0.07比特)。我们只需要极少的信息就能确认这个预测。
    • 低概率事件 (P → 0):如果下一个词是个罕见词,概率只有0.01% (P=0.0001),它所包含的信息量就极大(-log₂(0.0001) ≈ 13.3比特)。我们需要很多信息才能描述这个“意外”。

算术编码巧妙地将这个理论变成了现实。对于一个高概率序列,最终的区间总大小(即所有概率的乘积)会比较“大”,从而可以用一个位数较少的二进制小数来表示。这就是“语义级消除冗余”的本质:所有符合人类知识、语法和逻辑的“意料之中”的内容,都被GPT这个“世界模型”识别出来,并用最少的信息量进行了编码。

 

 

发布者

立委

立委博士,多模态大模型应用高级咨询。出门问问大模型团队前工程副总裁,聚焦大模型及其AIGC应用。Netbase前首席科学家10年,期间指挥研发了18种语言的理解和应用系统,鲁棒、线速,scale up to 社会媒体大数据,语义落地到舆情挖掘产品,成为美国NLP工业落地的领跑者。Cymfony前研发副总八年,曾荣获第一届问答系统第一名(TREC-8 QA Track),并赢得17个小企业创新研究的信息抽取项目(PI for 17 SBIRs)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理