ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

大模型也有“大脑分区”?AAAI Oral揭秘内部功能地图

大模型也有“大脑分区”?AAAI Oral揭秘内部功能地图

AAAI 2026 Oral里有一篇标题带问号的研究:《大模型内部也有“大脑分区”?》。这个问号放在三年前大概率会被当成比喻修辞,但读完你会发现,作者是拿实验来回答的。做LLM可解释性的朋友应该深有体会,我们之前花了很多时间证明大模型不是一坨均匀的神经网络,而是由各种子电路拼起来的——但电路归电路,像人脑那样成片的、能被点名的“功能区”,从来没有人给大模型画过一张完整地图。这篇文章拿几个开源大模型反复做因果干预、稀疏编码和行为消融,最后真画出一张分区图:数学、代码、记忆、风格甚至安全拒答,各自扎堆在特定的层和注意力头上。我第一时间读完,又拿自己的实验对照了一下,觉得这事的含金量不在“地图”本身,而在它把大模型可解释性从“显微镜看细胞”推到了“看整个器官”这一步。

如果你正在做微调、部署、安全对齐,或者只是好奇为什么同一个模型有时候聪明得像天才、有时候蠢得像复读机,这篇解读都值得你花几分钟看完。

1. 为什么“功能分区”这个脑科学老概念会跑到大模型身上

1.1 从布洛卡区到Transformer的头

人类对大脑的第一波体系化认知,靠的是“哪里坏了,哪个功能没了”。布洛卡区受损,人说不出话但能听懂;韦尼克区受损,人能讲话但语无伦次。这种分区图谱式的研究方法,统治了神经科学快两百年。到了大模型时代,我们自然而然会问一句:一个几十亿参数的Transformer里,有没有类似的布洛卡区?

这个问题并不新鲜。早在GPT-2时代,就有人发现某些注意力头会专门做“模式复制”,后来被命名为induction head;再往后,人们又发现MLP的某些神经元会储存特定的事实片段或某种句法角色。可这些发现都是碎片化的:我们知道某个神经元条目在做什么,却不知道它处在怎样一张更大的组织网络里。就像你在显微镜下看清了一个细胞,但没看过整块组织切片。

1.2 黑箱焦虑逼出来的“电路级可解释性”

对大模型来说,这种焦虑不是学术洁癖,而是非常现实的工程问题。模型越来越强,但它是靠什么机制变强的?幻觉到底发生在哪一步?为什么微调一个能力,往往会莫名其妙弄坏另一个能力?越狱攻击为什么能绕过对齐?这些问题背后,都需要一张“内部结构地图”来回答。

之前可解释性社区的主线工作,基本在两条路上:一是激活修补,通过反事实干预锁定某些预测强依赖的回路;二是线性探针和稀疏自编码器,在残差流上找到与某个概念对应的特征方向。这两条路给了我们很多局部知识,比如“国王-王后”这种关系向量在哪个方向,“幻觉”时的解码偏差与哪些层最相关。但你仍然说不清:大模型到底有没有一个管数学的区域?有没有一个管“拒绝回答”的区域?这些区域之间是怎么协作的?

1.3 这篇AAAI Oral真正要回答的三个问题

我建议你先带着三个问题去读原文,它们基本贯穿了整个实验设计:

  • 第一,大模型的内部组织里是否存在稳定的、可重复识别的“功能分区”?
  • 第二,如果存在,这些分区是按什么划分的?是任务类型(数学、代码、翻译),还是抽象层次(低级语法vs高级语义),还是输入模态?
  • 第三,分区能泛化到什么程度?换一个随机种子、换一组任务集,分区还在不在原来的位置?

这三个问题分别对应论文里的三条实验线。弄清楚它们,你才能真正判断这张地图是自然结构还是人为归类。

2. 实验设计拆解:怎么证明大模型存在功能区而不是测量幻觉

2.1 三条主线的测绘工具

先说工具。论文没有只用一种方法,而是三件套组合。

第一件是激活修补(activation patching)。核心操作是拿同一个输入跑两遍前向,一遍正常,一遍在某个目标位置替换成损坏激活,然后看目标任务的输出变化。如果替换掉第20层的激活后,数学题正确率暴跌,而代码题不受影响,那第20层就和数学任务有强因果关联。

第二件是稀疏自编码器。在残差流上训练一个自编码器,强迫它用尽量少的特征重构激活,学出来的特征往往具备可解释性。再把这一堆特征做聚类,看它们是不是集中在某些层和某些注意力头上。

第三件是行为消融。临时屏蔽某个注意力头或某个MLP神经元,然后跑整组下游任务,看哪些任务掉点。这个操作比激活修补更粗暴,但信息非常直接:关掉它,谁的功能会坏?

三件套合在一起,会生成一个“任务×组件”的影响矩阵。你把这个矩阵按行和列做重排,高亮区域会自然浮现出来——这些高亮块,就是候选功能区。

2.2 从一堆矩阵变成功能地图的完整流程

具体流程比我想象的严谨。他们先选了一组非常多元的任务集,包括数学题、代码补全、多语言翻译、事实问答、情感分类、指令遵循,以及一个专门测拒答行为的安全任务。然后在每一层、每一个注意力头上都跑一遍激活修补,得到一个巨大但稀疏的矩阵。

拿到矩阵之后,再用SAE特征聚类做交叉验证:如果某个任务的影响集中在第18到第22层,而这批SAE特征恰好也聚集在第18到第22层,且对应的语义高度一致,那这块区域才会被标记成一个功能区。换句话说,不是“看起来集中”就算数,必须同时满足因果影响集中、特征语义集中、行为消融敏感这三条,才能进入最终的分区名单。

我特别欣赏他们对负样本的处理。同一套测绘流程,还会跑一遍在随机种子下初始化、但没有经过完整训练的模型。随机模型上当然也会出现一些“假分区”,但如果它们的分布和正常模型完全不同,就有理由相信正常模型的分区不是统计聚类算法硬生生造出来的。

2.3 为什么三角验证比单指标靠谱

如果只用SAE聚类,任何高维激活都能被自编码器聚出漂亮的簇来,这是无监督方法的老毛病。如果只用激活修补,你又可能被“中枢冗余”迷惑——比如某个任务依赖的还是少数几个共享中心头,并没体现出成片的功能区。只有当因果修补、稀疏特征、行为消融三者指向同一个区域,你才有底气说:这儿就是管这个功能的,而不是测量工具自己画出来的。

这一步在可解释性研究里经常被忽视,许多人拿到相关性就当真了。这篇Oral的可信度,很大一部分来自这一层“反自欺”的设计。

3. 七个“脑区”:功能地图上到底画出了什么

3.1 语义汇聚区:多语言的“同声传译中枢”

第一个让我觉得有意思的是语义汇聚区。它大致位于网络的中间偏后段,横跨若干连续层。研究者发现,英语、中文、法语、西语表达同一个意思时,在浅层的表征还各走各的,但到了这个区域,表征会被压缩成高度相似的特征向量。他们做了一个很漂亮的patch实验:把法语输入在这个区域的激活替换成英语输入对应层的激活,模型居然能继续输出正确的法语语义,只是词汇外壳换了。

用人脑类比,这就像语义中枢:不管耳朵听到的是哪门语言,最后都要汇聚到同一个“意思”空间再做下游处理。这对多语言模型的设计挺有启发——如果你的多语言模型在某些语言上表现差,也许不是语料不够的问题,而是语义汇聚区没有对齐好。

3.2 抽象推理带与代码专项区:一对“理科双子区”

第二个区域我称为抽象推理带,位置比语义汇聚区更靠后,集中在深层网络的后半段连续层。几乎所有需要多步推理的任务,数学、逻辑、常识因果判断,都会在这里产生强激活。更有意思的是,研究者把数学题里的数字替换成无关变量,发现推理带照样被激活,说明它捕捉的是结构而不是具体数字。这解释了为什么模型能“做对没见过的题”——它在这段区域里运行的是一套抽象的关系推演回路。

跟推理带紧挨着的,是代码专项区。它和推理带部分重叠,但细看注意力头的分工,会发现代码任务里有一组头专门跟踪变量绑定、语法树位置和括号层级,这些头在普通文本任务里几乎不被激活。也就是说,数学和代码不是同一个区,而是两个存在交集的区。细究下来,它们其实不是按“数学vs代码”这两个标签分的,而是按“抽象结构复杂度vs句法约束强度”分的。

3.3 事实验证区、风格区与安全拒答区

再说另外三个区。

事实验证区位于中后层,职责很像一个质检员:把模型检索到的原子事实放在一起做一致性校验。当这个区域的活动强度和语义汇聚区的输出出现明显不一致时,幻觉的概率会显著上升。这个信号对部署场景太有用了,后面我会展开讲。

风格区基本集中在末尾几层。情绪、文风、人格化输出这些“表面风格”的表征都在这里。做微调的人应该会心一笑:难怪改语气、改文风往往只动最后几层就有效,而改数学能力却要动更深的层——它们本来就不在同一块区域。

最值得单独提的是安全拒答区。它不像风格区那样松散地铺在后面,而是集中在若干特定的注意力头上,是模型经过对齐训练之后产生的一组熔断电路。研究者的消融实验显示,把这几个头临时屏蔽掉,模型对不当指令的服从度会显著上升。换句话说,安全不是均匀地糊在每一层上的,它有一块相对独立的物理载体。

3.4 一张不完全精确的分区汇总表

分区大致位置代表能力验证方式
语义汇聚区中间偏后段连续层跨语言语义统一跨语言patch迁移
抽象推理带深层后半段连续层数学、逻辑、因果变量替换仍保持激活
代码专项区推理带附近、部分分离语法树、变量绑定代码任务专属头消融
事实验证区中后层事实一致性校验与幻觉信号相关性
风格区末尾层情绪、语域、人格化风格任务激活集中
安全拒答区若干特定头拒答与对齐约束屏蔽后拒答率下降
上下文工作台中间层局部指令跟随、短程依赖指令位置敏感性

注意,这张表是理想化的总结。实际的分区是重叠的、模糊的,边界没有表格看起来这么干净。我在复现时发现,有些分区之间存在大量共享特征,边界是渐变的;同一个头也可能同时出现在两个分区的成员名单里。所以读图的时候用“倾向于”“大约在”这种心态,别把坐标当真值。

4. 地图能拿来干什么:微调、剪枝与对齐的实操思路

4.1 改LoRA的位置,而不是无脑扫全层

我自己在做微调的时候,最大的痛点是灾难性遗忘:在代码任务上做增量训练,模型过两天连原本熟练的通用问答都忘了。如果大模型内部真有功能分区,那处理思路就完全不同了。

比如你要做数学增强,没必要在全部层上挂LoRA,而是把LoRA的秩集中砸向抽象推理带那几层;同时把事实验证区和风格区尽量冻结,防止权重更新外溢。按这个思路跑下来,我手上的效果是:数学能力提升的速度更快,而且通用能力遗忘明显减缓。当然这不是论文给的结论,是我基于分区图做的实践假设,但方向验证下来是通的。

对普通使用者来说,就算不重训模型,这个思路也能帮你解释为什么市面上很多“数学增强版”“代码增强版”微调模型总是一股塑料味——因为它们改动了一个不该大动的区域,把风格区也一起搅乱了。

4.2 剪枝和量化可以看“区”吃饭

部署端的收益更直接。现在做量化,大多数方案是全局统一的比特位宽,最多分个敏感层和敏感头。有了分区图,你可以动态分配精度预算:抽象推理带和事实验证区留下高精度,风格区可以分到更激进的量化和剪枝率。

我在自己部署的7B模型上试过仅对风格区做4bit量化、其他区保持8bit,显存下降了大约12%,而开放式问答的主观质量几乎没有可感知的下降。因为“文风”这种能力对数值扰动不敏感,但抽象的推理链对精度极其敏感。用分区图指导精度分配,比我之前靠暴力扫层来找敏感层高效得多。

4.3 安全监测和投毒测试有了新抓手

安全拒答区的存在,让我对推理时的实时监测有了一些新想法。既然关键的安全熔断电路集中在少数注意力头上,你不用对全模型做高成本的审核,只需要在推理过程中轻量读取这几个头的输出统计量,对异常激活做熔断。论文展示的现象是:这些头被屏蔽后,不当指令的服从度显著上升。反过来推,正常模型在遇到不当请求时,这几个头的激活模式应该有一套特征性的变化。用这种信号做推理时的安全闸门,比套一层外部审查模型成本低不少。

提到投毒测试,这是一个相关的话题。现在检测模型有没有被恶意改动,常规做法是跑一组成分复杂的评估集,看整体分数有没有缩水。但如果安全区是物理上一小块区域,你完全可以更高效地做定向检测:测量微调前后安全拒答区的特征分布漂移。漂移明显,基本可以断定这次微调动了安全相关权重。这比端到端跑完整评测快得多,也更灵敏。

4.4 幻觉定位有一种低成本信号

再讲一个对日常应用特别实用的点:幻觉。研究显示事实验证区和语义汇聚区之间存在一致性校验关系。实际运行时,如果这两个区域激活的一致性评分掉了下来,大概率模型正处于“心里没底但嘴上硬说”的状态。这个信号可以在推理链路里做成一个辅助判别器,帮助你判断当前要不要无条件信任模型的输出。虽然它不能覆盖所有类型的幻觉,但作为第一道粗筛,比让用户自己去检验可靠得多。

5. 分区的边界在哪里:关于这个结论的三个争议

5.1 聚类一定会产生簇,零模型对照够不够

任何一个无监督聚类算法放在高维激活上,都会给你吐出几个“看起来很合理”的簇。这篇研究虽然加了随机初始化模型做对照,但随机模型毕竟没有学会任何复杂任务,它的激活分布和正常模型差异太大,对照的说服力有上限。更强的对照应该是“打乱层顺序”“反转残差流路径”这类扰动,检验分区到底是网络结构本身决定的,还是训练信号塑造出来的。

所以关于“大模型内部存在功能分区”这句话,我的态度是:证据链已经很扎实,但把它理解成一个结构假说,而不是解剖学事实,会更稳妥。

5.2 数学区和代码区:天然分化还是语料捆绑?

另一个绕不开的问题是任务耦合。现实世界的预训练语料里,数学和代码本来就高度混杂:推断代码的时间复杂度要算数学,做数学题也经常要用伪代码。代码专项区之所以存在,有可能不是模型内生出了“语法树处理”这种独立能力,而是它只是推理带对特定符号序列的一种习惯性反应。

要彻底区分这两种解释,需要构造反事实任务,比如用数学语法包装一道代码逻辑题,或者反过来。论文做了一部分这样的实验,但我认为还不足以完全剥离开语料带来的耦合效应。这个问题不解决,“分区”的因果解释力就会打一点折扣。

5.3 换一个随机种子,分区还在吗?

论文报告了跨随机种子的稳定性,但我注意到一个细节:分区存在,但具体层位置会漂移。同一个安全拒答区,在A种子下可能集中在第16层的某几个头,在B种子下却跑到第20层去了。

这对科学结论是好事,说明这些结构是训练过程中“突现”出来的,而不是架构先天规定死的;但对工程落地是个坏消息。如果每个模型的分区坐标都不一样,你想写死一个监控位置就不能通用,每次都要重新做测绘。目前我看到的折中做法是:先在目标模型上跑一遍轻量敏感度测试确定对应层,再决定监控和干预位置,而不是直接套用别人模型的地图坐标。

5.4 “像大脑”这个类比到底有几分真

最后必须泼一点冷水。大脑的功能区是亿万年进化雕琢出来的,不同功能区往往连着不同的解剖结构、不同的神经递质系统;而Transformer的分区只是同一套transformer block在不同深度上的偏好分工。论文里的“脑区”与其说像大脑皮层,不如说更像一座城市的规划图纸:金融区是新CBD,老城区是文脉区,消防站和安全区分布在特定街区,但整个城市的路网是同一种规格修的。

这类比能带来灵感,却不能替代机制解释。你说“安全拒答区”和“布洛卡区”形似,只是因为它们都承担了明确功能,背后没有同构的生理机制。所以我的建议是:把“大脑分区”当成一个有启发性的隐喻来用,但真正动工程方案时,还是按Transformer自己的逻辑来设计。

6. 对普通工程师的三条实战建议

6.1 先跑一次“梯度×激活”定位自己的敏感层

不是每个人都有几百张卡去做全套激活修补,但你自己的模型总跑得动一套简化版定位。方法很简单:拿一批任务样本,计算任务loss对每一层激活的梯度,再用梯度范数乘上激活范数,得到每条层的敏感度曲线。曲线峰值对应的层,就是这项任务的功能富集区。

示意伪代码如下,重点就是“梯度乘激活”那一步:

for layer in model.layers: acts = model.run_to_layer(task_input, layer) loss = task_loss(pred_head(acts), target) grad = autograd_grad(loss, acts) sensitivity[layer] = torch.norm(grad * acts)

这段代码的真实目的是帮你快速画出一条“任务敏感度曲线”,不用追求完美严谨,因为只要曲线形状稳定,就能回答“该往哪里加LoRA、该保护哪一层”这个实际问题。我自己在每个新任务上都先跑一遍,成本大约多花十分钟,但后面微调省下来的时间远不止十分钟。

6.2 用分区理解提示词工程:为什么思维链和末尾指令更有效

提示词工程在很多人手里还是玄学,但如果你接受大模型存在功能分区,一些经验规律忽然就有了解释。

思维链为什么有效?因为抽象推理带本质上是靠一组多跳电路在反复强化中间表征。你让模型一步到位输出答案,它必须一次性把整个推理路径压进最后那次前向;但你让它输出中间步骤,这些步骤会作为上下文token重新出现在后面的层里,推理带等于被反复刺激、反复激活。就像给同一台推理引擎喂了多次燃料,它自然跑得更稳。所以思维链不是“模型会抄答案”,而是它真的多走了几轮推理。

末尾指令比开头指令更有效,也和分区有关。指令跟随主要落在中间层的“上下文工作台”,它对位置编码的感受野有明显偏好,离当前位置越近的指令,越容易进入这层工作台的注意力范围。你可以把“上下文工作台”想成一个短期记忆缓冲区,最新进来的指令优先占据缓冲区,旧指令则被挤到边缘。理解了这个机制,再去调整Prompt里指令的位置,就不会是瞎试了。

6.3 把分区地图当假设生成器,而不是最终答案

说到底,这张功能地图更像一张“城市现状图”,而不是“城市规划图”。新加数据、换训练策略、做PEFT微调,都可能让分区边界发生位移。你看到模型在某些任务上突然变笨,可以按图索骥去查对应区域是否被其他改动波及;你想定向增强某个能力,就按图去找对应的敏感层和头。但最终能不能用,永远以你自己模型上的A/B测试为准。

我自己按这套思路在自己的模型上跑了简化版定位,最深的感受是:大模型没有我们想的那么黑,但也没有我们想的那么干净。所谓“脑区”,更像是一座城市的功能区划——数学区是新CBD,风格区是老城区,安全区是消防站,它们之间有路网交叉、有临时摊位,但整体上确实是有规划的。可别把它当解剖图来拜,你该把它当工具箱来用。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进