||
预测下一词的自回归大模型GPT早已风靡全球。压缩即智能的说法已经广为人知,但关于其无损压缩的能力貌似一直有争议。GPT压缩到底是无损还是有损呢?
这是一个非常值得打破沙锅问到底的问题,它正好切入了LLM压缩最核心、也最巧妙的部分。我们来把这个过程彻底拆解一下,让它变得清晰易懂。
一个直观的比喻:在无限的图书馆里找书想象一个图书馆,里面包含了所有可能的句子。
像 “人工智能将重塑未来产业格局” 这种符合语法、逻辑且有意义的句子,位于图书馆里非常显眼、容易找到的区域 (比如“热门新书区”)。
而像 “产业未来将格局人工智能重塑” 这种语法不通的句子,位于偏僻的角落。
像 “猫枕头跳跃蓝色因为星期三” 这种完全随机的胡言乱语,则位于几乎无法访问的尘封地下室。
现在,我需要告诉您具体是哪句话。
对于那句热门句子,我不需要把整句话念给您听。我只需要给您一个极短的指令:“热门区,第3排,第5本”。这个指令就是压缩后信息 (少量比特)。
对于那句胡言乱语,我没有捷径可走,只能把整句话一字不差地读给您听。这个指令非常长,几乎和原文一样。
GPT的作用,就是建立了这个图书馆的终极索引系统(世界模型)。它知道每一句话“热门”的程度(概率)。算术编码就是那个高效的区间定位系统。
核心机制:算术编码如何划分“区间”现在我们进入技术细节。算术编码的精髓是把一整段信息表示成 0.0 到 1.0 之间的一个小数。
压缩:一步步“缩小”区间我们以您的例子 “人工智能将重塑未来产业格局” 来走一遍流程。为了简化,我们假设分词是:“人工”, “智能”, “将”, “重塑”, “未来”, “产业”, “格局”。
初始状态:我们的区间是 [0.0, 1.0]。
编码第一个词“人工”:
GPT模型启动,预测第一个词的概率。假设在所有可能开头的词中,"人工" 的概率是 5% : P("人工")=0.05。
算术编码器就在 [0.0, 1.0] 的区间里,把开头 5% 的位置,也就是 [0.0, 0.05],分配给"人工"。
我们“放大”进入这个新区间 [0.0, 0.05]。
编码第二个词“智能”:
现在,GPT的上下文是“人工”。它预测下一个词。因为“人工智能”是高频词,所以 P("智能" | "人工") 的概率会非常高,比如 80%。
算术编码器就在当前区间 [0.0, 0.05] 里,把前 80% 的位置分配给"智能"。
新的区间是 [0.0, (0.05 * 0.8)],即 [0.0, 0.04]。
我们再次“放大”进入这个更小的区间 [0.0, 0.04]。
编码第三个词“将”:
上下文是“人工智能”。GPT预测 P("将" | "人工智能") 的概率也很高,比如 60%。
新区间是 [0.0, (0.04 * 0.6)],即 [0.0, 0.024]。
...持续这个过程...
最终结果:当整句话编码完毕,我们得到了一个非常精确定位的、极小的最终区间,比如 [0.02113, 0.02114]。
关键来了:我们只需要从这个最终区间里随便挑选一个数,比如 0.02113,把它转换成二进制(比如 0.00010101...),这个二进制串就是我们的压缩结果。因为它是一个高概率句子,每一步都取了较大的百分比,所以最终区间的范围相对较大(虽然数值很小),可以用较少的二进制位数来精确表示。
解压:按图索骥,还原路径解压过程就是上述步骤的逆向操作,像拿着藏宝图找宝藏一样。让我们用数学语言走一遍解压流程。
压缩数字:V = 0.02113
GPT模型:随时待命
第一轮:解码第一个词
获取概率:GPT预测,(无上下文时)'人工'的概率是0.05,'智能'是0.03...
划分区间:[0.0, 1.0] 被划分为:
[0.0, 0.05] -> '人工'
[0.05, 0.08] -> '智能'
...
定位:V = 0.02113 落在 [0.0, 0.05] 区间内。
解码:输出第一个词 “人工”。
更新区间:我们接下来的工作区间是 L=0.0, H=0.05。
第二轮:解码第二个词
区间归一化 (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。
获取概率:解压器给GPT输入上下文“人工”,GPT预测下一个词的概率:
P("智能" | "人工") = 0.8
P("智慧" | "人工") = 0.1
...
在新坐标系下划分区间:我们根据新概率划分标准区间 [0.0, 1.0]:
[0.0, 0.8] -> '智能'
[0.8, 0.9] -> '智慧'
...
定位:我们用归一化后的新指针 V_new = 0.4226 来比较。它落在 [0.0, 0.8] 这个区间内。
解码:输出第二个词 “智能”。
更新区间[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是其概率P的负对数:
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这个“世界模型”识别出来,并用最少的信息量进行了编码。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2025-7-9 02:25
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社