HuggingFace镜像/SAE-Res-Qwen3.5-9B-Base-W64K-L0_100
模型介绍文件和版本分析
下载使用量0

Qwen-Scope:解码智能,释放潜能

Overview

我们荣幸地推出Qwen-Scope,这是一款基于Qwen3和Qwen3.5系列模型训练的可解释性模块。具体而言,我们在Qwen的隐藏层中集成并训练了稀疏自编码器(SAEs)。通过施加稀疏性约束,我们能够自动提取高度解耦、低冗余且可解释性显著增强的数据特征。Qwen-Scope不仅可用于分析Qwen行为的内部机制,在模型优化方面也具有巨大潜力。其应用场景包括可控推理控制、评估样本分布分析与比较、数据分类与合成以及模型训练与优化。更多详情请参见我们的技术报告。

模型详情

属性值
基础模型Qwen3.5-9B-Base
SAE 宽度 (d_sae)65536
隐藏层大小 (d_model)4096
扩展因子16×
Top-K100
钩子点残差流
覆盖层数0 – 31(共32层)
文件格式PyTorch .pt 字典

架构

这是一个TopK SAE——在每次前向传播中,恰好保留100个非零特征。

每个检查点文件 layer{n}.sae.pt 是一个包含四个张量的Python dict:

键形状描述
W_enc(65536, 4096)编码器权重矩阵
W_dec(4096, 65536)解码器权重矩阵
b_enc(65536,)编码器偏置
b_dec(4096,)解码器偏置

文件

本仓库包含每个Transformer层(0–31层)的一个SAE检查点:

layer0.sae.pt
layer1.sae.pt
...
layer31.sae.pt

特征激活提取

端到端演示:运行基础LLM,在选定层挂钩残差流,并提取稀疏SAE特征激活。 在大多数情况下,使用基于基础模型训练的SAE来探索训练后检查点的内部过程也是合理的。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# ── 1. Load base model ────────────────────────────────────────────────────────
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. Load SAE for a target layer ───────────────────────────────────────────
LAYER = 0  # choose any layer in 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,)

def get_feature_acts(residual: torch.Tensor) -> torch.Tensor:
    """residual: (..., 4096) → sparse feature activations (..., 65536)"""
    pre_acts = residual @ W_enc.T + b_enc
    topk_vals, topk_idx = pre_acts.topk(100, dim=-1)
    acts = torch.zeros_like(pre_acts)
    acts.scatter_(-1, topk_idx, topk_vals)
    return acts

# ── 3. Hook residual stream after the target transformer layer ────────────────
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)

# ── 4. Forward pass ───────────────────────────────────────────────────────────
text = "The capital of France is"
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
    model(**inputs)
hook.remove()

# ── 5. Extract feature activations ───────────────────────────────────────────
residual = captured["residual"]               # (1, seq_len, 4096)
feature_acts = get_feature_acts(residual)     # (1, seq_len, 65536)

# Inspect active features for the last token
last_token_acts = feature_acts[0, -1]         # (65536,)
active_idx = last_token_acts.nonzero(as_tuple=True)[0]
print(f"Active features : {active_idx.tolist()}")
print(f"Feature values  : {last_token_acts[active_idx].tolist()}")

Gradio 演示

我们还提供了一个 gradio 演示程序 app.py。您可以在本地运行它:

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_100 \
    --top-k 100 \
    --num-layers 32 \
    --sae-width 65536 \
    --d-model 4096 \
    --server-port 7860

注意事项

严禁将可解释性工具用于非科研目的以干扰模型能力,或编造、生成、传播违反公序良俗及社会主义核心价值观的有害信息,包括色情、暴力、歧视或煽动性内容。违规者将被自动终止授权,并承担由此产生的一切法律责任。本声明的最终解释权归项目所有者所有。

引用说明

如果您在研究中使用这些SAE,请引用:

@misc{qwen_scope,
      title={{Qwen-Scope}: Turning Sparse Features into Development Tools for Large Language Models},
      author={Boyi Deng and Xu Wang and Yaoning Wang and Yu Wan and Yubo Ma and Baosong Yang and Haoran Wei and Jialong Tang and Huan Lin and Ruize Gao and Tianhao Li and Qian Cao and Xuancheng Ren and Xiaodong Deng and An Yang and Fei Huang and Dayiheng Liu and Jingren Zhou},
      year={2026},
      eprint={2605.11887},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2605.11887},
}