概念 | 把”特征 (feature)“当作模型表示中可解释的基本单位,并用一个过完备的稀疏字典 (dictionary) 从纠缠的激活里把这些特征解耦出来——这是 Sparse Autoencoder (SAE) 家族的概念基础。
是什么
要理解 dictionary learning,先要说清它要恢复的对象:feature(特征)。
在 mechanistic interpretability 里,feature 通常指模型表示中”一个有独立语义、可被人理解的方向或单元”——比如”这段文本在讲法语""当前 token 是一个人名""上下文出现了否定词”。直觉上我们希望神经元 (neuron) 就对应 feature,一个神经元管一个概念。但现实是大多数神经元是 polysemantic(多义) 的:同一个神经元会对一堆看起来毫不相干的概念都激活。原因之一是 Superposition——模型把远多于维度数的 feature 压缩进同一个低维激活空间,于是单个坐标轴不再对齐任何单一 feature。
Dictionary learning 的任务就是:给定一堆观测到的激活向量 ,假设它们近似是少数几个”字典原子 (dictionary atom)“的稀疏线性组合,反过来把这些原子和组合系数学出来。形式上,学一个字典矩阵 (每一列是一个原子 / feature 方向)和稀疏系数 ,使得
关键词是 overcomplete(过完备):字典原子数 远大于激活维度 ()。这正是为了匹配”feature 数量 > 维度数”的 superposition 假设——用更多的原子、加上稀疏约束,去把被压缩在一起的 feature 重新拆开。
在当代实践里,dictionary learning 最常见的实现是 Sparse Autoencoder (SAE),一个带 encoder-decoder 结构的浅网络:
- encoder 把激活映射到一个高维但稀疏的隐层 (维度 ), 通常是 ReLU,保证激活非负;
- decoder (其列就是字典原子 / feature 方向)把稀疏码线性重建回原激活 。
训练目标是”重建误差 + 稀疏惩罚”:
稀疏项早期多用 范数(可微、好优化,但会顺带压低激活幅度),后来出现直接逼近 (只数”有多少个非零”)的变体(如 TopK、JumpReLU 等),目的都是逼迫每个输入只激活极少数原子。理想结果是:每个被激活的隐层单元对应一个 monosemantic(单义)的 feature。
为什么重要(动机)
这是把”模型内部是黑箱激活向量”变成”可枚举、可命名的概念清单”的关键一步,也是绝大多数现代 SAE 工作的前置:
- 它直接回应 superposition 带来的困境。 既然 Superposition 让 feature 不再与神经元一一对应,那么”逐神经元解读”这条路从根上就走不通。Dictionary learning 提供了一个原则性的出路:不看神经元,而是去学一组新的、过完备的基,让 feature 在这组基上重新变得稀疏且可分离。
- 它把 线性表示假设 变成可操作的工具。 如果 feature 真的以线性方向编码(线性叠加),那么”激活 ≈ 字典原子的稀疏线性组合”就是这一假设的自然推论,dictionary learning 正是检验和利用它的手段。
- 它产出可干预的 handle。 学到的 feature 不只是用来”读”——还能用来”写”:放大 / 抑制某个 feature 的激活来做因果操控(steering),这让可解释性从描述走向验证。
关键细节
-
Reconstruction–interpretability 权衡(核心张力,部分争议)。 稀疏惩罚 太小 → 重建好但 不够稀疏,feature 仍然纠缠、可解释性差; 太大 → 高度稀疏、单义性好,但丢失信息、重建误差大。这条”sparsity–fidelity”前沿是所有 SAE 调参的中心,且多大的字典、多强的稀疏才”对”目前没有公认答案——这是开放问题,不是已解决的工程细节。
-
Feature absorption(特征吸收,已知失败模式)。 一个细粒度 feature 可能被一个更泛的 feature”吸收”进去:例如”以字母 E 开头”这个 feature 的部分激活被某个具体词的 feature 悄悄承担了,导致前者在该词上反而不激活。表象上字典看起来很稀疏、很干净,实则切分逻辑被破坏,单义性是假象。这说明稀疏 + 低重建误差并不等于切到了”正确”的 feature。
-
Dead features(死特征,已知失败模式)。 训练中相当一部分隐层单元会从头到尾几乎不被任何输入激活,沦为”死原子”,白白占用字典容量。常见缓解手段是 resampling(周期性重新初始化死单元)或改用 TopK / auxiliary loss 等结构,但这是缓解而非根治。
-
“找到的 feature” ≠ “模型真正在用的 feature”(重要 caveat)。 SAE 是在激活的统计分布上做无监督分解,它找到的是”能稀疏重建激活的一组方向”,不保证这些方向就是模型计算时因果上依赖的单元。重建得好、看起来单义,都只是必要条件。要确认一个 feature 是否真的参与计算,需要 因果中介 / activation patching 类的干预证据,而非仅凭可视化。这一点上学界仍在争论 SAE feature 的因果地位。
与其他概念的关系
- 直接对治 Polysemanticity 与 Superposition:polysemanticity 是现象(神经元多义),superposition 是它的一个机制性解释(feature 数 > 维度数被压缩),dictionary learning 则是试图逆转这一压缩、把单义 feature 拆回来的方法。理解前两者是理解本笔记动机的前提。
- 建立在 线性表示假设 之上:字典的”线性组合 + 稀疏”形式直接预设了 feature 以线性方向编码;若该假设在大模型尺度上失效,dictionary learning 的形式也需要相应修正——这正是该假设争议的一个落点。
- 奠基论文 Towards Monosemanticity (SAE):把 dictionary learning / SAE 系统性地用到语言模型激活上、展示能恢复大量可解释单义 feature 的代表作,是本概念从理论走向规模化实践的转折点。
- 下游应用:学到的 feature 是构建 Circuit 分析、feature steering、以及更细粒度可解释性的原材料——可以把本笔记看作”先有可解释的基本单位,才谈得上分析它们如何连成计算”。