假如你是一家智能加工厂的厂长。工厂里有一台庞大的“语义加工流水线”,每天把输入的词句加工成通顺的回答。这台机器效果惊人,但外壳是封闭的——出了次品、说错话,你只能干瞪眼,不知道是哪个环节出了问题。TransformerLens,就是给这台机器装上的“巡检仪表盘与传感探针”。它能让你看到传送带上每一步材料的样子、哪个工位在认真干活、哪个工位在摸鱼、哪段流程把信息带偏了。装上这套工具,黑箱工厂从此变成可以随时巡检的透明车间。

岗位关联

掌握TransformerLens,等于拥有给大模型“做CT”的核心能力,是AI可解释性研究、模型安全审计、幻觉溯源等岗位的必备技能。

目录
  1. 可视化演示
  2. 工具库定位
  3. 模型加载:HookedTransformer
  4. Hook钩子系统
  5. 残差流分解
  6. 注意力头分析
  7. 诱导头检测
  8. 可视化工作流
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示TransformerLens通过Hook注入捕获激活值、分析注意力头模式、分解残差流分量、检测诱导头的四步探测工作流,直观呈现机制解释性分析过程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Hook注入:激活捕获与缓存 通过Hook点注入捕获Transformer各层激活值 缓存中间计算结果供后续分析使用 四步探测流程完整揭示模型内部计算机制

工具库定位

工厂建成之初,传送带被厚重的铁皮罩住,管理者只能看出口的成品,判断不了内部工序的优劣。今天的大模型正是这样:输入一句话,输出一段文字,内部的“加工工序”完全不可见。直到机制解释性(Mechanistic Interpretability)兴起,研究者们开始寻找打开铁皮罩的钥匙,TransformerLens就是其中最趁手的一把。

TransformerLens由可解释性研究者Neel Nanda等人发起,是一个专门面向Transformer架构的机制解释工具库。它的定位很纯粹:让研究者以最小的成本“拆开”模型,观察内部状态。传统做法是徒手改PyTorch代码、在forward函数里插桩打印——每个模型都要写一套,痛苦且容易出错。TransformerLens把“插桩”变成了标准化接口,一行代码即可在任意子层挂载探针。

技术上讲,TransformerLens提供了三件套:HookedTransformer模型类、Hook钩子注册机制、以及预置的分析工具(如激活缓存、注意力模式提取、logit透镜)。安装也简单,pip install transformer-lens 即可。它把“看穿模型”这件事从“手工作坊”升级成了“流水线作业”。回到工厂的比喻:安装TransformerLens,就是给封闭的传送带装上第一组仪表盘,从此每道工序的状态尽收眼底。

模型加载:HookedTransformer

买了仪表盘,第一步是接线。TransformerLens的“接线中枢”是 HookedTransformer 类。普通做法是 AutoModel.from_pretrained() 加载模型,但那是一个封闭的黑箱对象;而 HookedTransformer 在加载的同时,会自动在每一个关键子层埋好“传感器接口”——这些接口就是Hook点。

从代码看,加载一个预训练模型非常直观:model = HookedTransformer.from_pretrained("gpt2-small")。这行命令会从HuggingFace拉取GPT-2小模型的权重,然后包装成带钩子的版本。TransformerLens内置了对GPT-2、LLaMA、Mistral等主流架构的适配,加载后你可以用 model(prompt) 正常做前向推理,也可以通过 model.run_with_cache(prompt) 一次性拿到所有层的中间激活。

模型内部的结构被统一命名为标准化的“钩子点名表”,比如 blocks.0.attn.hook_pattern 表示第0层注意力模式的钩子点,blocks.5.mlp.hook_post 表示第5层MLP输出后的钩子点。这种命名规范就像工厂每个车间门口挂的编号牌——你想查哪个环节,直接按编号找过去即可。接线完成后,整条流水线的每个关键节点都暴露在了仪表盘网络之下。

Hook钩子系统

仪表盘的核心部件是“传感器探头”。在工厂里,探头可以贴在传送带旁读取数据,也可以接上一个小装置,微调电流改变加工参数。Hook机制干的就是这件事:注册一个Python函数,让它在前向传播途经某个子层时被调用——既能“观察”(读取激活值),也能“干预”(返回修改后的激活值)。

Hook函数被调用时,原来的激活值会原封不动地传入。你可以决定什么都不做、只看一眼;也可以计算一个新的张量并返回,模型后续的计算就会使用这个新值。TransformerLens为此提供了 model.add_hook(hook_point, hook_fn) 永久挂载,以及 model.run_with_hooks(...) 的临时挂载方式,后者用完后自动卸载,十分安全。

Hook的妙处在于“无创观察、按需干预”。你可以在不修改任何模型权重的前提下,把某一层的激活值清零看看输出变化,从而判断这层到底承担了什么职责。探头读数是巡检的第一手数据——有了Hook,工厂每个车间的“实时工况”都有了记录。

a(l)′=fhook(a(l))\displaystyle \mathbf{a}^{(l)\prime} = f_{\mathrm{hook}}\left(\mathbf{a}^{(l)}\right)
这个公式说的是:钩子函数 $f_{\mathrm{hook}}$ 接收第 $l$ 层的原始激活 $\mathbf{a}^{(l)}$,返回一个新激活 $\mathbf{a}^{(l)\prime}$,替换掉原值继续向前传播。
  1. 定义钩子函数$f_{\mathrm{hook}}$ 是一个用户编写的Python函数,它的输入就是当前钩子点上的激活张量
    fhook:a(l)↦a(l)′\displaystyle f_{\mathrm{hook}}: \mathbf{a}^{(l)} \mapsto \mathbf{a}^{(l)\prime}
  2. 读取或修改函数体内可以对激活张量做任意操作——切片、置零、加噪声、重定向,就像探针贴上去读出数据后再决定是否微调
    a(l)′=Transform(a(l))\displaystyle \mathbf{a}^{(l)\prime} = \mathrm{Transform}\left(\mathbf{a}^{(l)}\right)
  3. 注入新值返回的 $\mathbf{a}^{(l)\prime}$ 被模型接收,后续所有层都基于这个新值继续计算
    xl+1=xl+Attnl(LN(a(l)′))+⋯\displaystyle \mathbf{x}_{l+1} = \mathbf{x}_l + \mathrm{Attn}_l\left(\mathrm{LN}(\mathbf{a}^{(l)\prime})\right) + \cdots

残差流分解

工厂里有一条贯穿全厂的主传送带。原材料从第一道工序进入,每经过一个车间,工人们不是把原来材料扔掉,而是把新加工的半成品叠加上去,带着全部历史继续前进。Transformer的“残差流”正是这样一条信息主传送带:每一层的输出都被加到原来的状态上,而不是覆盖它。

这条设计让信息有了“叠加累积”的特性。研究者可以在任意一层截取传送带上的状态,看看当前累积了什么信息。TransformerLens通过 cache["blocks.7.hook_resid_post"] 就能取到第7层处理完后的残差流状态。更进阶的操作是“方向投影”——把残差流向量投影到某个语义方向(比如“巴黎的方向向量”)上,观察这个方向的信息在哪些层被写入、在哪些层被读取。

基于残差流,TransformerLens提供了“logit透镜”(Logit Lens):把某一层的残差流状态直接映射回词表空间,看看这层“如果现在输出,会预测什么词”。这就像在传送带的不同位置取样化验,立刻判断半成品在哪个车间开始“成型”。传送带上的每份样本,都在讲述模型加工语义的完整旅程。

xl+1=xl+Attnl(LN(xl))+MLPl(LN(xl))\displaystyle \mathbf{x}_{l+1} = \mathbf{x}_l + \mathrm{Attn}_l\left(\mathrm{LN}(\mathbf{x}_l)\right) + \mathrm{MLP}_l\left(\mathrm{LN}(\mathbf{x}_l)\right)
公式表明:第 $l+1$ 层的残差流状态等于旧状态 $\mathbf{x}_l$ 加上注意力子层与MLP子层各自的贡献。信息从不被覆盖,只被叠加。
  1. 旧状态保留$\mathbf{x}_l$ 是传送带进入第 $l$ 层之前的累积信息,它被原样保留
    xl\displaystyle \mathbf{x}_l
  2. 注意力子层贡献$\mathrm{Attn}_l\left(\mathrm{LN}(\mathbf{x}_l)\right)$ 先把状态做层归一化,再让注意力机制从其他token位置提取信息加入进来
    Attnl(LN(xl))\displaystyle \mathrm{Attn}_l\left(\mathrm{LN}(\mathbf{x}_l)\right)
  3. MLP子层贡献$\mathrm{MLP}_l\left(\mathrm{LN}(\mathbf{x}_l)\right)$ 是逐token的“加工机床”,做非线性变换,相当于对当前token独立补充语义
    MLPl(LN(xl))\displaystyle \mathrm{MLP}_l\left(\mathrm{LN}(\mathbf{x}_l)\right)
  4. 逐元素相加旧状态加上两份子层贡献得到新状态 $\mathbf{x}_{l+1}$,信息总量只增不减
    xl+1=xl+Δattn+Δmlp\displaystyle \mathbf{x}_{l+1} = \mathbf{x}_l + \Delta_{\mathrm{attn}} + \Delta_{\mathrm{mlp}}

注意力头分析

每个车间里有多个工位,每个工位负责不同类型的信息搬运。Transformer的每一层有多个“注意力头”,每一个头都独立地执行一套“谁该关注谁”的匹配任务。有的头负责语法关系(主语关注谓语),有的头负责指代关系(代词关注名词)。定位这些头,就是理解模型在做什么的关键。

TransformerLens让注意力头分析变得极其轻松。cache["blocks.7.attn.hook_pattern"] 给出了第7层所有注意力头的“关注模式矩阵”——每一行是一个token,每一列是它关注的来源token,权重表示关注强度。把这个矩阵画成热图,就能直观看到“这个头在关注哪些位置”。

更进一步,“因果追踪”通过干扰(ablation)实验判断某个头是否真正影响输出:先把该头在干净输入下的激活记录下来,再在受污染输入上强制替换为干净激活,观察预测是否被“救回来”。这相当于把某个工位的活停掉,看整个车间是否还能出合格品。逐头排查之后,哪些头是“关键工位”一目了然。

Headh(X)=softmax(XWQh(XWKh)⊤dk)XWVhWOh\displaystyle \mathrm{Head}_h(\mathbf{X}) = \mathrm{softmax}\left(\frac{\mathbf{X}W_Q^h(\mathbf{X}W_K^h)^{\top}}{\sqrt{d_k}}\right)\mathbf{X}W_V^hW_O^h
公式展示了一个注意力头的完整计算:先算查询与键的相似度,缩放归一化成权重,再对值做加权求和并投影输出。
  1. 查询与键编码$\mathbf{X}W_Q^h$ 与 $\mathbf{X}W_K^h$ 把每个token分别编码成“我在找什么”的查询向量和“我是什么”的键向量
    Qh=XWQh,Kh=XWKh\displaystyle \mathbf{Q}_h = \mathbf{X}W_Q^h, \quad \mathbf{K}_h = \mathbf{X}W_K^h
  2. 相似度矩阵$(\mathbf{X}W_K^h)^{\top}$ 转置后与查询矩阵相乘,得到任意两个token之间的匹配分数
    Sh=QhKh⊤\displaystyle \mathbf{S}_h = \mathbf{Q}_h \mathbf{K}_h^{\top}
  3. 缩放稳定除以 $\sqrt{d_k}$ 防止分数过大导致softmax进入饱和区
    Shdk\displaystyle \frac{\mathbf{S}_h}{\sqrt{d_k}}
  4. 归一化权重softmax把每行分数变成和为1的概率分布,表示每个token的注意力分配
    softmax(Shdk)\displaystyle \mathrm{softmax}\left(\frac{\mathbf{S}_h}{\sqrt{d_k}}\right)
  5. 加权输出权重与值向量 $\mathbf{X}W_V^h$ 相乘后,再经输出矩阵 $W_O^h$ 投影,形成该头的最终输出
    Headh(X)=softmax(⋯ ) XWVhWOh\displaystyle \mathrm{Head}_h(\mathbf{X}) = \mathrm{softmax}(\cdots)\,\mathbf{X}W_V^hW_O^h

诱导头检测

工厂里总有几位“经验老手”:看到某个熟悉的零件摆放方式,就能提前预判下一个零件该是什么。Transformer里的“诱导头”(induction head)正是干这个的——它发现“当前token曾出现在更早位置,且后面跟着另一个token”的规律,于是提前把注意力放到那个后续token上,实现模式的复制延续。

诱发头通常不是单打独斗。经典机制是“前驱头(previous token head)+诱导头”的配对:前驱头先把序列中每个token映射成“它后面的token”的某种表示,诱导头再根据相似度匹配把信息搬运过来。用TransformerLens做诱导头检测时,可以在重复模式的输入上观察注意力模式——如果某个头稳定地让第 $i$ 个token关注第 $i-1$ 个token之前出现过的位置,它就极可能是候选诱导头。

激活模式提供了更细的证据:诱导头对“重复出现的token对”表现出极高的注意力权重,而对随机token对权重分散。研究者可以用 model.attention_pattern 批量提取所有头在所有层上的注意力矩阵,再通过自动化评分(比如计算对角偏移上的注意力集中度)筛选出候选诱导头。老员工虽然不说话,但看它的眼神(注意力)就知道它心里想什么。诱因头检测,就是通过观察“眼神方向”来识别这些经验老手。

可视化工作流

仪表盘装好了、探头也铺开了,最后还需要一个控制室大屏把所有数据汇总成可读的图表。TransformerLens生态中最常用的可视化工具是“注意力热图”:把某个注意力头的关注矩阵画成网格图,颜色越深代表权重越大。一图胜千言,很多机制在热图上几乎是“一眼可辨”。

激活轨迹图则是把残差流在每一层的状态压缩到低维空间(如PCA),画成一条随时间/层数变化的曲线,观察信息如何流动与分叉。比如“logit透镜”曲线可以展示模型在每一层对最终答案的置信度增长趋势——你会看到某些层突然“顿悟”,把正确答案的置信度抬了上去。

完整的交互式分析流程可以这样组织:先用 run_with_cache 拿到所有激活,然后绘制目标层的注意力热图锁定可疑头,再用hook干预做因果验证,最后用激活轨迹图解释整体行为。这套“观察→假设→验证→结论”的工作流,正是mechanistic interpretability研究的标准姿势。控制室的大屏不是摆设——它把散落各处的传感器读数串成一条完整的故事线,让工厂的每一步运转都清晰可见。

AI 应用场景

大模型安全审计

阶段:模型评估与安全检测

解决的问题:大模型可能偷偷走“捷径”(比如根据位置或格式线索答题),传统评测只看最终准确率,难以发现这类隐蔽行为。TransformerLens的Hook与注意力头分析可以定位到模型依赖的特定注意力头,判断是否存在非预期推理路径。

具体案例:安全团队对一款客服大模型做审计时,用TransformerLens对所有注意力头做因果追踪,发现第12层第3个头在用户输入包含“紧急”二字时直接跳过上下文检索,强行输出固定话术。团队据此对模型做了针对性微调。

LLM幻觉溯源与修复

阶段:模型调试与质量改进

解决的问题:模型编造事实时,错误信息在某一层被注入残差流。用logit透镜逐层观察“正确答案方向的置信度”,可以定位到“事实被污染”的具体层,然后通过激活修补进行定向修复。

具体案例:研发团队发现问答模型老是把某公司总部答错。他们构造“公司-城市”样本对,用方向投影观察哪个层写入了错误信息,发现是第9层MLP在特定上下文中写入了误导性特征。团队据此调整了该层的激活方向,幻觉率下降40%。

模型压缩中的冗余头检测

阶段:模型优化与部署

解决的问题:剪枝时盲目删除注意力头会导致性能骤降。TransformerLens的激活模式分析可以识别出“对几乎所有输入都呈均匀分布”的冗余头——它们对输出几乎没有贡献,可以安全剪除。

具体案例:某团队在压缩7B模型时,用TransformerLens分析全部32层×32个头共1024个注意力头的激活模式,筛出87个“摸鱼头”并剪掉,模型速度提升18%,下游任务指标仅下降0.3%。

Python 演示

python42 行
import torchfrom transformer_lens import HookedTransformer MODEL_NAME = "gpt2-small"PROMPT = "The capital of France is" # 1. 加载预训练模型,自动挂载Hook点model = HookedTransformer.from_pretrained(MODEL_NAME, device="cpu") # 2. 前向传播并缓存所有中间激活logits, cache = model.run_with_cache(PROMPT, prepend_bos=True) # 3. 查看最后一个位置的Top-5预测top5 = logits[0, -1].topk(5)pred_tokens = [model.tokenizer.decode(int(t)) for t in top5.indices]print("原始预测:", pred_tokens) # 4. 提取第7层第0个注意力头的注意力模式layer, head = 7, 0pattern = cache["blocks.{}.attn.hook_pattern".format(layer)][0, head]print("注意力模式shape:", tuple(pattern.shape)) # 5. 定义Hook函数:强制每个token只关注前一个tokendef focus_on_previous(activation, hook):    modified = torch.zeros_like(activation)    bsz, n_heads, tgt, src = modified.shape    for t in range(1, tgt):        modified[:, :, t, t - 1] = 1.0    return modified # 6. 带Hook重新前向,观察预测变化hooked_logits = model.run_with_hooks(    PROMPT,    fwd_hooks=[("blocks.{}.attn.hook_pattern".format(layer), focus_on_previous)],    prepend_bos=True,)top5_hooked = hooked_logits[0, -1].topk(5)print("Hook修改后预测:", [model.tokenizer.decode(int(t)) for t in top5_hooked.indices]) # 7. 查看指定层残差流末状态resid = cache["blocks.{}.hook_resid_post".format(layer)][0, -1]print("该层残差流维度:", resid.numel())
目的:演示TransformerLens完整工作流——加载模型、缓存激活、查看预测、提取注意力模式、用Hook干预前向、读取残差流。
  1. model = HookedTransformer.from_pretrained(...)加载带钩子点的Transformer模型,这是所有分析的入口
  2. logits, cache = model.run_with_cache(PROMPT, prepend_bos=True)一次前向同时得到预测结果和全部中间激活缓存
  3. top5 = logits[0, -1].topk(5)取最后一个token位置上概率最高的5个候选
  4. pattern = cache["blocks.7.attn.hook_pattern"][0, head]按标准命名从缓存中取出指定层的注意力模式矩阵
  5. def focus_on_previous(activation, hook):钩子函数签名:接收激活张量和钩子信息,返回新激活
  6. modified[:, :, t, t - 1] = 1.0只保留“关注前一个token”的权重,其余注意力全部置零
  7. hooked_logits = model.run_with_hooks(...)用临时Hook做受控实验,结束后自动卸载
  8. resid = cache["blocks.7.hook_resid_post"][0, -1]读取第7层处理完后的残差流状态,即传送带上的累积信息

常见误区

误区“Hook就是拿来看一眼中间结果的小工具,想改模型行为还是得改代码重新训练吧?”

正解Hook不仅能读,还能写。钩子函数的返回值会直接替换原激活值,继续参与后续计算。这相当于探头不仅能测电流,还能微调电压。run_with_hooks 让我们在不改动任何模型权重的前提下,精确干预某一层的输出,这是做因果实验的核心能力。

为何常见:大多数调试工具(如打印中间变量)只做观测,容易让人误以为Hook也仅限只读。

误区“`run_with_cache` 返回的cache里面装的应该是每一层的预测结果吧?”

正解缓存里存的是中间激活,比如注意力模式、残差流状态、MLP输出等,而不是logits。logits只是最终输出层的预测分数,缓存则记录了到达输出层之前的所有中间状态。两者的区别就像“成品报告”和“每道工序的质检记录”——后者信息量远大于前者。

为何常见:接口名叫"cache"容易让人误以为缓存的是输出,加上很多教程直接打印logits,更强化了误解。

误区“TransformerLens是Neel Nanda为GPT-2写的,应该只支持OpenAI的模型吧?”

正解TransformerLens是一个通用机制解释框架,除了GPT-2外,还支持LLaMA、Mistral、Phi等主流开源架构。HookedTransformer 会自动适配不同模型的层数、头数和归一化方式,只要模型结构是基于Transformer的,基本都能加载并挂上Hook点。

为何常见:项目早期示例大量使用GPT-2,导致很多人误以为它只服务GPT系列。

误区“拿到注意力热图就能解释模型为什么这么回答了,不需要再做别的分析。”

正解注意力权重只是“模型声称自己关注什么”,并不等价于“模型实际依赖什么”——某些头权重很大但对输出毫无贡献。完整的机制解释需要配合因果实验(如激活替换、路径修补)验证哪些头真正决定了输出。注意力图是线索,因果验证才是证据。

为何常见:注意力可视化最为直观,初学者容易把相关性误认为因果性。

误区“`from_pretrained` 只要跑过一次,之后离线也能随便加载模型。”

正解from_pretrained 默认会从HuggingFace Hub拉取权重,第一次运行必须联网。模型下载后会被缓存在本地目录,之后可以离线加载,但如果你想换一个没下载过的新模型,仍然需要网络。做可复现实验时,建议提前把权重离线下载好,并指定本地缓存路径。

为何常见:跑过一次能成功加载后,容易产生“已经装好”的错觉。

面试题

Q1. TransformerLens中加载预训练模型使用的核心类是?

单选题 · easy

  • A.AutoModel
  • B.Transformer
  • C.HookedTransformer← 正确答案
  • D.GPT2Model

答案:C。HookedTransformer 是TransformerLens的入口类,所有分析都围绕它展开。AutoModel是HuggingFace的通用类,GPT2Model是原始PyTorch实现,但它们都不带Hook点。Transformer是通用架构名词。比喻来说,只有HookedTransformer是装上传感器的工厂车体。

Q2. run_with_cache 返回什么?

单选题 · easy

  • A.训练损失和梯度
  • B.模型权重和偏置
  • C.输出logits和激活缓存← 正确答案
  • D.词表和位置编码

答案:C。run_with_cache 执行一次前向传播,返回最后一个位置的logits,以及一个包含所有中间激活的cache字典。它不涉及梯度、权重和词表信息。就像巡检一次不仅拿到成品报告,还带回每道工序的质检记录。

Q3. TransformerLens主要分析哪类模型?

单选题 · easy

  • A.卷积神经网络
  • B.Transformer模型← 正确答案
  • C.循环神经网络
  • D.图神经网络

答案:B。TransformerLens专为Transformer架构设计,包括GPT、LLaMA、Mistral等。CNN、RNN、GNN不是它的分析对象,因为它们的计算结构和Hook点命名体系完全不同。

Q4. 注意力模式缓存的键名称是什么?

单选题 · mid

  • A.模式缓存hook_pattern← 正确答案
  • B.缩放缓存hook_scale
  • C.前馈缓存hook_pre
  • D.输出缓存hook_post

答案:A。注意力模式缓存的键是 blocks.{l}.attn.hook_pattern,存储注意力权重矩阵。hook_scale、hook_pre、hook_post分别对应layernorm缩放、MLP前激活和子层输出,不是注意力模式。命名规范就像车间编号牌,需要按图索骥。

Q5. Hook函数的返回值有什么作用?

单选题 · mid

  • A.被模型直接丢弃
  • B.打印到控制台显示
  • C.替换原激活继续前向← 正确答案
  • D.更新模型的梯度参数

答案:C。Hook函数的返回值会替换该钩子点上的原激活值,并继续参与后续前向计算。这正是“干预”能力的来源。丢弃、打印或更新梯度都不是Hook函数的设计用途。

Q6. 残差流更新公式的核心特征是什么?

单选题 · mid

  • A.每层残留叠加← 正确答案
  • B.每层相互独立
  • C.每层丢弃旧值
  • D.每层归一化旧值

答案:A。残差流的核心特征是新状态等于旧状态加上各子层贡献,信息不断叠加而不被覆盖。每层丢弃旧值或相互独立都与残差连接的设计背道而驰。就像传送带上的材料永远带着全部历史行进。

Q7. 下列哪些操作可以通过Hook实现?(多选题)

多选题 · mid

  • A.读取中间激活← 正确答案
  • B.修改中间激活← 正确答案
  • C.替换预训练权重
  • D.压缩训练数据集

答案:AB。Hook既能读取激活值,也能返回修改后的激活值参与前向。但它不能直接改动模型权重(那是微调或权重编辑的范畴),也不能压缩训练数据集。读取与修改是探针的两大基本功。

Q8. 诱导头检测中的“前驱头+诱导头”配对,前驱头的作用是什么?

单选题 · hard

  • A.把当前token映射为其后一个token的表示← 正确答案
  • B.计算最终预测的softmax概率
  • C.对残差流做层归一化处理
  • D.生成词表中的下一个token

答案:A。前驱头(previous token head)的核心职责是让每个token的位置编码包含“它的后面是谁”的信息。诱导头随后利用这种表示做模式匹配。softmax计算、层归一化和token生成都不属于前驱头的功能分工。

Q9. 残差流分解支持下列哪些分析操作?(多选题)

多选题 · hard

  • A.投影到语义方向向量← 正确答案
  • B.logit透镜查看各层预测← 正确答案
  • C.直接修改输出token文本
  • D.替换模型的优化器配置

答案:AB。残差流分解的核心操作包括方向投影(观察某语义信息在哪层写入)和logit透镜(把某层状态映射回词表空间看预测趋势)。它不直接修改输出文本,也不涉及优化器配置。方向投影是化验,logit透镜是取样,两者都是无损检测。

Q10. 路径修补(path patching)测量的核心指标是什么?

单选题 · extreme

  • A.某条路径对最终logit的因果贡献← 正确答案
  • B.模型训练的收敛速度
  • C.数据集的样本多样性
  • D.优化器的学习率变化

答案:A。路径修补是一种因果实验:先把干净输入下的某路径激活缓存下来,再在扰动输入上强制替换为该激活,观察预测是否被“救回”。它衡量的是该路径对最终logits的因果贡献度。这相当于通过“停掉某个工位再恢复”来判断它是否关键。