0


CALM自编码器:用连续向量替代离散token,生成效率提升4倍

过去这些年语言模型的效率优化基本围绕着两条主线展开:参数规模和注意力机制的复杂度。但有个更根本的问题一直被忽视,那就是自回归生成本身的代价。这种逐token生成的模式让模型具备了强大的通用性,同时也带来了难以回避的计算开销。

现在有一种思路值得关注:不去替换现有的优化手段,而是在上层加一个潜在空间的映射层,直接削减前向传播的次数。

每次让GPT-5写封邮件模型都得一个token一个token地往外蹦字。每个token意味着一次完整的前向计算,要把数十亿参数全过一遍。生成1000个token的回复那就是1000次前向传播,整个神经网络要走1000遍,计算资源和延迟就这样一点点累积起来。自回归架构就是这么设计的现在这个机制正变成AI系统效率的最大瓶颈。

找到比token更高层次的表示形式,对降低延迟、提升吞吐量都有直接作用。换句话说,用更少的资源干同样的活儿。

token本身已经是词汇表规模和表达能力之间比较精妙的平衡了,想在这个基础上再优化并不简单。

词汇表示的粒度选择

主流语言模型的词汇表通常在3万到25万个token之间。每个token对应一个学习出来的嵌入向量,存在查找表里,和transformer的层一起训练。模型就是靠拼接这些子词片段来还原文本。

看看其他方案就知道为什么这个设计能胜出了。

如果往上走用完整的词或短语来表示,词汇表会膨胀到无法控制。 词级分词得为每种语言的每个词形都建条目,短语级更不用说,光是两个词的组合就能把查找表撑爆。

往下走又会碰到另一个极端,字符级模型处理英文ASCII只要95个条目左右,内存占用看起来很好。 但问题是要把所有语言知识塞进这么小的嵌入空间(这事儿本身就够呛),更要命的是生成变成了逐字符进行。本来就贵的自回归循环直接翻4到5倍。

子词token正好卡在中间这个位置。语义信息足够丰富,词汇表又不会大到装不下。transformer普及这么多年,分词方式基本没变过,原因就在这儿。

得换个角度,不是去替换token,而是在token之上再搭一层。

Continuous Autoregressive Language Models(CALM)做的就是这个思路。整个框架包含好几个模块,这篇文章先聚焦基础部分:把token序列压缩成密集向量的自编码器。

自编码器的作用

在讲CALM架构之前,得先理解自编码器为什么重要,最直观的例子是图像生成。

传统自编码器的基本原理

自编码器的设计目标很明确:把输入数据压缩成紧凑的表示,然后从这个表示里把原始数据重建回来。

编码器负责压缩,解码器负责还原。

自编码器在扩散模型里才真正展现了威力

玩过Stable Diffusion或Midjourney就知道自编码器是怎么工作的,这些系统不是在原始的高维空间里一个像素一个像素地生成图像。

传统自编码器创建潜在空间 z,用作解码器重建输入的先验知识,公式摘自原始 CALM 论文。

实际流程是先用自编码器把图像压缩到更小的潜在空间。扩散过程完全在这个压缩后的空间里进行,根据文本提示不断调整,把噪声逐步变成有意义的潜在表示。最后一步才是解码器把潜在向量展开成完整图像。

不过传统自编码器有个硬伤:单纯为了重建而训练的自编码器,会把每个输入映射到潜在空间里一个特定的点。解码器记住了如何反向操作。

听上去挺高效但实际上系统很脆弱,稍微偏离那些记住的点——生成模型必然会产生这种偏移——解码器就会输出一堆乱码。

学习到的脆弱空间可能与学习目标完美对齐,但这可以被解释为过拟合。学习到的空间过于严格,无法很好地泛化,这意味着缺乏泛化性性。

变分自编码器带来的改进

变分自编码器的做法是把目标放松。编码器输出的不是精确的点,而是一个分布用均值和方差来定义。

训练目标里加入了Kullback-Leibler散度这一项,轻轻地把这些分布往标准高斯分布推,潜在空间就变得平滑了。

KL 组件惩罚编码器的高斯后验 pE(z ∣x)(由其均值和方差参数化)与固定先验 N(0,I ) 之间的散度,从而鼓励每个输入的潜在表示遵循该先验分布,公式摘自原始 CALM 论文。

不强制编码器把输入精确映射到某个点,允许它定义一小片区域——一个带均值和方差的概率分布。从这个区域里随机采样,解码出来的结果应该大致相同。

KL 散度目标,当使用较小的权重时,允许我们学习相对于目标目标的一些方差。在这种情况下蓝色光晕是红色表示的目标函数所允许的边距,所有这些共同代表变分自编码器的允许区域。

在重建损失里加上这个KL散度项(权重通常设得比较小),相当于告诉模型:「重建要准确,但在潜在空间里放哪儿不用太较真。」

变分自编码器学习目标的表示,beta 作为平衡 KL 散度贡献的小超参数,允许对潜在空间采样的空间约束较少。公式摘自原始 CALM 论文。

得到的流形更平滑,相邻的点编码的输出也相似。解码器学会处理变化而不是期待完美输入,这种泛化性正是另一个模型预测这些潜在向量时需要的特性。

解码器对噪声的容忍度变高了。潜在空间里的小扰动只会让输出产生小变化,不会导致彻底崩溃。

这种平滑性让扩散模型可以在潜在空间里游走,大概率能落在有意义的图像上。

提升语义带宽的自编码器方案

前面讲的自编码器都针对图像,跟文本没什么关系,那为什么对CALM重要?

在不抛弃子词token的前提下提升语义带宽,办法是用变分自编码器把 k 个连续token压缩成一个密集向量。

编码器把token序列压成一个潜在向量,解码器再把它还原成原始token。语言模型一次前向传播就能生成一个代表 k 个token的向量,不用每次只蹦一个token了。

所以绕道扩散模型这一圈是值得的。泛化性在这里同样关键,语言模型预测潜在向量时肯定会带入误差。

脆弱的自编码器会把那些稍有偏差的向量解码成完全错误的token序列。变分自编码器凭借平滑的潜在流形,照样能把它们解码成正确的token。

CALM 中提出的自编码器的完整架构,正如我们所看到的,编码器(红色)和解码器(绿色)是镜像,一个用于生成潜在空间,另一个用于解码它。从这个意义上说,这个自编码器是创新的,因为它学习表示比token更高的语义单元,学习自己的token嵌入(蓝色)。图片由作者创建。

为不同任务定制的嵌入

编码器第一件事是把token转成能处理的数字。跟普通语言模型一样,需要学习嵌入——一张把每个token映射到密集向量的查找表。

k 个token嵌入各自通过一个前馈网络,然后拼接起来经过线性层压缩成最终的潜在向量 z,解码器按相反方向做镜像操作。

为什么要从头学新嵌入,不直接借用现成语言模型的?

每个模型需要为自己的任务学嵌入,不同任务需要不同的嵌入:

语言模型的嵌入是为下一个token预测服务的——捕捉哪些token倾向跟在哪些token后面这类模式。自编码器的嵌入是为序列压缩和重建服务的——捕捉哪些token倾向于在一个块里同时出现这类模式。

三重泛化性机制

让自编码器在下游生成任务里足够泛化,训练时还需要叠加几种技术。

第一层是变分目标本身,损失函数里加的那个小KL散度项让潜在空间变平滑,前面已经说过了。

第二层是对潜在向量做dropout,训练时 z 里大约15%的维度会被清零再去解码。这逼着解码器学冗余表示——不能指望某个维度一定存在,得把信息分散到整个向量里。

第三层是对输入token做dropout。每个训练序列里约15%的token会被遮掉。本质上就是把掩码语言建模用在自编码器上:模型得根据上下文推断缺失的token,潜在表示最终编码的是语义含义不只是token索引的压缩查表。

维度坍缩的隐患

即便做了这些还有一种失效模式要处理:潜在表示坍缩。

损失函数里的KL散度项会惩罚偏离标准高斯先验的维度。有些维度发现直接变成先验更省事——坍缩到零均值单位方差——不用编码任何信息。CALM的自编码器里,放任不管的话128个维度里有71个会坍缩。

维度坍缩时,好几个维度会降到某个特定值,对优化目标来说挺方便。

这造成两个问题,都源于损失函数里的两项(原始自编码器损失和KL散度损失)计算时用同一个均值:

第一,潜在空间信息贫乏,得到的是稀疏嵌入而非密集嵌入。模型发现少数几个维度就能承载所需信息,其他维度多余。第二,坍缩的维度给解码器注入纯噪声,因为它们只是从没有信号的高斯分布采样。解码器拿不到真实的token。

解决办法是KL裁剪,不让每个维度的KL损失降到零,设个下限(这里是0.5)。任何维度的KL贡献低于这个阈值,损失就钳制在最小值。

现在想降低总损失,唯一的办法是让每个维度都编码点有用的东西。

当维度崩溃时,大多数坐标收敛到相同的值(这里是零),因此只有少数维度携带信息,其余的向解码器添加噪声。

这样一来全部128个维度都保持活跃,都在传递信息。解码器接收到的是密集、有意义的信号,而不是被噪声稀释的稀疏信号。

面向语言建模的潜在空间

到这一步,有了个能把 k 个token压缩成密集、泛化潜在向量的自编码器,重建准确率超过99.9%(token级别)。潜在空间平滑,所有维度都携带信号,解码器能优雅地处理带噪输入。

这是CALM的基础,接下来是训练一个完全在潜在空间操作的语言模型——预测下一个向量而非下一个token。每个预测的向量经过冻结的自编码器解码器,生成 k 个实际token。

但生成式语言模型依赖在有限词汇表上计算概率。连续向量没有词汇表——只有个无限维空间,似然变得无从计算。也就是说

整套训练和评估框架得从头重新设计。

似然计算的困境

训练自编码器、从文本块预计算潜在空间,这只是第一步。让语言模型适应这种增强的语义带宽,需要彻底改造建模框架:

无似然训练:标准的最大似然(token交叉熵)算不出来了。目标损失得完全重新构思。

无似然评估:没有token概率就没法算困惑度。得用新指标衡量语言模型在潜在空间里的学习效果。

无似然采样:温度控制没法重新缩放logits,拿不到每个token的概率分布了不像下一个token预测那样。得开发新的采样方法来处理文本生成。

工程实现的考量

CALM的自编码器从根本上改变了LLM技术栈里的语义表示,对训练和部署都有实际影响。

专用嵌入层 自编码器学自己的token嵌入——任务性质(联合k-token压缩/重建)跟自回归的下一token预测不同,优化的是「批量共现」模式而非「逐步递进」的几何关系。

离线训练开销 变分目标、KL裁剪、潜在/输入dropout,再加上全语料编码——预训练/微调/对齐之上又多了一大块一次性计算成本,好在推理阶段不涉及。

后期集成 比较适合作为完整LLM生命周期后的附加层,冻结解码器实现「下一潜在向量」生成,用前期成本换延迟/吞吐量的大幅改善。

正交优化 跟高效注意力机制/量化是互补关系,从结构上削减每个输出的前向传播次数。

无似然训练:从离散到连续的范式转换

有了自编码器下一步是训练能在潜在空间操作的语言模型。但传统的最大似然估计(交叉熵损失)在这里完全失效了:没有有限词汇表,就算不出softmax,也就没法得到显式的概率分布。

下一向量预测

自编码器建立了K个token和单个连续向量之间的双向映射。现在可以把语言建模从「预测下一个token」重新定义为「预测下一个向量」。

给定T个token的序列 X = (x₁, ..., xₜ),先分成L = T/K个不重叠的块,编码器把原始序列转换成更紧凑的连续向量序列:

Z = (z₁, z₂, ..., z_L),其中 z_i = f_enc(x_(i-1)K+1, ..., x_iK)

自回归目标变成预测序列中的下一个向量:p(Z) = ∏ p(z_i | z_<i)

问题在于z_i 存在于无限的实数空间ℝˡ中。softmax在这个不可数集合上不适用,显式概率密度 p(z_i | z_<i) 无法计算。这带来两个核心挑战:训练没法用最大似然估计,评估没法算困惑度。

生成头的设计约束

处理连续数据的生成模型(VAE、GAN、扩散模型)已经研究得很充分了,图像和音频合成领域都在用。最近有个趋势是把这些方法跟自回归模型结合:Transformer主干预测条件隐藏状态,后续的生成模型在每一步产生连续输出。

CALM采用了这个架构,但有个硬性约束:计算效率。扩散模型或流匹配需要迭代采样——生成一个向量要几十甚至上百次网络评估,这直接抵消了减少自回归步骤带来的加速。所以CALM需要的是能高质量单步生成的生成头。

这个组件被设计成轻量级的「生成头」。形式上,它是个随机函数,接收Transformer的隐藏状态 h_i-1 ∈ ℝᵈ,从条件分布中抽取样本 z_i ∈ ℝˡ:

h_i-1 = Transformer(z_1:i-1),z_i ~ p(· | h_i-1)

能量损失:严格适当评分规则

训练目标借鉴了严格适当评分规则(strictly proper scoring rules)的理论。评分规则 S(P, y) 给预测分布P在观察到结果y时打分,分数越高越好。预测分布P相对于真实分布Q的质量用期望得分衡量:S(P, Q) = 𝔼_y~Q [S(P, y)]

如果期望得分在P = Q时达到最大,这个评分规则就是「适当的」(proper):

S(P, Q) ≤ S(Q, Q) 对所有分布P成立

如果等号仅在P = Q时成立,就是「严格适当的」(strictly proper)。这保证了评分规则不会激励模型预测有偏或扭曲的分布。

用严格适当评分规则作为训练目标,最大化期望得分就等价于让模型的预测分布逼近真实分布。这其实是最大似然估计的直接推广,负对数似然就是对数得分的特例。虽然连续域的似然算不出来,评分规则理论提供了丰富的替代方案。

训练目标采用能量得分(Energy Score),一个在多种生成任务中都表现不错的严格适当评分规则。能量得分完全不需要似然,而是通过样本距离来衡量预测和观测的对齐程度。对于预测分布P和真实观测 y

S(P, y) = 𝔼x',x''~P [‖x' - x''‖^α] - 2𝔼x~P [‖x - y‖^α]

第一项鼓励多样性,惩罚产生塌陷或过度自信预测(所有样本都相同)的模型。第二项鼓励保真度,驱动模型的预测接近真实观测。这里的α通常设为1,对于α ∈ (0, 2),得分都是严格适当的。

虽然期望无法精确计算,可以构造无偏的蒙特卡洛估计器作为实际的损失函数「能量损失」。在每一步i,从生成头抽取N个候选样本 {z̃i,1, ..., z̃i,N}。另外自编码器不是把token块映射到固定点,而是映射到条件高斯后验 z_i ~ q(· | x_(i-1)K+1:iK)。依赖单个样本 z_i 作为真值会给能量损失带来高方差。为了缓解这个问题并稳定训练从这个后验抽取M个目标样本 {z_i,1, ..., z_i,M}。

这样就得到了最终的能量损失:

energy = Σi (2/NM Σn Σm ‖z_i,m - z̃i,n‖ - 1/N(N-1) Σn≠k ‖z̃i,n - z̃i,k‖)

实践中设N = 8,M = 100。模型样本数N直接影响训练成本,因为每个样本都需要评估一次生成头,所以用小N保持训练效率。从已知高斯后验抽取目标向量的开销几乎可以忽略,所以用大M来降低损失的方差。

这个无似然训练目标的关键优势是灵活性:只要求能从生成头抽样,对内部架构的约束很少,允许简单高效的设计。

能量Transformer架构

生成头的输入有两部分:Transformer主干输出的隐藏状态 h_i-1(提供条件上下文),和随机噪声向量 ε ∈ ℝᵈⁿᵒⁱˢᵉ(提供采样所需的随机性)。ε 的每个维度从均匀分布 U[-0.5, 0.5] 独立采样。隐藏状态和噪声向量都通过独立的线性层投影到生成头的内部维度,这个维度设为跟Transformer的隐藏维度d相同。

生成头的核心是L个残差MLP块的堆叠,逐步把初始噪声表示 ε₀ = ε 精炼成最终的输出向量。每个MLP块先通过两个线性层把当前表示 ε_l 和隐藏状态融合,然后是中间维度为d的SwiGLU层。残差连接把块的输入加到输出上。最后用一个线性层把表示投影到目标维度l,产生输出向量 z_i。

单个MLP块包含约6d²个参数。块的数量设为Transformer层数的四分之一,整个生成头只占总模型参数的10%左右,计算开销很小。

离散token输入的必要性

对于模型输如:一般做法是把上一步预测的潜在向量 z_i-1 用线性投影嵌入到Transformer的隐藏维度d。但实验发现用这些潜在向量作为Transformer的输入会导致性能明显下降,模型难以从这么紧凑的输入表示中解包语义信息。

解决办法是把模型的自回归过程基于离散token空间。训练时,每步的输入由上一步的K个token构成。为了保持效率用轻量级的输入压缩模块——两层MLP——把K个嵌入映射成单个输入表示。推理流程如下:

输入处理:在步骤i,前面生成的K个token被嵌入并压缩成单个输入表示送入Transformer。

连续预测:Transformer输出隐藏状态 h_i-1,能量生成头用它预测下一个连续向量 z_i。

离散反馈循环:预测的向量 z_i 立即通过冻结的预训练自编码器解码器 g_dec重建下一个K个离散token。

这个设计保证了模型始终在语义丰富的离散空间进行条件化同时在潜在空间完成高效的预测。

BrierLM:无似然评估指标

还有一个问题就是困惑度(Perplexity)无法用了,需要新的评估指标。CALM提出BrierLM,基于布赖尔得分(Brier score)评分规则,现在广泛用于评估神经网络的校准性。

对于预测分布P和真实结果y,布赖尔得分定义为:

Brier(P, y) = 2P(y) - Σ_x P(x)²

跟只衡量准确性的原始似然P(y)不同,布赖尔得分包含额外项 Σ_x P(x)² 来量化预测不确定性。这个结构平衡了两个竞争目标,最终奖励良好校准的预测。期望布赖尔得分可以分解为:

𝔼y~Q [Brier(P, y)] = -Σx (P(x) - Q(x))² + Σ_x Q(x)²

第一项是平方误差,在P = Q时最小化。第二项是数据方差,是常数。所以期望布赖尔得分仅在P = Q时唯一最大化,确保了它是严格适当的。

BrierLM的优势是可以仅通过从模型抽样来无偏估计不需要显式概率,对于传统自回归模型可以从最终的softmax分布抽样来应用BrierLM估计器,实现跟无似然框架的直接公平比较。

实验验证显示,在训练传统自回归模型的整个过程中BrierLM和交叉熵高度一致,呈现近乎线性的关系,皮尔逊相关系数-0.966,斯皮尔曼等级相关-0.991。这种强单调对齐确认BrierLM是可靠的语言建模能力度量,建立了它作为困惑度的可信无似然替代品的地位。

实验结果与性能分析

实验在标准语言建模基准上验证CALM框架,展现了更优的性能-计算权衡。当K = 4时(一个向量代表4个token),CALM达到了与强离散基线相当的性能,但计算成本显著更低。

随着K增加所需计算量按比例减少,并且性能只有轻微下降。这确认了语义带宽是优化语言模型性能-计算比的高效缩放轴。在K = 1时CALM的性能落后于离散模型,说明当前设计还有很大改进空间。

对比了三种生成头:基于能量的方法、扩散和流匹配。扩散模型表现不好,流匹配初期收敛更快,但基于能量的头达到了更高的性能上限。能量头单步生成其他两种方法依赖迭代采样,这让能量头成为以效率为目标的框架的明确选择。

371M参数的CALM-M模型达到了与281M参数离散基线相当的BrierLM分数,但FLOPs更少。CALM建立了新的、更高效的语言建模性能-计算前沿。增加每个自回归步骤的语义带宽,允许CALM在参数数量上显著更大的同时,训练和推理所需的FLOPs更少。

这些发现确立了下一向量预测作为通向超高效语言模型的强大且可扩展路径。语义带宽这个新的设计轴,跟KV缓存、量化一样,可能成为LLM的标配优化方向。

论文:

https://arxiv.org/abs/2510.27688

“CALM自编码器:用连续向量替代离散token,生成效率提升4倍”的评论:

还没有评论