从Token到字节II:从原始数据中学习Cartesia Research 2026年10月28日The bytes of "The_end_of_tokens" chunked by an H-Net in two stages: first into "The_", "end_", "of_", and "tokens", then into "The end of" and "tokens"

缩放律

损失对损失缩放律

验证bpb与算力

OLMES bpb与验证bpb

BPE Transformer字节TransformerBPE-NP TransformerH-Net类BLT

在 第一篇博文 中,我们看到了分层网络相较于标准分词语言模型所带来的显著效率提升。在本篇博文中,我们将通过分析广泛的方法,更深入地剖析其中一些经验现象。我们的最终目标是更清晰地回答以下问题:如果 我们的目标是在没有任何先验的情况下训练出尽可能好的语言模型,那么不同方法之间有哪些权衡?而这些先验目前又为我们带来了多少收益?

我们的主要工具将是仔细研究两类规律:

  1. 算力对损失:标准的缩放律,衡量模型在预训练中的效率。
  2. 损失对损失:模型预训练强度(以损失或每字节比特数衡量)与其下游性能之间的关系。

损失对损失规律捕捉了模型泛化能力的某种度量,我们将其作为预训练模型实际理解其数据程度的代理指标。我们将引入一系列精心控制的模型,以理解架构决策(尤其是围绕输入数据处理方式的决策)如何影响模型性能:

由此浮现出的一个核心矛盾是

  • 在压缩输入上运行的标准语言模型具有更强的算力效率;
  • 能够访问底层更细粒度数据(如字节级)的模型具有更强的泛化能力。

H-Net最终兼得两者之长,并且我们提供了证据表明其端到端特性至关重要。引人注目的是,一种模式浮现出来:模型输入处理(分词或分块)的质量似乎与其理解数据的能力密切相关。我们还将在此过程中发现许多其他有趣的现象!

预分词:隐藏的先验

我们将稍作绕行,讨论分词中一个常被忽视的组成部分: 预分词步骤。该步骤涉及用手工编写的正则表达式对语料库进行预切分,而这些正则表达式已被逐步设计得越来越复杂。以下是一些示例。1

决定什么可以成为token的四个正则表达式

与上方正则表达式相比有所变化

GPT-2

OpenAI,2019
也用于GPT-3、Falcon、StarCoder2、EXAONE

's|'t|'re|'ve|'m|'ll|'d|␣?\p{L}+|␣?\p{N}+|␣?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+

这是LLM中预分词的早期示例之一,它将缩略形式作为七个英语后缀的显式列表来处理;同时还会切分连续的字母、数字和其他符号,并可携带一个前导空格

cl100k

OpenAI,2023(GPT-3.5、GPT-4)
也用于Llama-3、SmolLM3、Phi-4、OLMo 2。Qwen将其与 \p{N}.

(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\r\n\p{L}\p{N}]?\p{L}+|\p{N}{1,3}|␣?[^\s\p{L}\p{N}]+[\r\n]*|\s*[\r\n]+|\s+(?!\S)|\s+

缩略形式变为不区分大小写;数字每三位切分一次;一个单词可携带一个前导非字母字符

o200k

OpenAI,2024(GPT-4o)
也用于gpt-oss、MiniMax-M1。Kimi K2和Nemotron-H使用变体。

[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]*[\p{Ll}\p{Lm}\p{Lo}\p{M}]+(?i:'s|'t|'re|'ve|'m|'ll|'d)?|[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]+[\p{Ll}\p{Lm}\p{Lo}\p{M}]*(?i:'s|'t|'re|'ve|'m|'ll|'d)?|\p{N}{1,3}|␣?[^\s\p{L}\p{N}]+[\r\n/]*|\s*[\r\n]+|\s+(?!\S)|\s+

单词按大小写切分,因此 CamelCase 变为 Camel + Case;缩略形式附着在单词上,而不是被切分出去

DeepSeek-V3

DeepSeek,2024
也用于DeepSeek-R1、V3.1、V3.2

\p{N}{1,3}然后[\u4E00-\u9FA5\u3040-\u309F\u30A0-\u30FF]+然后[!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~][A-Za-z]+|[^\r\n\p{L}\p{P}\p{S}]?[\p{L}\p{M}]+|␣?[\p{P}\p{S}]+[\r\n]*|\s*[\r\n]+|\s+(?!\S)|\s+

连续三个正则表达式:先处理数字,再处理硬编码的CJK范围(表意文字和假名,不含韩文),最后是带有额外标点规则的标准预分词正则表达式

预分词最明显的效果是将英文文本切分为以空白分隔的单词;如果没有预分词,词表中最终会出现许多看起来像乱码的token。

详情:无预分词时token的示例

不携带语义的token最明显的例子是跨越空白但不跨越完整单词的token。

常见后缀、前缀以及彼此粘连的单词:

ed the s and s of the es in the the s a c to re ed and un s are un

多词专有名词的中间子串:

North Kore New Yor ong K audi Arab

跨越句子标点的token:

. The , and s, but I don't Said...\n\n

跨越换行和缩进的token:

.\n\nThe ;\nimport \n\n def __init__(self, (self):\n self.

直观地说,预分词更广泛的作用是试图让token与数据中的语义对齐 (值得注意的是,在以拉丁字母书写的语言中,以空白分隔的单词往往携带语义)。

再次强调,预分词器 完全不是 从数据中学习得到的,这与苦涩教训背道而驰,并表明从字节中学习单词等基本概念是一个非平凡的问题。在本篇博文中,我们将尝试量化预分词的一些影响。

损失对损失缩放律:预训练如何迁移到下游

在 第一篇博文中,我们看到H-Net的相对算力优势在分布内预训练损失与下游分布之间不断增长:

  • 在多样化数据混合上为1.3倍算力乘数,在下游评估上升至2倍
  • 在代码子集上为2倍算力乘数,在域外语言上升至5倍

这是实验设置的偶然现象,还是背后有更深层的原因?

退一步说,为什么社区如此关注缩放律,尤其是 预训练损失?

的规律?人们普遍认为预训练损失是模型质量最重要的预测指标,并且例如下游性能可以从预训练损失相当准确地预测出来。典型流程是先拟合算力对损失规律,然后拟合损失与下游评估之间的关系。

  • 衡量这一点的方法是通过 损失对损失规律,即对一组模型家族绘制 (loss in domain A, loss in domain B),衡量不同分布上损失之间的相关性。
  • 当A是预训练分布、B是下游评估领域时,人们还进一步认为这种从损失到下游的转换以“内在速率”发生,并可跨模型家族迁移。
    • 例如,许多缩放律(如 Marin)采用来自完全不同家族的预训练模型,并在它们之间拟合出相当准确的规律!
    • 此前的工作已明确指出,与我们相关的分词器对损失对损失规律没有重大影响(《LLMs on the Line》,图5)。

我们将提供实证证据表明, 这一看法是一个迷思,而事实上

我们将通过探索一系列基线来考察这一点,包括

  • 字节级各向同性(非层级)模型
  • BPE 分词的 Transformer, 以及不带预分词 以及 预分词 预分词
  • 分层网络:标准的端到端 H-Net,以及具有不同分块行为的变体

我们将从单独的纯字节级模型(Byte Transformer)开始,完全不使用分词器或分块。我们从零开始训练了新的缩放阶梯,并各自进行了超参数调优,遵循与 BPE 阶梯相同的方法论。 相同的方法论 与 BPE 阶梯相同。

对于 每一个 在其阶梯上运行, 包括那些不在计算最优前沿上的模型我们将验证集的每字节比特数与 OLMES 评估套件的 bpb 进行作图。两者高度相关:各次运行落在一条平滑曲线上,这条曲线构成了该阶梯的损失对损失规律(为明确所指的损失,我们也称之为验证集到 OLMES 规律)。其上方是算力对损失;将其切换为 C → OLMES,即可看到图景的另一半,即算力到下游规律。

损失对损失规律

验证 bpb 与算力对比

OLMES bpb 与验证 bpb

BPE Transformer、Byte Transformer、BPE-NP Transformer、H-Net、BLT-like

每个点都是用于计算其规律的一次 Byte Transformer 扫描运行(而不仅仅是计算最优前沿),同时绘制验证集和 OLMES 的 bpb;该曲线即为其损失对损失规律。

无预分词的 BPE

BPE 算法本身(以及 Unigram 等其他分词算法)可以被视为“从原始数据中学习”,因为它是一种通用的无监督学习过程,依赖于数据分布并从字节开始。但高度工程化的预分词步骤的存在打破了这一幻想。那么,它们到底有多重要?我们将通过使用一个由以下方式创建的分词器来考察预分词的影响: 无预分词的 BPE,我们称之为 BPE-NP。2

我们按照与以往相同的方法论,在语料内训练了一个新的 BPE-NP 分词器,并重新训练了一条缩放阶梯。立刻就能看到,在以下两者之间存在一个非常有趣的权衡: 算力到损失。 和 损失对损失.

算力到损失

与字节级模型相比, BPE 分词显著提升了算力到损失的表现:它 近 5 倍 更高的算力效率,以达到相同的验证损失。

直观上,将低层字节合并为更大的 token 会显著对数据降采样(在此情况下为 6.03 倍),这使得算力可以用于高层处理。若要在相同数据上花费相同数量的 FLOPs,BPE Transformer 可以使用比 Byte Transformer 多 6 倍的参数!3

损失对损失:提示边界问题

另一方面,BPE-NP 分词在开箱即用的情况下在 OLMES 上的损失表现非常差(明显差于 Byte Transformer 和任何其他模型),这是通过标准的自回归计算衡量的:对数据分段,计算下一 token 条件负对数似然,再取平均。

事实证明,存在一个主要的误差来源,它很微妙,本质上就是所谓的 提示边界问题 这是已知会困扰分词语言模型的问题。修正方法是 已知存在这些修正能够正确地对模型的预测进行边缘化,并修正模型在边界处的概率。这些修正的设计与实现并非易事,且可能影响模型的推理效率。

细节:提示边界或边缘化问题

这个问题本质上归结为:token 序列并不能与字节序列一一对应。看待这一点的一种方式是,对于给定的一段文本(例如“ How are you doing?)有许多方法可以将其切分为 token。标准的 bpb 计算只关注 规范 BPE 分词 (例如“) How are you doing ?)。但同一字符串还存在其他分词方式(例如按单个字节切分的那种),模型仍可能为其分配非零概率。为了得到底层数据(字节)上真正的隐含分布,模型需要对字符串所有可能的切分方式求和。我们称之为“边缘化问题”。

在考虑需要提示和答案的任务时,或者在使用 LLM 作为生成模型时,这就会引出 提示边界问题。只要提示词在自然 token 中间结束,导致正确补全的分词方式并非规范分词,就会出现这种情况。例如,它最常出现在语言模型收到以空格结尾的提示词时,因为分词器通常会把空格合并到下一个词的开头。要解决这个问题,就需要进行边缘化处理,或者至少考虑完整提示词加补全的规范分词方式。

BPE-NP(边界校正)BPE-NP(无校正)

OLMES 与算力

OLMES 与验证

图 16. 带边界校正与不带边界校正的 BPE-NP。

这张图展示了 BPE-NP 在有无提示边界修正两种情况下的 loss-to-loss 曲线和 compute-to-eval 曲线。如果不做边缘化校正,OLMES 上的结果甚至完全不合理。

所有这一切通常都是分词带来的另一个问题!

校正后的 loss-to-loss

提示边界问题对不做预分词的 BPE 影响尤为严重,因为这类 token 具有奇怪的非语义特性,使得提示很容易在 token 中间结束。在解决这个问题之后——再次强调,这个问题很微妙,需要非平凡的修复——我们绘制了 loss-to-loss 定律。在本文的剩余部分,BPE-NP 是唯一在评估方式上得到特殊处理的算法。

即便做了这个修正,它的 loss-to-loss 缩放仍然比纯字节模型差得多!这意味着 数据的 tokenization 从根本上影响了预训练向评估迁移的效果:在验证 bpb 相同的情况下,字节模型的 OLMES bpb 始终显著更优!

损失到损失的计算量乘数

我们可以尝试通过将其映射回计算量乘数来换算这一差异:如果 BPE-NP 在 loss-to-loss 上的缩放表现与 Byte 一样,那么它在 loss-to-downstream 上会高效多少?

更正式地说:

  • 取一个 (validation bpb, OLMES bpb) 点 (x, y) 在 BPE-NP 损失到损失前沿;
  • 在相同的验证 x 字节模型前沿会得到一对 (x, y’) ,其下游损失更低。 y’ < y;
  • 我们计算需要多出多少算力 BPE-NP 就需要把 OLMES bpb 从 y 降至这个更低的 y’.

这最终达到超过 1.9 倍这个数值相当大,我们将其解读为揭示了分词如何影响模型理解数据并将其知识迁移到任务上的能力。

但请注意,这个乘数不足以抵消压缩数据所带来的巨大效率节省(根据 compute-to-loss 定律,接近 5 倍),最终 BPE-NP 在总体上仍然胜出。

不做预分词的 BPE

验证 bpb 与计算量对比

OLMES bpb 与验证 bpb

BPE Transformer、Byte Transformer、BPE-NP Transformer、H-Net、类 BLT

BPE 显著提升了计算效率(达到与字节级模型相同的验证 BPB 所需计算量几乎减少 5 倍),但向下游任务的迁移效果更差。在给定验证 bpb 的情况下,BPE-NP 模型的 OLMES bpb 明显更差(相当于近 2 倍计算量)。

加入预分词

接下来,我们重新加入原文中定义的“BPE”基线,见 图 I.

加入预分词 同时提升了计算量到损失和损失到损失两方面的表现 比 BPE-NP 模型更优。

  • 在计算量到损失方面,BPE 是 的计算效率比 BPE-NP 高约 1.5 倍,这也使其相对字节级模型的优势扩大到近 7.2 倍。 比 BPE-NP 的计算效率更高,这也使其相对字节级模型的优势扩大到近 7.2 倍。
  • 在损失到损失(验证 bpb 到 OLMES bpb)上,它比 BPE-NP 额外高效 1.3 倍。
  • 将这两者结合起来,加入预分词后,这一提升几乎达到 在将算力转化为下游评估时,效率提升接近 1.9 倍! 在将算力转化为下游评估时,效率提升接近 1.9 倍!

这个对比还有一个有趣的发现,是另一个验证点:

这一点在先前的工作中已经提出,例如那个恰如其名的 分词不仅仅是压缩,但我们这里的缩放律使其变得非常突出:尽管压缩率明显更高(6.03x 对 4.57x,约高出 32%),BPE-NP 却比 BPE 差得多!4

相反,我们认为分词关乎(某种模糊意义上的) 在数据中发现语义,这也是本文反复出现的主题,以及分层网络背后的精神。

事实上,在观察损失到损失规律时,BPE(带预分词)方法的迁移效果仍明显差于字节级模型,相当于 1.5 倍的计算量乘数。综合比较目前这三种方法,损失到损失规律开始呈现出一个有趣的图景。

  • 在原始数据上工作的模型(Byte Transformer)从验证到下游的迁移效果最好,这似乎表明它可能对数据有最好的理解。
  • 像 BPE 这样会改变含义的输入编码方式,似乎会妨碍这种理解。
  • 而这些编码与我们直觉上对数据语义的理解对齐得越差(例如去掉预分词),情况就越糟。

加入预分词

验证 bpb 与计算量

OLMES bpb 与验证 bpb

BPE Transformer、Byte Transformer、BPE-NP Transformer、H-Net、类 BLT

在计算量到损失和损失到损失这两类缩放律上,BPE 都优于 BPE-NP,但在损失到损失上仍比字节级模型差(1.54 倍)。

附注:带预分词的 BPE 所面临的提示边界问题

与 BPE-NP 的情况一样,提示边界问题对 BPE 来说也是一个问题,并且同样可以修复。我们发现,这一修复能为 loss-to-loss 规律带来小幅改善,但远小于 BPE-NP 的改善幅度。在本文余下部分,我们不再报告采用该修复的 BPE 曲线,因为差异很小,而且这似乎是一种非标准技术,还可能拖慢模型的推理速度。

这是预分词又一个隐藏效应:由于它内置了启发式规则,使 token 与常见的“语义”边界对齐,因此降低了提示边界问题出现的可能性。与 BPE-NP 一样,token 越缺乏意义,语义完整的提示就越有可能在 token 中间结束。

进入分层网络

现在我们加回 H-Net 阶梯,来自 文章二回想一下,这个阶梯的压缩率与 BPE Transformer 相同,并且内部网络和外部网络也相匹配。在这里,我们找到了两全其美的方案:

  • 在计算量到损失上,分层网络从压缩中获得了与 BPE 模型相同的计算效率提升,使其效率远高于字节级 Transformer,并略高于 BPE。
  • 在损失到损失上,分层网络与字节级 Transformer 具有相同的效率,远优于 BPE(1.61 倍)!
  • 两项增益叠加:直接拟合 compute-to-OLMES 约得到 2.06 倍。

请注意,1.28 倍和 2.06 倍的计算量乘数与 文章一但我们的损失到损失乘数所说明的,不只是 2.06 / 1.28 = 1.61。

  • 计算量到损失律(包括 1.28 倍的计算量到验证和 2.06 倍的计算量到 OLMES)是直接拟合得到的,代表了 计算最优前沿,使用 iso-FLOP 方法。
  • 损失-损失曲线并非直接拟合于散点;它们是由拟合出的验证与评估的计算最优前沿所隐含的,因此从构造上说,损失-损失曲线描述的是计算最优的运行。然而,即使远离前沿的运行也落在这些曲线上(RMSE 约在 1% 以内)。因此,从验证 bpb 到评估 bpb 的转换不仅是计算最优缩放的一个性质;它似乎是该架构的一种内在性质。

进入分层网络

验证 bpb 与计算量

OLMES bpb 与验证 bpb

BPE Transformer、Byte Transformer、BPE-NP Transformer、H-Net、类 BLT

在字节上训练的 H-Net 达到了与各向同性字节模型相同的损失到损失迁移效果,同时还利用分层结构在计算效率上超越了 BPE 模型。

端到端训练能带来多大帮助?

到目前为止,证据与这一解释是一致的:

  • 在字节级接口上运行的模型能够更好地“理解数据”,从而实现更好的损失到损失迁移。
  • 压缩数据的模型(无论是通过预处理的分词,还是分层模型)在计算效率上都更高。

但 H-Net 并不是唯一具有这一性质的模型;其标志性特征之一是端到端学习,但也可以定义更简单的、仍具备上述两个性质的分层模型。在字节级建模方面,最著名的或许是字节潜在 Transformer(BLT),它利用代理模型的熵启发式来决定如何对数据进行分块。

我们定义一种 类 BLT 一种架构,它保持与我们的 H-Net 完全相同的层级结构(架构和压缩率),但使用代理模型来定义边界,而不是端到端地学习边界。更具体地说,它使用一个单独训练的、更小的字节级模型,然后只要该代理模型对下一个字节的条件预测分布的熵超过固定阈值,就决定创建分块(该阈值与压缩率单调相关,因此在验证集上进行调整,以目标 4.57 的 BPE 压缩比)。5

我们还考虑了另一种做法:不在 H-Net 内部端到端地训练边界,而是把边界视为固定的,但由另一个 H-Net 给出。这样可以厘清边界之所以好,究竟是因为它们是端到端训练的,还是仅仅因为它们“质量高”(即由另一个端到端模型动态生成)。

我们在不同的 FLOP 预算下训练了几个模型,采用的方法如下:

  • 在每个训练 FLOP 预算下,我们训练了一个略小的各向同性代理模型 E 和一个更小的 H-Net 代理模型 H(两者的目标 FLOP 预算均比目标低 1e0.5 倍)。
  • 在目标 FLOP 预算下,我们随后比较了三个模型:
    • 一种分层网络,其边界由使用 E 的熵启发式方法确定
    • 一种分层网络,其边界由 H 的编码器给出
    • 一个完全端到端训练的分层网络(标准 H-Net)
模型 FLOPs(代理 FLOPs)验证 BPB
熵代理H-Net 代理H-Net
1019(1018.5)0.81600.81390.8001
1019.5(1019)0.76230.75040.7488
1020(1019.5)0.71380.70570.7027
表 2。 代理 FLOPs 表示代理模型的预训练预算。所有模型使用完全相同的架构和压缩率;代理训练和推理 FLOPs 被忽略,以基线为准。

结果显示出一致的模式。

  • 比较熵代理与 H-Net 代理,我们看到 边界质量很重要:H-Net 代理给出的边界优于熵启发式方法。
  • 比较 H-Net 代理与 H-Net,我们看到 端到端训练很重要:在模型内部学习边界,比使用预训练 H-Net 的冻结边界更好。请注意,这一比较甚至对代理版本更为宽容,因为我们没有计入训练该代理模型所消耗的 FLOPs。 或 推理时用于生成边界的 FLOPs!

侧面板图表展示了 H-Net 与类 BLT 模型的完整缩放阶梯,其中 H-Net 在计算量到损失(compute-to-loss)和损失到损失(loss-to-loss)两方面都显示出优势。损失到损失这一点很有意思:在考察字节级 Transformer 和 H-Net 时,我们曾推测它们具有最佳的损失到损失迁移能力,因为它们是字节级接口,但类 BLT 模型表明这还不够。模型不应仅仅在低层数据上运行,还需要学习并利用数据中正确的模式。诸如由熵阈值给出的启发式分块优于 BPE,但仍然不是最优的。再一次,苦涩的教训显现出来。

端到端训练

验证 bpb 与算力对比

OLMES bpb 与验证 bpb

BPE Transformer、Byte Transformer、BPE-NP Transformer、H-Net、类 BLT

从原始数据中学习

综合来看,我们比较了一组仅以通用方式使用字节级数据的方法。

  • 各向同性字节 Transformer:一个标准的字节级 Transformer,其中各级阶梯对应算力,但模型的参数更少。该套件中的其他所有模型都匹配了算力 和 参数。
  • BPE-NP Transformer(无预分词)我们将其解释为一个两阶段流水线:(1) 使用 BPE 进行分词(从技术上讲,它不使用先验,而是从数据中学习),以及 (2) 在 token 上进行语言建模。这仍然可以被视为在原始数据上运行。
  • 类 BLT:一个分层模型,其架构布局和压缩率与我们的 H-Net 相同,只是改变了数据块(chunk)的定义方式。
    • 按照 BLT 论文的做法,代理模型是一个字节 Transformer(我们在 1e19.5 FLOPs 下的最优阶梯)。为了对该基线有利,我们完全不计算它的 FLOPs,训练和推理都不计。
  • H-Net: 我们设置它是为了匹配 BPE 模型。 我们设置它是为了匹配 BPE 模型。

最后,我们纳入 BPE(带预分词) 作为标准语言模型基线。请注意,由于手工设计的预分词,这不符合从原始字节中学习的精神,并用虚线加以区分。

从字节中学习,并肩前行

选择要比较的阶梯

验证 bpb 与算力对比

OLMES bpb 与验证 bpb

OLMES bpb 与算力对比

算力倍数 · 任选两项
图 17. 从字节中学习的方法,并以 BPE 作为参照:算力到验证损失(左)、验证损失到 OLMES(中)、算力到 OLMES(右)。点击任意图表可放大。

量化“苦涩的教训”

随意调整情节吧!我们观察到以下倍数,报告为 H-Net 相对于其他方法的倍数。

方法算力倍数与 H-Net 对比
H-Net1×1×1×
类 BLT1.40×1.32×1.84×
1.28×1.61×2.06×BPE-NP1.89×2.02×3.82×Byte9.19×1.05×9.60×在算力到损失上,H-Net 是唯一一个没有先验、且扩展性优于 BPE 的方法。损失到损失还揭示了一个显著的模式,与以下假设一致。能够操纵原始数据的模型(更细粒度的表示,不受可能造成语义扭曲的编码器影响)代表了“理解数据”的上限,并且从预训练到评估的迁移效果最好。纯(各向同性)字节1.28×1.61×2.06×
BPE-NP1.89×2.02×3.82×
字节9.19×1.05×9.60×

在算力到损失上,H-Net 是唯一一个没有先验、且扩展性优于 BPE 的方法。损失到损失还揭示了一个显著的模式, 与以下假设一致。

  • 能够操纵原始数据的模型(更细粒度的表示,不受可能造成语义扭曲的编码器影响)代表了“理解数据”的上限,并且从预训练到评估的迁移效果最好。纯(各向同性)字节级模型代表了这一理想。
  • 信息的编码越不“语义化”,这种迁移就越差。
    • 预分词是一种硬编码的权宜手段,用以强制实现此类语义;在我们的实验中,它使损失到损失定律的计算量乘数达到 1.26 倍(BPE 对比 BPE-NP)。
    • 即使采用这一变通方案,BPE 模型仍因字节上限而存在 1.5 倍的计算量乘数:预定义 token 仍可能与数据的语义错位。
  • 尽管 1-stage 分层网络执行的是类似分词的某种压缩,它们仍能通过动态(取决于上下文)且端到端地进行分块来恢复这一上限。

总体而言,我们看到不同方法之间的性能差异很大,这表明架构和分词方式确实会影响语言模型的能力。

我们可以把这看作“苦涩教训”显现自身的一种方式——究竟为什么,阻止模型学习它想要学习的东西,会影响其扩展能力?

结论

本文考察了从字节中学习语言建模的方法,并通过算力到损失(compute-to-loss)和损失到损失(loss-to-loss)两类缩放律探讨了它们的权衡。以下是我们觉得有意思的几点结论。

  • 损失到损失的缩放律非常值得研究,而且与普遍看法相反,它们会因架构和分词器的不同而出现显著差异。字节级模型与不做预分词的 BPE 之间的差异,相当于最高可达 2 倍的计算量乘数。
  • 对于 BPE 模型来说,提示边界问题确实存在,并且可能在某些类型的评估中显现出来。我们不确定它有多普遍,而且它会受到预分词的强烈影响。
  • 压缩与计算效率并不直接相关(BPE 与 BPE-NP 的对比即为证据)。
  • 预分词是分词过程中一个常被忽视的部分,却经过了大量手工设计,影响非常大。它同时改善了算力到损失和损失到损失两项指标,同时减少了数据消耗。
  • 总体而言,字节级数据的处理和编码方式(例如分词的各种变体,或采用不同分块规则的层次化模型)会叠加起来,对下游评估产生非常大的计算效率影响(2-4倍)。
  • H-Net 能够恢复甚至超越标准语言模型的预训练算力效率(以验证损失缩放律衡量),同时还能匹配字节级模型的损失到损失迁移能力,从而兼得两者之长。
  • 与“苦涩教训”一致,H-Net 性能的提升部分直接归因于其端到端学习。

仍有许多问题有待解答。例如,本文只研究了预训练——但如果端到端分块能够显示出从预训练损失到评估的迁移有所改善,那么它又会如何迁移到后训练?在后训练中,对数据语义的深入理解可能更为重要。我们将把这类问题留给未来的工作。

我们希望这段关于层次化网络的旅程能让你觉得有趣,并带来了一些令人惊喜的结果或激发了新的想法!

脚注

  1. 这些内容发表在 tiktoken ,以及每个模型的 tokenizer.json 在 HuggingFace 上。 ↩

  2. 严格来说,把我们称为“BPE”和“BPE-no-pretok”(BPE-NP)的东西分别重新标记为“BPE-with-pretok”和“BPE”会更准确。不过我们将沿用现有术语,因为把 BPE 与完整的分词流程混为一谈已经成为惯例。 ↩

  3. 粗略地说,是 6 倍;由于注意力机制的二次方成本,可能略高一些;又由于更大词表带来的嵌入参数增加,可能略低一些。 ↩

  4. 尽管相关论文中似乎已经触及了这类结果,但我们尚未见到比较预分词(pretokenization)的缩放律。 ↩

  5. 我们称之为“类 BLT”(BLT-like)而非 BLT,是因为它采用了 BLT 具有定义性的熵启发式,但 BLT 的层次化架构与这里所用的架构有所不同。我们认为该架构在很大程度上与分块这一核心问题正交,但它可能尤其在学习端到端分块时产生影响。 ↩