SAE-Res-Qwen3.5-9B-Base-W64K-L0_50核心架构解析:TopK稀疏自编码器原理解析
SAE-Res-Qwen3.5-9B-Base-W64K-L0_50核心架构解析:TopK稀疏自编码器原理解析
SAE-Res-Qwen3.5-9B-Base-W64K-L0_50是Qwen-Scope项目中基于Qwen3.5-9B-Base模型开发的TopK稀疏自编码器(SAE)模块,通过在模型隐藏层集成并训练稀疏自编码器,实现了高度解耦、低冗余且可解释性更强的数据特征提取,为大语言模型的机制解释和优化提供了强大工具。
什么是稀疏自编码器(SAE)?
稀疏自编码器是一种特殊的神经网络结构,它通过对隐藏层施加稀疏性约束,迫使模型学习数据中最关键的特征表示。与传统自编码器相比,稀疏自编码器具有以下优势:
- 特征解耦:能够将复杂的输入信号分解为独立的、可解释的特征组件
- 低冗余:通过稀疏性约束减少特征之间的相关性
- 可解释性:每个激活的特征对应输入数据的特定模式或概念
在Qwen3.5-9B-Base模型中,SAE被集成在Transformer的32个残差流(Residual stream)中,形成了一个覆盖全网络的解释性工具。
TopK稀疏自编码器核心架构
SAE-Res-Qwen3.5-9B-Base-W64K-L0_50采用了TopK稀疏自编码器架构,在每次前向传播中,仅保留50个非零特征,这种设计既保证了特征的稀疏性,又确保了足够的表达能力。
关键参数配置
| 参数 | 数值 | 说明 |
|---|---|---|
| 基础模型 | Qwen3.5-9B-Base | 基于Qwen3.5-9B-Base模型训练 |
| SAE宽度(d_sae) | 65536 | 自编码器隐藏层维度,即特征数量 |
| 隐藏层大小(d_model) | 4096 | 基础模型隐藏层维度 |
| 扩展因子 | 16× | SAE宽度与基础模型隐藏层大小的比值 |
| Top-K | 50 | 每次前向传播保留的非零特征数量 |
| 钩子点 | Residual stream | SAE在模型中的插入位置 |
| 覆盖层数 | 0 – 31 | 共32层Transformer |
| 文件格式 | PyTorch .pt | 模型权重存储格式 |
权重文件结构
每个检查点文件layer{n}.sae.pt是一个Python字典,包含四个张量:
| 键 | 形状 | 描述 |
|---|---|---|
W_enc |
(65536, 4096) |
编码器权重矩阵 |
W_dec |
(4096, 65536) |
解码器权重矩阵 |
b_enc |
(65536,) |
编码器偏置 |
b_dec |
(4096,) |
解码器偏置 |
项目中包含从layer0到layer31的32个SAE检查点文件,覆盖了Qwen3.5-9B-Base模型的所有Transformer层。
TopK稀疏激活机制
TopK稀疏自编码器的核心在于其独特的激活机制,具体实现过程如下:
-
编码器前向传播:将残差流输出通过编码器权重矩阵和偏置计算得到预激活值
pre_acts = residual @ W_enc.T + b_enc -
TopK选择:对预激活值进行TopK操作,选择激活值最高的50个特征
topk_vals, topk_idx = pre_acts.topk(50, dim=-1) -
稀疏化处理:创建与预激活值相同形状的零张量,仅保留TopK选择的特征值
acts = torch.zeros_like(pre_acts) acts.scatter_(-1, topk_idx, topk_vals)
这种机制确保了在每次前向传播中,只有50个特征被激活,实现了高度的稀疏性,同时通过选择激活值最高的特征,保证了模型能够捕捉输入数据中最关键的信息。
特征激活提取实战
要从Qwen3.5-9B-Base模型中提取SAE特征激活,可按照以下步骤操作:
1. 加载基础模型
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_name = "Qwen/Qwen3.5-9B-Base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float32)
model.eval()
2. 加载目标层的SAE
LAYER = 0 # 选择0-31中的任何层
sae = torch.load(f"layer{LAYER}.sae.pt", map_location="cpu")
W_enc = sae["W_enc"] # (65536, 4096)
b_enc = sae["b_enc"] # (65536,)
3. 定义特征激活提取函数
def get_feature_acts(residual: torch.Tensor) -> torch.Tensor:
"""residual: (..., 4096) → 稀疏特征激活 (..., 65536)"""
pre_acts = residual @ W_enc.T + b_enc
topk_vals, topk_idx = pre_acts.topk(50, dim=-1)
acts = torch.zeros_like(pre_acts)
acts.scatter_(-1, topk_idx, topk_vals)
return acts
4. 钩子捕获目标Transformer层的残差流
captured = {}
def _hook(module, input, output):
hidden = output[0] if isinstance(output, tuple) else output
captured["residual"] = hidden.detach().cpu()
hook = model.model.layers[LAYER].register_forward_hook(_hook)
5. 前向传播并提取特征激活
text = "The capital of France is"
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
model(**inputs)
hook.remove()
residual = captured["residual"] # (1, seq_len, 4096)
feature_acts = get_feature_acts(residual) # (1, seq_len, 65536)
# 检查最后一个token的激活特征
last_token_acts = feature_acts[0, -1] # (65536,)
active_idx = last_token_acts.nonzero(as_tuple=True)[0]
print(f"激活特征索引: {active_idx.tolist()}")
print(f"特征值: {last_token_acts[active_idx].tolist()}")
Gradio可视化工具使用
项目提供了一个Gradio演示工具app.py,可用于交互式探索SAE特征激活。要运行本地演示:
python app.py \
--model Qwen/Qwen3.5-9B-Base \
--model-name-sae-trained-from qwen3.5-9b-base \
--model-name-analyzing-now qwen3.5-9b \
--sae-path Qwen/SAE-Res-Qwen3.5-9B-Base-W64K-L0_50 \
--top-k 50 \
--num-layers 32 \
--sae-width 65536 \
--d-model 4096 \
--server-port 7860
通过Gradio界面,您可以:
- 输入文本并查看不同层的SAE特征激活
- 可视化特征激活热图
- 比较不同输入文本的特征激活差异
- 尝试特征引导生成,观察特定特征对模型输出的影响
应用场景与注意事项
SAE-Res-Qwen3.5-9B-Base-W64K-L0_50的应用场景包括:
- 可控推理控制:通过激活或抑制特定特征来引导模型输出
- 评估样本分布分析与比较:比较不同输入样本的特征激活模式
- 数据分类与合成:基于特征激活进行数据分类或生成新样本
- 模型训练与优化:利用提取的特征改进模型训练过程
使用时请注意:严禁将解释性工具用于非科学研究目的,以干扰模型能力,或制造、生成和传播违反公序良俗和社会主义核心价值观的有害信息,包括色情、暴力、歧视或煽动性内容。违者将自动终止授权,并承担由此产生的一切法律责任。
总结
SAE-Res-Qwen3.5-9B-Base-W64K-L0_50通过TopK稀疏自编码器架构,为Qwen3.5-9B-Base模型提供了强大的机制解释能力。其核心优势在于:
- 高稀疏性:每次前向传播仅激活50个特征,实现了特征的高度稀疏表示
- 全层覆盖:32个Transformer层均配备SAE,提供全网络的解释能力
- 易用性:提供了简单的API和Gradio可视化工具,方便研究人员使用
- 可扩展性:可用于模型优化、可控生成等多种下游任务
通过深入理解和应用这一稀疏自编码器模块,研究人员可以更好地理解大语言模型的内部工作机制,为模型改进和应用创新提供新的思路和工具。
要开始使用SAE-Res-Qwen3.5-9B-Base-W64K-L0_50,您可以克隆仓库:
git clone https://gitcode.com/hf_mirrors/Qwen/SAE-Res-Qwen3.5-9B-Base-W64K-L0_50
更多技术细节,请参考项目的技术报告和源代码。
更多推荐



所有评论(0)