Qwen · HF · 通义

Qwen/SAE-Res-Qwen3.5-35B-A3B-Base-W128K-L0_100

Qwen/SAE-Res-Qwen3.5-35B-A3B-Base-W128K-L0_100

二〇二六年六月六日 · 英文原文

Qwen Team 发布 Qwen-Scope,一个基于 Qwen3 与 Qwen3.5 训练的 interpretability 模块,在 Qwen hidden layers 集成 Sparse Autoencoders。其基础模型为 Qwen3.5-35B-A3B,覆盖 0–39 层,d_sae 为 131072,d_model 为 2048,Top-K 为 100,并提供 PyTorch checkpoint、特征激活提取示例、Gradio demo 与 technical report。

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

概览

我们很高兴介绍 Qwen-Scope,这是一个基于 Qwen3 和 Qwen3.5 系列模型训练的 interpretability(可解释性)模块。具体而言,我们在 Qwen 的 hidden layers 中集成并训练了 Sparse Autoencoders(SAEs)。通过引入 sparsity 约束,我们可以自动提取高度解耦、低冗余且可解释性显著更强的数据特征。Qwen-Scope 不仅可用于分析 Qwen 行为的内部机制,也在模型优化方面具有很大潜力。应用场景包括可控 inference 控制、evaluation 样本分布分析与比较、数据分类与合成,以及模型训练与优化。更多细节请参见我们的 technical report

模型详情

属性
基础模型 Qwen3.5-35B-A3B
SAE 宽度(d_sae 131072
Hidden size(d_model 2048
扩展因子 64×
Top-K 100
Hook 点 Residual stream
覆盖层 0 – 39(共 40 层)
文件格式 PyTorch .pt dict

架构

这是一个 TopK SAE——在每次 forward pass 中,恰好保留 100 个非零特征。

每个 checkpoint 文件 layer{n}.sae.pt 都是一个包含四个 tensor 的 Python dict

Key 形状 描述
W_enc (131072, 2048) Encoder 权重矩阵
W_dec (2048, 131072) Decoder 权重矩阵
b_enc (131072,) Encoder bias
b_dec (2048,) Decoder bias

文件

该仓库为每个 transformer layer(第 0–39 层)提供一个 SAE checkpoint:

layer0.sae.pt
layer1.sae.pt
...
layer39.sae.pt

特征激活提取

端到端 demo:运行基础 LLM,在选定层 hook residual stream,并提取稀疏 SAE 特征激活。 在大多数情况下,使用基于 base models 训练的 SAEs 来探索 post-training checkpoints 的内部过程也是合理的。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# ── 1. Load base model ────────────────────────────────────────────────────────
model_name = "Qwen/Qwen3.5-35B-A3B"
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–39
sae = torch.load(f"layer{LAYER}.sae.pt", map_location="cpu")
W_enc = sae["W_enc"]  # (131072, 2048)
b_enc = sae["b_enc"]  # (131072,)

def get_feature_acts(residual: torch.Tensor) -> torch.Tensor:
    """residual: (..., 2048) → sparse feature activations (..., 131072)"""
    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, 2048)
feature_acts = get_feature_acts(residual)     # (1, seq_len, 131072)

# Inspect active features for the last token
last_token_acts = feature_acts[0, -1]         # (131072,)
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 Demo

我们还提供了一个 gradio demo app.py。你可以在本地运行:

python app.py \
    --model Qwen/Qwen3.5-35B-A3B \
    --model-name-sae-trained-from qwen3.5-35b-a3b-base \
    --model-name-analyzing-now qwen3.5-35b-a3b \
    --sae-path Qwen/SAE-Res-Qwen3.5-35B-A3B-Base-W128K-L0_100 \
    --top-k 100 \
    --num-layers 40 \
    --sae-width 131072 \
    --d-model 2048 \
    --server-port 7860

注意事项

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

引用

如果你在研究中使用这些 SAEs,请引用:

@misc{qwen_scope,
    title = {{Qwen-Scope}: Turning Sparse Features into Development Tools for Large Language Models},
    url = {https://qianwen-res.oss-accelerate.aliyuncs.com/qwen-scope/Qwen_Scope.pdf},
    author = {{Qwen Team}},
    month = {April},
    year = {2026}
}
译自 Qwen · HF · 通义 · 录于 二〇二六年六月六日