
对模型的表达的探索是无止境的,
David Wu博士的这些观察,确实能加深我们对模型内部工作机制的理解。
线索1:LLM可以用base64交流也就是说,即便输入看起来像 Base64 那样的“乱码”,大模型的前几层常常能把它变成有用的语义信号,进而触发后面的正常推理。
前几层的作用是把各种表面输入(文字、格式、甚至看似“乱码”的编码)转换成统一的向量表示。
看来,前几层不是机械地匹配字符,而是在把各种表面形式,不管是自然语言、格式化文本,还是看起来毫无意义的编码,统一“翻译”成一种便于后续处理的内部向量表示。
前几层其实是在做格式到语义的标准化,关键是把噪声变成能让模型理解的信号。

能不能说,它们像个格式翻译器:抽取模式和上下文,把噪声标准化,产出一个相对“干净”的语义向量空间,在那里相同意思的不同表述会靠得很近,后面的层就在这个空间里做语言无关的推理和生成?
这个内部表示就是大家常说的“推理空间”或“语义空间”。
在这个空间里,意思相近的不同表述会被拉到很接近的位置,后面的中层和高层就在这个相对干净的空间里做推理和生成。
模型并不需要像人那样理解 Base64,它只要学会把某类输入模式映射到合适的语义向量,中间的推理机制就能照常工作。
不是模型“懂”编码,而是它会把编码映射到语义上去。
为什么有时候 Base64 输进去还能出结果?条件很多哇,
比如,训练数据覆盖:模型在训练时是否见过类似的编码或相似的输入模式。如果没有,模型无法学到把这种输入和对应语义关联起来。
还有,分词器(tokenizer)水平,假如输入被切分成的 token 不能保留语义线索肯定不行。也就是编码被切成一堆无意义的小片段,模型拿不到有用信息。
当然还有,模型容量:模型参数够不够、架构能否把输入映射到正确的语义向量。
也就是说,成功和失败全看前几层能不能把这些看似乱码的输入映射回正确的语义类。简单说,能不能成功取决于几个东西:训练时有没有见过类似模式、tokenizer 怎么拆分、模型规模够不够以及编码里到底还剩多少有用信息。
或者说,没有这些条件,映射就会失败,模型容易输出奇怪或不稳定的内容。
对工程实践角度,这个事实有用也有风险。
优点是模型的表征有鲁棒性和抽象化能力,我们可以通过格式或提示词的设计去触发已有的语义通路,不用去改权重就能做到很多花样。
可以把这当成一条工具,但别把它当万能钥匙。这并不意味着模型有了人类那样的“理解”,而是表征学习让它能把不同表面形式统一到可推理的内部空间。
线索2:Goliath模型异常前几层能把各种表面输入“翻译”到统一的语义向量空间。
只有当这个向量分布被后续层正确识别并继续处理,整个模型的推理链路才能正常工作。
Goliath‑120b用两个Llama2‑70B模型拼接,而且训练时前半段几乎看不到后半段的输出,这就破坏了这种层间连续性。
前半段学到的输出分布可能和后半段期望的输入分布不一致,导致后半段不能把前半段的“语义向量”当成它能理解的信号来继续推理,结果表现为语义漂移,对某些格式异常敏感或者输出不稳定。
换言之,拼接模型本质上是在把两个独立习得的表示体系硬接在一起,如果没有在接口处做对齐或联合训练,前半段的“翻译”再好也白搭。
要恢复正常,需要让两部分在接口处建立一致的分布,最常见的是在拼接处加一个小的适配层或做短期的联合微调。
做这些工作后,前几层的“翻译”能力才能被后续层正确利用,模型整体才能在面对编码、格式差异等情况时保持稳定和一致的推理行为。
真是非常有意思的工作。
