在 OpenAI 举办的 Parameter Golf 挑战中,参赛者面临着极为苛刻的条件:
模型产物大小严格限制在 16MB 以内,且必须在 8xH100 GPU 上 10 分钟内完成训练。
在常规的大模型预训练中,增加算力、数据或参数量往往能直接带来性能提升。
但在这个极限挑战中,参赛者被严格限制在「训练时间(10分钟)、压缩体积(16MB)、模型质量(极低 BPB)」的 不可能三角 里:
唯一目标就是:尽可能地降低 FineWeb 验证集上的 bpb。
💡 什么是 BPB? BPB (Bits Per Byte) 是本次挑战的核心评测指标。由于不同的分词器压缩文本的效率不同,单纯对比 Loss 并不公平。
BPB 通过公式
CrossEntropyLoss / ln(2)计算,并根据 Token 转换为字节。它衡量了模型平均需要多少个 bit 才能预测出下一个真实字节。它是一个与分词器无关的、绝对客观的生成质量指标。BPB 越低,说明模型对语言规律的掌握越好,压缩率越高。
盘点排行榜中含金量最高的技术,提炼为三大篇章:
万能招式:具有强正交性、可以直接叠加到现有基座上的优化技术。
四两拨千斤:仅需极小代码改动或算力开销,就能带来显著性能飞跃的技术。
踩坑与反思:在极限约束下表现不佳的反面教材。
万能招式
这部分主要介绍:「这项技术几乎不与其他优化产生冲突,不需要做复杂的参数权衡,也不挑剔底层的架构或精度。」你可以将它直接挂载到现有的基座上,且往往能实现收益的叠加。
滑动窗口验证
传统的模型验证通常将长文本切分成互不重叠的块(如每块 1024 Token)。这会导致每个块开头的 Token 严重缺乏上下文。
滑动窗口验证通过重叠的窗口滑动解决了这个问题:
让长度 1024 的窗口每次只往前滑动一段步长(例如步长为 64),并且 只对窗口内最后 64 个 Token 进行计分。
这意味着除了文本最开头外,绝大多数被计分的 Token 都拥有高达 960+ 的前置上下文信息。
1 | # s: 计分起始点。如果是第一个窗口则从 0 开始计分,否则只取最后 stride 个。 |
注意力重构
排他性自注意力 (XSA)
源自 Apple Machine Learning Research 的论文 Exclusive Self Attention。
论文在数学上证明了深层 Transformer 存在严重的“注意力相似性偏差”,即注意力输出与自身的 Value 向量高度重合。
由于残差连接本就会传递自身特征,注意力机制分配过多权重给自身会造成冗余。
在普通的 FlashAttention 输出后,强制减去该位置自身 Value 的投影分量,促使注意力机制更多地关注全局上下文。
公式:
假设注意力输出为 \(Y\),自身的 Value 向量为 \(V\)。首先求出 \(V\) 的单位方向向量 \(V_{norm} = \frac{V}{||V||}\)。
剔除投影后的新输出:
\[ Y_{new} = Y - (Y \cdot V_{norm}) \cdot V_{norm} \]
核心代码:
1
2
3
4# 利用 GQA 分组,无额外参数的张量投影剔除
vn = F.normalize(v, dim=-1).unsqueeze(-2)
proj = (y_g * vn).sum(dim=-1, keepdim=True) * vn
y_exclusive = y_g - proj
🤔 进阶探讨:XSA、Attention Sink 与 QK Norm 的区别与结合
XSA vs Attention Sink
它们解决的是不同层面的问题。
- Attention Sink 解决的是长文本生成时注意力分布在序列起始位置异常聚集的问题。
- XSA 解决的是深层注意力矩阵过度集中于对角线(过度关注自身)的问题。
XSA vs QK Norm
- QK Norm 对 Q 和 K 矩阵做 RMSNorm 归一化,目的是降低注意力分数的极端集中,防止 Softmax 变得过于尖锐。
- XSA 是在输出阶段从几何空间上剔除自身向量的投影。这两者可以完美叠加,QK Norm 从源头使注意力平缓均匀,XSA 在末端剔除自身权重偏置。
在最新的方案中,参赛者在所有 11 层全部开启了 XSA,强制在各层进行跨位置信息混合。
一阶平滑门控 (SmearGate)
Mega 通过补充指数移动平均(EMA)和门控混合来改善 Attention 的局部特征捕捉能力。
在序列的时间维度上,使用一个可学习的门控 \(g\),将前一个 Token 的特征平滑叠加到当前 Token 上。
公式:
\[Y_t = (1 - g) \cdot X_t + g \cdot X_{t-1}\]
其中 \(g = \sigma(\theta)\),\(\theta\) 是网络学习的标量权重。
核心代码:
1
2
3g = torch.sigmoid(self.gate)[None, None, :]
x_prev = torch.cat([torch.zeros_like(x[:, :1]), x[:, :-1]], dim=1)
x_smeared = (1 - g) * x + g * x_prev
激活函数与深层稳定
LeakyReLU(0.5)²
公式:\(y = (\max(x, 0) + 0.5 \min(x, 0))^2\)
为什么有效:
在传统的
ReLU²中,如果输入为负,输出及其梯度均为 0。在 16MB 的极小模型且伴随 Int6 或 1-Bit 极限粗糙量化时,一旦大量神经元失活,信息传递将严重受损。
改用
LeakyReLU(0.5)²后,负半轴输入能保留部分信息并产生非零梯度。这使得反向传播的信号得以保留,增强了低精度下模型的拟合稳定性。
逐层归一化缩放 (Layer-wise LN Scale)
公式:在残差主支 \(x_{l+1} = x_l + \text{SubLayer}(x_l)\) 中,对进入子层前的特征乘以缩放因子:
\[ \text{layer\_scale} = \frac{1}{\sqrt{\text{layer\_idx}+1}} \]
作用机制:
随着网络层数增加,每次残差分支叠加的特征会导致残差流中的数值不断累积,在极深层极易引发发散。
Layer-wise LN Scale 通过按层级的平方根倒数进行缩放(例如第 3 层的特征乘以 0.5,第 15 层乘以 0.25),有效抑制了深层特征方差的爆炸,使得深层非对称网络也能保持稳定的收敛。
部分旋转位置编码 (Partial RoPE)
Partial RoPE 将 Q 和 K 在特征维度进行切分。例如对于 64 维的注意力头,仅对前 16 维进行旋转位置编码,后 48 维直接原样放行。大幅减少了正余弦乘法带来的算力开销。
在 RoPE 的设计中,前几个维度的频率较高,主要负责捕捉局部、近距离的相对位置;而靠后的维度频率较低。
参赛者发现,在受限的 1024 序列长度下,保留前 16
维(25%)已足够模型感知距离信息。选择 16 是因为它是 2
的整数次幂,能保证 GPU 底层运算的内存对齐效率。
极致量化后处理
在模型完成训练并准备保存前,通过调整量化参数进一步降低量化误差。
前期方案 (GPTQ-lite)
放弃完整的 Hessian 计算,采用轻量化搜索:对权重的每一行尝试不同的百分位截断点(如 0.9990, 1.0 等),比较量化还原后的均方误差 (MSE),选出最优的截断阈值和缩放因子。
由于比赛规则严禁在 10 分钟训练后接触验证集或训练集进行量化校准,这种方案因为“偷看数据”被判违规。改成了下面的方案。
巅峰方案 (自回归生成全矩阵 GPTQ)
训练结束后,模型自回归地生成 64 条长文本(2048 个Token,温度 0.8),随后利用这些自生成的数据收集完整 Hessian 矩阵 (\(H = X^T X\))。
以此进行量化误差补偿与列重排,在不依赖外部数据的前提下最大限度恢复了量化精度。
GPTQ-lite 和 自回归生成全矩阵 GPTQ 的目的并不是减小物理文件体积。在后处理阶段,所有的主干权重已被指定存储为
Int8格式,因此矩阵的物理字节数是固定的。这类技术的本质是优化误差补偿与缩放策略。例如在 Int6 QAT 后,如果按照传统方式基于整行的最大绝对值设定缩放比例,个别离群值会导致整行的其他有效数值被量化为 0。GPTQ 的作用就是通过数学手段平滑或截断这些离群值,寻找全局最优的量化映射策略。
权重平均和退火
在极短训练时间的末期,为了使模型在 Loss 最低点保持稳定,参赛者对权重平均和学习率退火策略进行了精细调整。
抛弃传统的随机权重平均 (SWA)
SWA 的传统做法是每隔固定步数(如 50 步)保存当前权重的快照,最后进行算术平均。
在 10 分钟内的剧烈参数更新下,稀疏的快照之间可能存在较大的位置偏移,简单的算术平均难以反映最优解。
引入指数移动平均 (EMA)
大量榜单记录转而使用 EMA。EMA 在内存中维护了一个连续更新的模型副本。在优化器的每一步更新后,都会将当前模型权重的微小比例融合到副本中。
核心公式:
\[ \theta_{EMA} = \beta \cdot \theta_{EMA} + (1 - \beta) \cdot \theta_{current} \]
参数设定:\(\beta\)(衰减率)通常设为
0.997。这意味着副本在每一步保留 99.7% 的历史权重,吸收 0.3% 的新权重。核心代码:
1
2
3
4decay = 0.997
with torch.no_grad():
for ep, bp in zip(ema_model.parameters(), base_model.parameters()):
ep.data.mul_(decay).add_(bp.data, alpha=1.0 - decay)EMA 实现了对近期更新轨迹的连续平滑,有效缓解了极限训练末期的剧烈震荡。
退火延长与基于时间的动态控制
由于 10 分钟(600秒)无法完成常规模型的长周期退火,参赛者将余弦退火的步数从 1200 步大幅延长至 3500步。
部分方案甚至采用了基于物理时钟的动态衰减:通过检测剩余的秒数动态调整学习率,使其在结束时刻刚好降至 0,最大化利用了训练时间。
无损压缩
所有的网络权重在完成低比特量化(如 Int6、Ternary 或
1-Bit)后,最终均以 Int8 格式持久化。为了使这部分数据通过
16MB 的体积限制,必须在文件系统层面应用高强度的无损压缩算法。
Zstd-22
Zstandard (Zstd) 压缩算法提供了极速且高压缩率的方案,使用极限等级
level 22 显著减小了文件体积。
LZMA (preset=9)
对于包含大量零值的 Ternary 量化网络(占比可达
20%~29%),或分布极度集中的 Int6 QAT 权重,LZMA
凭借其强大的熵编码(Entropy
Coding)能力,精准捕捉连续重复模式,将 Int8
数据额外压缩了约
39%。这种极致的压缩率为词表等其他组件腾出了宝贵的空间。
残差混合 (resid mix)
在深度量化网络中,底层的初始特征容易在经过多次残差流叠加后逐渐模糊。残差混合 提出了一种极低额外参数的干预机制。
在每个 Block 进入注意力机制前,不仅仅使用当前层累积的残差特征,而是按比例混入最底层的初始 Token嵌入状态(\(X_0\))。
这种机制通过不断重新注入原始的Token信息,防止了极限量化下深层特征的过度模糊,增强了信息保真度。
公式:
\[ X_{mixed} = W_0 \odot X_{current} + W_1 \odot X_{0} \]
其中 \(W_0\) 和 \(W_1\) 是每个 Block 独立学习的两个缩放向量,通常初始化为 \(W_0=1, W_1=0\)。
核心代码:
1
2
3
4
5
6
7
8
9
10# self.resid_mix 包含 mix[0] (当前特征,初始为1) 和 mix[1] (初始特征x0,初始为0)
self.resid_mix = nn.Parameter(torch.stack((torch.ones(dim), torch.zeros(dim))).float())
def forward(self, x: Tensor, x0: Tensor) -> Tensor:
mix = self.resid_mix.to(dtype=x.dtype)
# 按向量比例混合当前特征 x 与初始特征 x0
x_mixed = mix[0][None, None, :] * x + mix[1][None, None, :] * x0
attn_out = self.attn(self.attn_norm(x_mixed))
# 继续后续流程
四两拨千斤
通过极小的代码改动或计算开销,带来了性能飞跃。
双词组哈希 (BigramHash)
在不增加大量参数的前提下,赋予模型理解双元词组特征的能力。
在受限的 1024 词表中,若为所有的两字组合单独分配向量,参数量将远超 16MB 限制。
BigramHash 采用了一种高效的数据结构设计:保留单字词表,同时引入一个较小的“双字特征哈希表”(例如 10240 行)。
当模型读取到连续的两个字时,使用位运算(XOR)计算出其哈希桶编号,随后将单字向量和对应的双字哈希向量进行叠加。
这种方法容忍了微小的哈希碰撞误差,却成功节省了数百万级别的参数,并将这些容量腾出用于扩充深层 Transformer 的网络结构。
🚀 进阶拓展: 在最新的 SOTA 方案中,结合 LZMA 的高压缩能力,BigramHash 的容量被拓展至
3072 × 112级别,进一步强化了模型捕捉连续词组关系的能力。
Muon 优化器
Muon 优化器替换了 AdamW,提高了训练效率。
传统 AdamW 的局限
AdamW 分别计算和记录每个独立参数的一阶和二阶动量。对于庞大的二维权重矩阵,这种逐元素的独立更新策略忽略了矩阵的整体几何结构,容易导致特征值分布失衡,在有限的 10 分钟训练窗口内影响了寻找全局最优解的速度。
Muon 的机制:矩阵整体正交化
Muon 放弃了逐元素的动量维护,而是对每步的梯度矩阵 \(G\) 直接进行正交化。
正交化使得更新矩阵的所有列向量相互独立且范数一致。
由于每次更新矩阵在各个方向上的量级均匀,Muon 维持了信号传递的动态等距性,确保梯度和特征在深层网络中既不会爆炸也不会衰减。
牛顿-舒尔茨 (Newton-Schulz) 迭代法
通常,求解正交矩阵需要计算复杂度极高且不利于 GPU 并行的奇异值分解 (SVD)。
Muon 巧妙地采用了 牛顿-舒尔茨 迭代算法,仅使用基础的矩阵乘法和加法便能逼近正交矩阵。
1 | # 抛弃缓慢的 SVD,使用矩阵乘加进行快速迭代 |
尽管迭代引入了额外的矩阵乘法,单步耗时略微增加,但其更新方向极其精准,单步收益巨大。
实验表明,即使在相同时间内 Muon 执行的总步数少于 AdamW,其最终抵达的损失值依然更低,相当于额外获得了近 200 步的有效收敛。
踩坑与反思
在这场突破极限的军备竞赛中,排行榜上光鲜亮丽的 SOTA 背后,也存在一些极具启发性但在特定约束下彻底失效的技术尝试:
深度循环的崩塌
在体积严格受限时,试图通过重复使用少量层的权重来实现更深的网络推演。例如存储 3 层参数,但在前向传播时循环执行 3 遍,以期获得 9 层网络的表达能力。
根据详尽的消融实验(PR #363),这种方法表现极度糟糕,显著落后于同样体积的普通网络。
失败原因:量化误差的指数级放大。在全精度网络下,层循环具有一定的有效性。但 Parameter Golf 的核心依赖于极限量化(如 Int6、Int8),量化网格会引入固有的数值截断误差。
在非循环网络中,每层遇到的误差模式相对独立;但在循环架构中,相同的权重和固定的量化误差会在特征层面上反复叠加。实验表明,同样的量化误差会被自我放大超过数百倍,导致模型在低精度下迅速发散,产生极高的 BPB。这属于一种与量化环境严重排斥的高耦合失效机制。
TTT (Test-Time Training) 的局限性
针对验证集中已被评估和计分的 Token,模型可以直接利用其误差来进行实时的权重微调。
动态微调 为验证集中的每个文档动态插入一个低秩适配器 (LoRA),作用于各层的 Q、V 投影及输出层。
当模型完成一个文本片段的前向计算后,立刻利用产生的 Loss 对 LoRA 参数进行一步 Adam 更新。这使得模型在推理同一文档时预测能力不断增强。
1 | for i in range(chunks): |
失败原因:完美分布下的边际递减。当模型配合 自回归生成全矩阵 GPTQ 这种顶尖的量化校准技术后,原始权重已被逼近到极高的信息密度与分布平衡。
在此种极其精密的权重状态下,强行在验证集上执行局部微调,反而容易破坏已成型的全局几何结构。后续尝试的数十种 TTT 变体均未能取得正向收益,甚至引发性能倒退。这也印证了特定优化技术在模型能力趋于物理极限时,可能会因冲突而失去发挥空间。