# 100万字节、256种符号：Meta的MEGABYTE想让AI扔掉tokenizer

> Cognitive Revolution No. 40 中文精读

- 原标题：E40: Meta's MEGABYTE Revolution with Lili Yu of Meta AI
- 发布日期：2023-06-29
- 主持：Nathan Labenz
- 网页版：https://cogrev.1mmt.com/ep/040-e40-meta-s-megabyte-revolution-with-lili-yu-of-meta-ai-8EIqHF.html
- 精读字数：约 4605 字（阅读约 10 分钟）

> 本文为 cogrev.1mmt.com 基于原始访谈的 AI 改写中文精读，非官方翻译；引用请注明出处并链接网页版。

GPT的词表里，至今躺着一位Reddit用户的ID。

这位ID叫SolidGoldMagikarp的老哥，因为论坛发言风格太独特，用户名被BPE分词器当成了高频字符串，硬生生收进了GPT-3那5万多个token的词表。模型从此永远认识这串字母，删都删不掉。还有一些更冷僻的token，著名模型怎么训都吐不出来。

Andrej Karpathy转发MEGABYTE论文时，专门提了这桩公案，他的总结只有一句：**所有人都应该盼着tokenization被扔掉。**

2023年5月19日，Meta AI研究员Lili Yu和同事发布论文《MEGABYTE》，副标题直译过来是「用多尺度transformer预测百万字节序列」。一个多月后，她做客Nathan Labenz主持的播客Cognitive Revolution，把这套架构从头到尾讲了一遍。

对话里有几个数字值得先记住：一张600×600的图片，展平后是100万个字节，现有架构根本扛不住；一个字节只有256种可能；MEGABYTE的全局模型，能把这部分开销压到普通transformer的八分之一。一百万字节的文本，长度超过Claude的10万token上下文；一百万字节的音频，大约是一分钟的音乐。

## 词表里的幽灵，和图像的噩梦

先说tokenizer是干嘛的。GPT-3和GPT-4在读任何文字之前，都要把文本切成固定词表里的小块。词表里有5万多个token，覆盖常见的单词、词根、数字和符号。模型从头到尾不接触字母本身，只认识这些块。

这套流程能成为行业标准，是因为它解决了压缩问题。把高频词打包成一个token，序列变短，计算变便宜。

代价也摆在那里。Lili Yu在节目里数了一堆：

- 空格处理是老大难。用户在提示词前面加几个奇怪字母，模型就顺着生成一堆胡话，锅在tokenizer；
- 换领域就翻车。ChatGPT很强，可你拿一个更小的模型去做生物、化学或者小语种，原词表直接分布外，微调都难救；
- 极低频的token，著名模型怎么训都说不出来。

文本还算好的。Lili Yu的原话更狠：

> 文本的tokenizer给你头痛，图像的tokenizer给你噩梦。

区别在于有损。文本这边，tokenize再还原，字符串分毫不差。图像那边，VQGAN这类tokenizer先编码再解码，出来的图会变样：颜色偏了，细节丢了，手指缠在一起。音频同理。

做扩散模型可以绕开tokenizer直接吃像素，但太贵。做自回归图像生成，就得面对那个100万字节的长序列。

**所有人当初引入tokenizer，理由只有一个：现有架构扛不住原始序列的长度。**所以MEGABYTE要同时干两件事，Lili Yu管这叫一石二鸟：扔掉tokenizer，顺便造一个撑得起百万字节的架构。

## 全局看粗，局部看细

MEGABYTE的结构，Nathan形容成一个分叉的形状：中间一个全局模型，旁边挂着一排局部模型。

流程走一遍。所有输入先切成patch。论文示意图里是16个字节，切成4个patch，每个装4个字节。

patch嵌入层把4个字节压成1个向量。于是全局模型看到的序列，长度从16变成4。

序列短了，省的钱是双份的。注意力的显存开销随长度平方增长，这部分直接松绑。但Lili Yu提醒，注意力其实不是大头：**GPT-3里注意力只占总算力的2%到3%，真正贵的是前馈层。**前馈层的开销和序列长度成正比，patch大小取8，全局模型就只花八分之一的算力。

省下来的算力，可以拿去把模型做得更大。

然后是分叉。全局模型的输出分发给所有局部模型，每个局部模型负责自己那个patch，逐字节预测。局部模型之间不通信，所以能并行跑。

Nathan在节目里反复确认了推理的细节：用户输入的部分，比如一段提示词，对应的局部模型可以并行处理；只有模型自己要生成的内容，才需要逐patch、逐字节往前推。如果只关心最后一个patch的输出，前面几个局部模型甚至可以不跑。

字节本身也极简。256种可能，2的8次方，每个字节就是8个0和1。词表从5万缩到256，嵌入维度从几千砍到32。Lili Yu说这个模块太小，他们都没怎么优化。

还有一个设计选择：全局模型和局部模型都是原封不动的transformer。原因是稠密transformer是目前大规模场景下验证最充分的架构，哪天有人做出更好的注意力机制，直接像换零件一样换进去就行。

训练时还有一层设计：每个字节都要预测，16个字节就是16个loss，最后取平均。Nathan感慨这件事被低估了，Lili Yu顺着给出这期节目里信息密度最高的一个观点：

> BERT那种编码器模型，一次前向传播只在15%被遮住的token上有loss。解码器模型每个token都有loss。我个人觉得，这是decoder-only架构能越做越大、越来越强的重要原因之一。

**每预测一个字都算一次错，学习信号密了几个数量级，数据利用率完全不同。**这段话值得所有在encoder和decoder之间纠结的人听一听。

## 同等算力打平，字节层面碾压

结果分两组看。

第一组是算力对齐实验。同一个数据集，同样的GPU训练时长，三个模型同场：普通transformer、Perceiver AR、MEGABYTE。Lili Yu解释了为什么必须这么比：白送一个局部模型当然更好，但算力就那么多，加全局模型就得把局部模型做小，这是机会成本。三兄弟吃一样的饭，才看得出谁本事大。

字节层面，MEGABYTE把另外两个甩开。

第二组是和已发表的模型比，文本基准包括PG-19这类书籍数据集。这里有个诚实的尴尬：很多论文不报告用了多少GPU、训了多久，唯一的常数只有数据集。Meta团队把模型训到验证loss不再下降，再拿去和别人报告的数字比。结论是**性能和标准的token级模型相当**，同时白拿前面说的那些好处。

图像上，ImageNet 64追平了当时的最优值。他们还测了256和600分辨率的图，600的展平后就是那100万个字节。

音频的部分最能体现「直接读字节」的狠劲。16位音频，一个采样点有65536种取值，以前的做法要么先做分类映射到256，要么搞分层解码，softmax开6万多项太贵。MEGABYTE不管这些，文件读进来就是字节流，直接建模。

Lili Yu说，这才是团队真正兴奋的方向：

> 未来直接建模任何文件的原始格式，任何输入，任何模态。不用管它是图像、音频还是视频，读字节，然后建模。

patch大小的选择，目前还偏经验。文本用8，刻意贴近BPE token平均4字节的长度；图像用8×8或16×16，跟着图像tokenizer的习惯走。两个极端都会退化成普通transformer：patch取1，或者patch等于整个序列。好消息是实验显示模型对patch大小相当不敏感，一大片取值都能用。

## 真正的考验：LLaMA规模

网上对这篇论文几乎是一边倒的赞美，但也有清醒的提问。有人问：这种把信息早期局部化的架构，还能表现出transformer那种上下文少样本学习吗？

Lili Yu的回答分两层。

patch边界确实有性能损耗，团队试过加卷积层，只有轻微改善。她的判断是：**数据够多的时候，模型应该能自己学会跨边界的规律，这个问题的终极答案就是规模化。**上下文学习她反而不担心，理由是它最终会体现在困惑度里，模型能把下一个字节预测好，上下文学习就不会差。

Nathan还看中了这套结构的模块化潜力：全局模型理解一切，局部模型可以按需替换，等于给同一个大脑接不同的手。Lili Yu完全同意，说现有的视频语言模型已经在用类似思路，给预训练文本模型加装图像能力。

真正的检验只有一个：放大。她的原话很直白，现在训一个不到10亿参数、吃不到1000亿token的模型，没人关心。团队正在做的事，是用和LLaMA差不多的算力，看能不能不用tokenizer追平LLaMA的表现。方法已经开源，一旦验证成功，被广泛采用的速度可能快得惊人。

Nathan算了一下时间：论文5月19日发布，录制时刚过一个月，以Meta手里集群的规模，答案不会让人等太久。

还有两个领域她点名要盯：数学和代码。

数学好理解，长整数被切成两三位一个token，模型等于戴着毛镜做加法。代码这边她给过一个数据：Meta自家的代码tokenizer对比GPT-2的BPE，token数能少30%。GPT-2的词表处理代码，效率差两三成。Nathan顺势提到，OpenAI后来的模型训练早期掺了大量代码，可能正是这个逻辑：代码里的逻辑结构，能反哺所有任务。

另外还有Galactica的教训。Meta那个科学论文模型，光tokenizer就叠了三四条特殊规则来处理arXiv和LaTeX。用户没感觉，开发者维护起来是灾难。字节级模型能把这一整层麻烦直接删掉。

## 开源的Meta，保密的对手

节目后半段聊到了组织和文化。

Nathan问Meta AI连续出招是什么体感。Lili Yu说她所在的团队在做多模态语言模型，MEGABYTE本身就是这个方向的产物。团队相信未来属于混合模态的统一模型：现在有ChatGPT做文本、Midjourney做图，为什么不能有一个模型全干了？

安全话题也没躲。Meta内部有负责任的AI团队，数据、偏见、开源流程都有严格审查，每个开源模型要过偏见过滤器、回答一堆问题。她承认研究员天天抱怨流程繁琐，但把话说得很清楚：

> 负责任的AI，不应该只交给少数几家公司。应该开源，让所有人帮忙调试，一起做更安全的模型。

由此引出一个正在发生的分化。OpenAI现在几乎不发论文了，Nathan的判断是，如果MEGABYTE是OpenAI发明的，大概率不会公开。研究者开始站队：信开源的去了Meta，想造产品或者觉得技术太危险不能共享的，去了另一批实验室。Lili Yu认可这个观察，说这是行业成熟的必然。

她也说了个隐忧：当研究和产品的边界越来越近，资源会流向直接面对客户的产品团队，研究院可能拿不到那么多GPU。Meta目前还好。

节目结尾聊到中美。Lili Yu在中国长大、读完本科再去美国，Nathan请她聊聊身处两个热门话题交汇点的感受。她的视角跳出了两国框架：一两年前以色列和日本有过法案，AI模型可以用任何数据训练。她设想了一个场景，创业公司可能都跑去注册在那种国家，因为训模型自由度最大。

> 这不只是美国和中国的事，全世界每个国家都可能成为那个允许最宽松训练的地方。

她个人说，没感受到什么威胁，整体环境相当友好。Nathan说，这是这期节目里他听到的最好的消息。

## 明天就能做的三件事

- 花一分钟看MEGABYTE论文的图1。patch进来，全局模型居中，局部模型分叉出去，整个架构一眼看懂。图2带全部公式，想抠细节的直接上，论文和代码都开源了。
- 拿你的实际业务文本去tokenizer可视化工具里切一遍，重点看三类东西：长数字、代码缩进、非英语内容。看清楚它们被切成了什么，就能明白为什么模型算不好账、写不好缩进，也能明白为什么不同语言的API成本差好几倍。这些坑全在tokenizer身上，字节级模型一旦在LLaMA规模验证成功，坑会被一次性填掉。
- 把LLaMA规模的后续实验设个提醒。判断这套架构成败的标准很明确：同等算力下追平LLaMA。成了，多模态统一模型的路会宽很多；没成，patch边界和上下文学习的疑问也有了答案。无论哪个结果，都值得去读论文原文。
