Jacobian lens
深入阅读 · 第 10 章 LM head——用来修那块 logit lens 读不动的模糊中间层。而且和那一页不同,这一页跑的是一个真正拟合过的 lens,就在你浏览器里的 Qwen3.5-0.8B 上。
logit lens 那一页最后停在一块诚实的盲区上:一个中间的 h_ℓ 对共享的 unembedding W_U 而言是 off-distribution 的,所以把它直接推过 W_U,在中段读出来的是噪声——而中段恰恰是你最想读的地方。修法是:别再裸读 h_ℓ,先把它搬运到 unembedding 被训练去读的那个坐标系里。这就是 Jacobian lens;而且和 logit lens 那一页不同,本页把这个拟合过的 lens 实时跑起来:把它打开,看那些原本迟迟不肯收敛的层如何变得可读。
什么是 Jacobian lens
保留 LM head 那一次 matmul,只在它前面塞进一个逐层的映射 J_ℓ:
J_ℓ 是一个逐层的、在语料上取平均的一阶(Jacobian)映射,刻画在 layer ℓ 处一个小扰动如何推动最后那个 residual。用上它,就把 h_ℓ 先搬运进最后一层的坐标系,再让共享的 unembedding 去读——于是读法匹配的是 stack 顶端所期待的,而不是 layer ℓ 裸露出来的样子。两个邻居能帮你定位它:logit lens 就是这个公式里 (裸读 residual);tuned lens 则把 J_ℓ 换成一个端到端学出来的逐层 affine 探针(Belrose 等人,EleutherAI,2023)。
不是 tuned lens——目标不一样
值得把它和 tuned lens 的区别说准。tuned lens 的优化目标是让它的读数和下一个 token 吻合——它最小化的是与模型自身输出分布之间的 KL。Jacobian lens 什么都不优化成这样:它靠把每一层经过网络自身的平均 Jacobian 搬运,来读出那一层真正编码的东西。「和下一个 token 最吻合」与「对中间层读得最好」是两个不同的目标;当它们不一致时,那是特性而不是缺陷——两种 lens 回答的本就是两个不同的问题。
我们拟合了什么——又没拟合什么
来源要说得直白。我们把 23 个映射 J_1..J_23 在 100 条 WikiText 提示(wikitext-103-raw-v1,原始文本,不套 chat template)上、在这颗 Qwen3.5-0.8B 上拟合——在笔记本上约 11 小时——拟合目标设为 final norm 之前的那个最后 residual。输出边界 ℓ24 按构造保持 ,所以这个拟合的 lens 只作用在中间层。方法是 Anthropic 的;fit 和本页每一个数字都是我们的,来自一颗小小的开源模型。拟合脚本和那些 vendored 的 eval 套件都在仓库里(packages/browser/scripts/jlens/),Apache-2.0 许可,所以整件事从头到尾可复现。
实时看它跑起来
在一个精选提示上切换 LOGIT | JACOBIAN。baked 帧无需下载、瞬间渲染;「在你的设备上实时计算」会在浏览器里的模型上重算它(JACOBIAN 模式还会一次性加载拟合的 pack)。看一个被 logit lens 一直压在 rank 999+ 的概念,如何在拟合的 J 下、于 stack 中段一下子蹿进 top 几名。
Headline: mid-stack the J-lens surfaces the abstract concept ('season' near rank 1, 'summer' near rank 2, around boundaries 16-17) where the plain logit lens is still ranked 999+. A clean mid-band concept cluster. The target token is 'automne' (autumn).
高亮的最后一列是下一个 token 的预测——从下往上读(从浅层到深层),看深度如何把答案解出来。
输出边界 ℓ24 按构造就是 J = I,所以它的 Jacobian 读数和 logit 读数完全相同——拟合的 Jacobian 作用在中间层,而不是在输出处。
热力图追踪的是被 pin 的表层形式(带前导空格的那个 token)的 rank,所以一个概念在中间层可能停在 rank 4 附近,即使网格里的 top token 已经读出这个词——网格看的是 argmax,热力图看的是被 pin 形式的全词表 rank。
诚实地读:栈的前三分之一是有噪声的,每个 pin 只追踪一个表层形式的 token,有些读数本身就难以干净地解释。
这个拟合的 lens 真的有用吗?
实时 demo 可以挑好看的说。所以这里给出聚合结果,来自我们六个 vendored eval 套件(论文 §methods-comparison 的那些提示)。headline 指标是一个归一化的 log-k pass@k AUC——越高表示目标/中间概念变得可读得越早、在越多深度上可读——其中 rank 取在拟合域上的 min ℓ1..23。在这一次运行里,Jacobian lens 在 六个套件里赢了六个:
| Suite | J-lens AUC | logit-lens AUC | J 胜 |
|---|---|---|---|
| typo | 0.781 | 0.432 | ✓ |
| order-ops | 0.638 | 0.242 | ✓ |
| multihop | 0.530 | 0.262 | ✓ |
| multilingual | 0.484 | 0.265 | ✓ |
| association | 0.053 | 0.003 | ✓ |
| poetry | 0.039 | 0.031 | ✓ |
诚实地读这张表。AUC 更高不等于「模型答对了」——它的意思是:在拟合的 lens 下,答案或某个中间概念变得可读得更早、跨越更多层。而且两个最难的套件——poetry 和 association——对两种 lens 都贴着地板(J-AUC 0.039 和 0.053;logit-AUC 0.031 和 0.003):Jacobian lens 仍然赢,但在这种对 0.8B 来说很难的任务上,两种 lens 都读不出多少。用这条命令复现整张表:JLENS_PACK=lens-pack-v1.safetensors JLENS_OUT=eval-results-v1.json oxnode packages/browser/scripts/jlens/eval.mts。
增益到底在哪儿
这份优势并不是沿 stack 均匀铺开的——它是一条中段的带子。四个衡量 band 结构的 proxy 检测器全部触发(4/4);而直接测量它的那个——在给定边界上,J-lens rank 优于 logit rank 的 eval 中间概念所占的比例——从早段带子里在 ℓ6-7 附近抬起来,并在 ℓ17 达到峰值(比例 0.595,对比早段带子的 0.158)。要留意 headline AUC 是什么、不是什么:它是在整个拟合域上取 min ℓ1..23,而不是一个限制在带子内的分数——band 的故事解释的是这个 min 大概来自哪里,并不改变这个数字是怎么算出来的。
widget 里那个法语 headline 提示,就是这件事的定性面孔:对 La saison après l’été est l’,抽象概念 season 和 summer 在拟合的 J 下、于边界 16–17 附近浮到 rank 1–2 左右,而 plain logit lens 在同样的深度上把它们死死压在 rank 999+。
Anthropic 在前沿规模上看到的
在他们自己的模型(Claude)上,Anthropic 报告 Jacobian lens 能读出丰富、可言说的中间内容——workspace 带子大约 k~25 层宽,读数在 ≤10% 的方差内稳定。那些数字是 Sonnet-4.5 的,在 Anthropic 的模型上,出自他们的论文 Verbalizable Representations Form a Global Workspace in Language Models(transformer-circuits.pub,2026)。他们的 causal、swap、tuned-lens 实验我们既不运行也不复现。一颗 0.8B 是否也有那么丰富,明确未知——上面的 6/6 是在一颗小开源模型上、只做 readout 的部分复现,并不是对他们结果的主张。- 每一条 rank 轨迹追踪的都是一个单 token 的表层形式(带前导空格的那个 token);一个被切成多个 token 的概念,只追踪它的第一片。
- 一个 readout 是一袋没有绑定的概念——它告诉你某个方向存在,而不是它如何被组合、如何绑定到某个角色上。要预期有些读数本身就难以干净地解释。
- 对两种 lens 来说,stack 的前三分之一都是有噪声的;默认视图正因如此隐藏了
ℓ1..5。 - 输出边界
ℓ24按构造是 ,所以它的 Jacobian 读数和 logit 读数完全相同——拟合的映射只作用在中间层。 k~25的宽度和 ≤10% 的方差是 Sonnet-4.5 的,不是我们的;一颗 0.8B 是否带有可比的结构,未知。- 我们的 fit 用了 100 条 WikiText 提示、不套 chat template;它是一次小而诚实的拟合,不是一个生产级的 lens。
拟合配方和那六个 vendored eval 套件是 Apache-2.0(上游:anthropics/jacobian-lens);见 packages/browser/scripts/jlens/data/NOTICE。