语言模型通常先把文本切成 token,再学习 token 之间的关系。H-Net(Hierarchical Network)进一步提出:模型能否连“以什么单位处理输入”也一起学会?
Dynamic Chunking for End-to-End Hierarchical Sequence Modeling 的回答是,把分块放进模型内部,用语言建模的目标共同训练分块边界和后续网络。由此得到的模型可以直接读取字节,在较短的潜在序列上进行主要计算,再回到字节层面预测输出。更进一步,这个过程可以递归进行,形成多个粒度的表示。1
本文依据论文 v2,重点讨论这些设计背后的想法。理解 H-Net 的关键有三点:序列压缩、可学习的粒度,以及不同粒度之间的计算分工。
为什么要把 tokenization 放进模型?
Tokenization 已经在承担一层压缩
以 BPE 为例,分词器根据语料中的频率统计学习合并规则,把经常共同出现的字节或字符片段合成更大的单位。这样,同一段文本可以用更少的序列位置表示,昂贵的主网络就不必逐字节运行。
这里压缩的是序列长度。词表大小与序列长度是两个不同的量:扩大词表往往能容纳更长的片段,从而缩短序列。
因此,传统语言模型的流程本身已经带有层次:
原始文本 → 较粗粒度的 token → 主网络建模 → token 转回文本
H-Net 保留了这种分工,并将其中的压缩环节变为可训练的神经网络计算。
固定分词规则与预测目标之间存在距离
BPE 的规则来自数据统计,通常独立于语言模型训练。语言模型发现某种切分不利于预测时,也无法通过自己的训练损失修改它。
这会带来几个问题:
- 切分依据与任务目标分离。 高频片段有利于压缩,却未必就是当前预测任务需要的单位。
- 规则无法随隐藏上下文调整。 分词器应用预先确定的规则;它不会根据语言模型对当前语境的理解决定粒度。
- 输入变化会改变切分。 拼写噪声、大小写变化等,可能让相近的文本获得很不一样的 token 序列。
- 不同语言和数据的结构不同。 英文空格是很强的边界线索,中文和 DNA 则没有同样的线索。
直接改成字节级模型可以摆脱固定子词词表,但序列会变长。如果每个字节都经过完整的大模型,计算成本就成了新的障碍。
H-Net 要同时满足两个目标:让输入单位足够通用,并让大部分计算发生在压缩后的序列上。
在本文的文本实验中,输入仍然需要经过 UTF-8 编码,模型也仍然有字节级的输入、输出符号集合。Tokenizer-free 指的是移除 BPE 这类外部固定子词分词器。
字节也不等于字符:一个常见汉字通常对应三个 UTF-8 字节。H-Net 的潜在 chunk 则是上下文相关的连续向量,没有一个预先列好的“chunk 词表”。
H-Net:让大小网络处理不同粒度
单层 H-Net 的主路径可以概括为:
字节表示 → 小型编码器 E → Dynamic Chunking → 主网络 M → Dechunking → 小型解码器 D → 下一个字节的概率
此外,还有一条从编码器通向解码器的残差路径,用于保留细粒度信息。2
编码器:先理解局部,再决定保留什么
编码器在原始分辨率上读取输入,为各个位置生成带有历史上下文的表示。Dynamic Chunking 随后选择其中一些位置,把它们的表示送给主网络。
这一顺序很重要。如果先机械地截取几个字节,主网络获得的信息会很有限;经过编码器后,被选中的向量已经能够携带此前输入的信息。因而,下采样时没有送入主网络的那些位置,也可能通过编码器的状态影响后续表示。
论文的下采样采用选择边界位置向量的方式。这里不宜把一个 chunk 想象成“先读完整个词,再对词内所有向量求平均”。模型必须保持因果性,在当前位置只能使用已经读到的输入。
主网络:在更短的序列上投入更多容量
假设原始序列长度为 \(L\),平均压缩比例为 \(r\),主网络处理的序列长度就约为 \(L/r\)。这允许模型把更多参数放到主网络中,同时控制总体计算量。
外层网络负责高频、细粒度的处理,内层网络负责较低频、较粗粒度的处理。这种结构有些像 U-Net:先降低分辨率,再恢复分辨率,并通过旁路保留细节。
论文主要使用 Mamba-2 构建外层编解码器,主网络则主要使用 Transformer。作者的解释是,SSM 持续将历史压缩进状态,适合承担从细粒度输入提取表示的工作;Transformer 则可以在较短的序列上处理各个表示之间的关系。论文的消融支持这种搭配,但“压缩偏置为何有效”仍然属于机制解释,不能当作普遍定理。3
Dechunking:把粗粒度信息送回每个位置
解码器仍然需要在字节粒度预测下一个输出。Dechunking 因而要把主网络的结果扩展回原来的序列长度,再与编码器保留的细节结合。
这里恢复的是表示的分辨率,并不要求从少量 chunk 向量无损重建全部输入。残差路径让细节可以直接传给解码器,主网络也就不必独自承担所有拼写和局部信息。
这种分工让压缩后的主路径有机会专注于跨位置的关系,同时保留字节级输出所需的精度。
Dynamic Chunking 到底在学什么?
学习何时更新高层表示
Dynamic Chunking 的路由模块比较相邻位置的编码表示,生成边界分数。它引入了一个直觉:当相邻表示发生明显变化时,当前位置可能值得送入更深的网络。
这里比较的是经过学习的表示及其投影,而非相邻字节是否相同。因此,同样的文字在不同上下文中,可以产生不同的边界判断。
以推理过程理解会更直接:
- 每读入一个字节,小型编码器都会更新。
- 路由模块决定这个位置是否需要调用主网络。
- 如果需要,就更新主网络及相应的高层表示。
- 小型解码器结合当前细节和可用的高层表示,预测下一个字节。
所以,分块边界同时也是计算边界。选择一个位置进入主网络,意味着在这里投入一次更昂贵的计算;多个位置共享高层表示,则意味着降低主网络的更新频率。
可以把它理解为:外层网络持续阅读,内层网络在模型判断有必要时更新。它仍然是逐字节自回归生成,不会因为形成了一个 chunk,就直接一次输出整个词。
“有用的单位”由预测任务决定
一个自然的想法是让模型自动学出词、短语或句子。但 H-Net 的训练没有提供这些语言学边界标签。
它实际优化的是:在给定计算约束下,什么边界有助于预测后续输入?学出的单位可能与词重合,也可能是词的一部分,或者跨越多个词。
论文图 4 的可视化提供了几个有趣的例子:
- 单层模型经常在空格等位置设置边界。
- 双层模型的第一层会较多关注词的起始字符。作者认为,词头确定后,后续字符往往更容易预测。
- 更深一层有时把
the backbone、such as等多个词归到同一组中。
这些观察说明,预测目标确实能诱导出与文本结构相关的分块。不过,可视化只是定性证据,不能据此认定模型已经学出了完整、稳定的语言学层次。
边界是离散的,怎样端到端学习?
“保留这个位置”与“跳过这个位置”是离散选择,不能直接像普通线性层那样求导。边界一变,主网络收到的序列长度与位置对应关系也会变化,训练容易不稳定。
H-Net 的贡献包含一组相互配合的设计。理解时可以抓住两个问题。4
让不确定的边界产生平滑的影响
模型在训练初期不太可能一下就找到好的边界。如果每次边界判断都造成高层表示的突变,后面的网络就要不断适应不稳定的输入。
为此,H-Net 在 Dechunking 中加入平滑模块:根据边界置信度,在当前 chunk 的表示和此前平滑后的表示之间进行插值。边界置信度高时,更多采用当前表示;置信度较低时,则更多延续此前的信息。
这个设计既缓和不确定边界的影响,也为边界分数提供连续的学习信号。论文还结合直通估计器(STE)辅助梯度传播。前向过程仍然包含离散选择,因此不应把它理解为对硬边界进行了精确求导。
一个值得注意的思路是:为了学好如何压缩,恢复分辨率的方式也需要一起设计。 Dechunking 在这里同时承担信息对齐与训练信号传递的作用。
约束平均成本,让模型决定具体花在哪里
仅优化预测损失时,模型可能倾向于保留过多位置;过度压缩又会丢失对预测有用的信息。因此,论文增加了引导平均压缩比例的辅助损失。
可以将训练目标概括为:
\[ \mathcal{L} = \mathcal{L}_{\text{预测}} + \alpha \sum_s \mathcal{L}_{\text{压缩比例},s}. \]
其中,\(s\) 表示层次中的不同阶段。目标压缩比例规定了大致预算,模型则决定预算在序列中的分配。
这与“每六个字节合成一块”有明显区别:平均粒度受到约束,各块的长度仍然可以变化,而且实际平均比例也未必精确等于目标值。
因此,端到端学习仍然包含人为选择:层数、模型容量、目标压缩比例,以及路由模块的归纳偏置。它交给数据学习的是具体边界和表示。
为什么递归层次比替换分词器更有意思?
单层 H-Net 已经可以承担传统分词器的压缩角色。更进一步,主网络本身也可以是一个 H-Net:
字节层 → 第一层潜在序列 → 第二层潜在序列 → 最内层主网络
信息随后逐层返回细粒度解码器。这就是论文中的 2-stage H-Net。
这一结构允许不同层次以不同频率更新。低层保留局部变化,高层只接收经过进一步筛选的表示。昂贵的计算因而可以集中到更少的位置。
“字符组成词,词组成短语”是理解它的一种类比,但网络没有被要求严格遵循这种划分。更深层处理的是连续向量,不能再简单套用“遇到空格就分块”的规则;可学习的路由机制则可以继续作用于这些表示。
从这个角度看,H-Net 提出的研究方向是:让抽象的粒度与预测能力共同学习。 粒度太细,主网络要重复处理大量局部细节;粒度太粗,预测所需的区别又可能被抹掉。多层结构为这种取舍提供了多个层级。
和其他字节级模型有什么区别?
字节输入、层次结构、内容相关分块,都已有前作。H-Net 的特点在于把可联合训练的动态边界与递归层次结合起来。
| 方法 | 大模型处理的单位如何形成 | 核心取舍 |
|---|---|---|
| BPE + 语言模型 | 预先学习并固定的子词合并规则 | 压缩有效,分词与语言建模目标分离 |
| 直接字节级模型,如 MambaByte | 每个字节都经过同一套主体网络 | 输入通用,序列较长 |
| 固定分块,如 MegaByte | 每固定数量的输入形成一块 | 结构简单,粒度不随内容变化 |
| SpaceByte | 空格及类似分隔符触发粗粒度计算 | 利用明确边界线索,依赖数据特征 |
| Byte Latent Transformer(BLT) | 借助辅助字节模型的预测熵划分 patch | 粒度随预测难度变化,边界由外部机制提供 |
| H-Net | 从上下文表示中学习路由,并与主网络联合优化 | 边界可适应任务,可递归使用;训练更复杂 |
BLT 同样强调根据数据复杂度分配计算:可预测的区域使用较长 patch,需要更多计算的区域使用较短 patch。它已经展示了大规模字节建模的可行性。H-Net 更关注让分块机制与主体模型共同学习,以及将它嵌套到多个层次。5
这里需要区分架构比较和性能比较:H-Net 论文没有直接对照 BLT 做实验,所以不能据此断言 H-Net 的效果优于 BLT。
实验支持了哪些判断?
在匹配预算下,双层结构体现出优势
比较字节模型和 token 模型时,不能直接比较各自的 token-level perplexity:两者的预测单位不同。论文主要使用 bits-per-byte(BPB),将序列的负对数似然按字节数归一化;数值越低,表示对文本的预测越好。
英文实验使用 FineWeb-Edu 数据,并尽量匹配训练数据字节数和 FLOPs。下表摘自论文表 1、表 2 的 XL 预算组;该组以约 1.3B 参数的 BPE Transformer 为计算预算参照。6
| 模型 | 实际参数量 | 验证集 BPB ↓ | 七项零样本任务平均准确率 ↑ |
|---|---|---|---|
| BPE Transformer | 1.3B | 0.730 | 55.5% |
| H-Net(1-stage) | 1.3B | 0.728 | 56.2% |
| H-Net(2-stage) | 1.6B | 0.715 | 58.2% |
单层模型与基线接近,双层模型的优势更明显。这里比较的是近似匹配的计算预算,参数量并不完全相同:层次结构允许把较多参数放到更新频率较低的内层。
BPB 比较也有一个技术边界:论文对 BPE 模型采用常用的归一化估计,没有累加同一字节串所有可能切分的概率,因此可能高估其 BPB。作者在第 4 节明确说明了这一限制;下游任务的结果提供了另一组支持证据。
消融实验也有助于理解结果:固定宽度分块较弱;改进后的空格分块模型已经很强;动态分块和进一步增加层次能够继续带来收益。因此,最终效果来自网络分工、训练稳定性与边界学习的共同作用,不能全部归因于一个路由模块。
鲁棒性与跨数据类型的结果更能体现动机
在带文本扰动的 HellaSwag 上,XL 组双层 H-Net 的五种扰动平均准确率为 40.9%,BPE Transformer 为 32.3%;这些模型都在干净数据上训练,没有专门进行噪声增强。这个结果支持字节级层次模型对部分拼写和格式变化更稳健,也说明它仍然会受到扰动影响。
中文实验中,BPE 基线换用了面向多语言的 Llama 3 tokenizer。双层 H-Net 在 XWinograd-zh 上达到 66.3%,基线为 59.9%。这与论文的动机一致:当空格等边界线索较弱时,学习分块尤其有价值。
代码实验则提供了一个有用的补充:动态分块与强空格分块版本的 BPB 几乎相同(0.3161 与 0.3163)。已有规则很适合数据时,动态学习的额外优势未必很大。
DNA 实验中,H-Net 在训练稳定阶段达到对应非层次基线的困惑度,所需数据量约为其 \(1/3.6\)。这是特定数据集与实验设置下的数据效率结果,不能直接理解为通用的训练加速倍数。
怎样理解它的意义与局限?
我认为,H-Net 最值得关注的地方,是把“表示是什么”和“在哪里使用计算”联系了起来。
传统分词器提前决定计算单位,后面的网络接受这一决定。H-Net 让单位的形成参与预测目标的优化:边界影响高层表示,高层表示影响预测质量,预测误差又反过来调整边界。递归结构进一步允许这种配合发生在多个粒度上。
论文提供了支持这一方向的实验,但仍有几个明确边界:
- 规模仍有限。 主要语言实验最高匹配到约 1.3B 参数 Transformer 的计算预算。更大规模、更深层次的稳定性仍需验证。
- FLOPs 与运行时间需要分别测量。 动态长度、路由、批处理和缓存管理都会影响实际效率。作者报告当时的实现训练耗时可能达到非层次模型的约两倍。计算预算匹配不等于延迟或吞吐量相同。
- 更好的训练曲线还不足以确定普遍 scaling law。 作者没有进行覆盖大范围模型规模与计算预算的正式 scaling-law 拟合。
- 可解释的边界不等于推理能力已经提升。 词组式分块提供了线索,尚不足以证明模型获得了系统性的层次推理能力。
H-Net 展示了一条有吸引力的路径:保留原始输入的细节,让模型学会把信息组织成不同粒度,并在这些粒度上分配计算。替换外部分词器是这条路径的第一个落点;递归地学习更适合预测的表示单位,是它更长远的研究价值。
材料与延伸阅读
优先参考原始论文;作者文章用于补充设计直觉,相关论文用于厘清技术区别。
- H-Net 论文 v2:Dynamic Chunking for End-to-End Hierarchical Sequence Modeling。第 2 节介绍架构,第 3 节报告实验,第 4 节讨论局限,附录 A 梳理相关工作。
- 作者的设计背景文章:Albert Gu,On the Tradeoffs of SSMs and Transformers。讨论压缩状态、原始输入粒度与模型分工,其中包含作者的直觉与假说。
- 相关原始论文:Byte Latent Transformer: Patches Scale Better Than Tokens。帮助理解动态粒度与计算分配这条研究路线。
- 论文提供的代码入口:goombalab/hnet。适合在理解架构之后查阅实现。
Footnotes
Sukjun Hwang、Brandon Wang、Albert Gu,Dynamic Chunking for End-to-End Hierarchical Sequence Modeling,2025,arXiv:2507.07955v2。本文所述 H-Net 结论均限定于该版本的研究范围。↩︎
参见论文第 2 节,尤其是 2.2 节的分块与平滑机制、2.3 节的压缩比例约束,以及 2.4 节的因果训练与推理过程。↩︎
参见论文第 3.3 节的编解码器消融,以及 Albert Gu 的设计背景文章。SSM 的压缩状态与 Transformer 的历史检索能力提供了一种理解分工的视角。↩︎
参见论文第 2 节,尤其是 2.2 节的分块与平滑机制、2.3 节的压缩比例约束,以及 2.4 节的因果训练与推理过程。↩︎
Pagnoni 等,Byte Latent Transformer: Patches Scale Better Than Tokens,2024,arXiv:2412.09871。外部熵分块与 H-Net 的区别另见 H-Net 论文附录 A.1.3。↩︎
数据来自 H-Net 论文第 3 节:英文建模与零样本评测见表 2,扰动实验见表 3,中文与代码见表 4,DNA 数据效率见图 6。↩︎