Перейти к содержанию

На этой странице Содержит руководство по обучению и анализу разреженных автоэнкодеров (SAE) с использованием SAELens для декомпозиции активаций нейронных сетей в интерпретируемые признаки. Используйте, когда требуется обнаруживать интерпретируемые признаки, анализировать суперпозицию или изучать моносемантические представления в языковых моделях.

Метаданные навыка

Источник
Путь
Версия
Автор
Лицензия
Зависимости
Теги

Справочник: полный SKILL.md

info Ниже приведено полное определение навыка, которое Hermes загружает при его активации. Это то, что агент видит в качестве инструкций, когда навык активен.

SAELens: Разреженные автоэнкодеры для механистической интерпретируемости

SAELens — основная библиотека для обучения и анализа разреженных автоэнкодеров (SAE) — техники декомпозиции полисемантических активаций нейронных сетей в разреженные, интерпретируемые признаки. Основана на новаторских исследованиях Anthropic по моносемантичности. GitHub: jbloomAus/SAELens (более 1100 звёзд)

Проблема: полисемантичность и суперпозиция

Отдельные нейроны в нейронных сетях являются полисемантичными — они активируются в множестве семантически различных контекстов. Это происходит потому, что модели используют суперпозицию для представления большего количества признаков, чем у них есть нейронов, что затрудняет интерпретируемость. SAE решают эту проблему путем декомпозиции плотных активаций в разреженные, моносемантические признаки — обычно лишь небольшое количество признаков активируется для любого входного сигнала, и каждый признак соответствует интерпретируемому концепту.

Когда использовать SAELens

Используйте SAELens, когда вам нужно: * Обнаруживать интерпретируемые признаки в активациях модели * Понимать, какие концепты изучила модель * Изучать суперпозицию и геометрию признаков * Выполнять управление на основе признаков или абляцию * Анализировать признаки, связанные с безопасностью (обман, предвзятость, вредоносный контент)

Рассмотрите альтернативы, когда: * Вам нужен базовый анализ активаций → Используйте TransformerLens напрямую * Вы хотите проводить эксперименты по каузальному вмешательству → Используйте pyvene или TransformerLens * Нужно производственное управление → Рассмотрите прямую инженерию активаций

Установка

[code] pip install sae-lens

[/code] Требования: Python 3.10+, transformer-lens>=2.0.0

Основные концепции

Что изучают SAE

SAE обучаются реконструировать активации модели через разреженное узкое место: [code] Input Activation → Encoder → Sparse Features → Decoder → Reconstructed Activation
(d_model) ↓ (d_sae >> d_model) ↓ (d_model)
sparsity reconstruction
penalty loss

[/code] Функция потерь: MSE(original, reconstructed) + L1_coefficient × L1(features)

Ключевое подтверждение (исследование Anthropic)

В работе «Towards Monosemanticity» эксперты-оценщики обнаружили, что 70% признаков SAE действительно интерпретируемы. Найденные признаки включают: * Последовательности ДНК, юридический язык, HTTP-запросы * Текст на иврите, утверждения о питании, синтаксис кода * Тональность, именованные сущности, грамматические структуры

Рабочий процесс 1: Загрузка и анализ предобученных SAE

Пошаговая инструкция

[code] from transformer_lens import HookedTransformer
from sae_lens import SAE

# 1. Load model and pre-trained SAE  
model = HookedTransformer.from_pretrained("gpt2-small", device="cuda")  
sae, cfg_dict, sparsity = SAE.from_pretrained(  
    release="gpt2-small-res-jb",  
    sae_id="blocks.8.hook_resid_pre",  
    device="cuda"  
)

# 2. Get model activations  
tokens = model.to_tokens("The capital of France is Paris")  
_, cache = model.run_with_cache(tokens)  
activations = cache["resid_pre", 8]  # [batch, pos, d_model]

# 3. Encode to SAE features  
sae_features = sae.encode(activations)  # [batch, pos, d_sae]  
print(f"Active features: {(sae_features > 0).sum()}")

# 4. Find top features for each position  
for pos in range(tokens.shape[1]):  
    top_features = sae_features[0, pos].topk(5)  
    token = model.to_str_tokens(tokens[0, pos:pos+1])[0]  
    print(f"Token '{token}': features {top_features.indices.tolist()}")

# 5. Reconstruct activations  
reconstructed = sae.decode(sae_features)  
reconstruction_error = (activations - reconstructed).norm()

[/code]

Доступные предобученные SAE

Релиз Модель Слои
gpt2-small-res-jb GPT-2 Small Несколько остаточных потоков
gemma-2b-res Gemma 2B Остаточные потоки
Различные на HuggingFace Тег поиска saelens Различные
### Контрольный список
* Загрузите модель с TransformerLens
* Загрузите соответствующий SAE для целевого слоя
* Кодируйте активации в разреженные признаки
* Определите признаки с максимальной активацией для каждого токена
* Проверьте качество реконструкции

Рабочий процесс 2: Обучение пользовательского SAE

Пошаговая инструкция

[code] from sae_lens import SAE, LanguageModelSAERunnerConfig, SAETrainingRunner

# 1. Configure training  
cfg = LanguageModelSAERunnerConfig(  
    # Model  
    model_name="gpt2-small",  
    hook_name="blocks.8.hook_resid_pre",  
    hook_layer=8,  
    d_in=768,  # Model dimension

    # SAE architecture  
    architecture="standard",  # or "gated", "topk"  
    d_sae=768 * 8,  # Expansion factor of 8  
    activation_fn="relu",

    # Training  
    lr=4e-4,  
    l1_coefficient=8e-5,  # Sparsity penalty  
    l1_warm_up_steps=1000,  
    train_batch_size_tokens=4096,  
    training_tokens=100_000_000,

    # Data  
    dataset_path="monology/pile-uncopyrighted",  
    context_size=128,

    # Logging  
    log_to_wandb=True,  
    wandb_project="sae-training",

    # Checkpointing  
    checkpoint_path="checkpoints",  
    n_checkpoints=5,  
)

# 2. Train  
trainer = SAETrainingRunner(cfg)  
sae = trainer.run()

# 3. Evaluate  
print(f"L0 (avg active features): {trainer.metrics['l0']}")  
print(f"CE Loss Recovered: {trainer.metrics['ce_loss_score']}")

[/code]

Ключевые гиперпараметры

Параметр Типичное значение Эффект
d_sae 4–16× d_model Больше признаков, выше ёмкость
l1_coefficient 5e-5 до 1e-4 Выше = разреженнее, менее точно
lr 1e-4 до 1e-3 Стандартная скорость обучения
l1_warm_up_steps 500–2000 Предотвращает раннюю гибель признаков
### Метрики оценки
Метрика Цель Значение
--- --- ---
L0 50–200 Среднее количество активных признаков на токен
CE Loss Score 80–95% Восстановленная кросс-энтропия относительно оригинала
Dead Features <5% Признаки, которые никогда не активируются
Explained Variance >90% Качество реконструкции
### Контрольный список
* Выберите целевой слой и точку подключения
* Установите коэффициент расширения (d_sae = 4–16× d_model)
* Настройте L1-коэффициент для желаемой разреженности
* Включите прогрев L1 для предотвращения гибели признаков
* Отслеживайте метрики во время обучения (W&B)
* Проверьте восстановление L0 и CE loss
* Проверьте долю мёртвых признаков

Рабочий процесс 3: Анализ признаков и управление

Анализ отдельных признаков

[code] from transformer_lens import HookedTransformer
from sae_lens import SAE
import torch

model = HookedTransformer.from_pretrained("gpt2-small", device="cuda")  
sae, _, _ = SAE.from_pretrained(  
    release="gpt2-small-res-jb",  
    sae_id="blocks.8.hook_resid_pre",  
    device="cuda"  
)

# Find what activates a specific feature  
feature_idx = 1234  
test_texts = [  
    "The scientist conducted an experiment",  
    "I love chocolate cake",  
    "The code compiles successfully",  
    "Paris is beautiful in spring",  
]

for text in test_texts:  
    tokens = model.to_tokens(text)  
    _, cache = model.run_with_cache(tokens)  
    features = sae.encode(cache["resid_pre", 8])  
    activation = features[0, :, feature_idx].max().item()  
    print(f"{activation:.3f}: {text}")

[/code]

Управление признаками

[code] def steer_with_feature(model, sae, prompt, feature_idx, strength=5.0):
"""Add SAE feature direction to residual stream."""
tokens = model.to_tokens(prompt)

    # Get feature direction from decoder  
    feature_direction = sae.W_dec[feature_idx]  # [d_model]

    def steering_hook(activation, hook):  
        # Add scaled feature direction at all positions  
        activation += strength * feature_direction  
        return activation

    # Generate with steering  
    output = model.generate(  
        tokens,  
        max_new_tokens=50,  
        fwd_hooks=[("blocks.8.hook_resid_pre", steering_hook)]  
    )  
    return model.to_string(output[0])

[/code]

Атрибуция признаков

[code] # Which features most affect a specific output?
tokens = model.to_tokens("The capital of France is")
_, cache = model.run_with_cache(tokens)

# Get features at final position  
features = sae.encode(cache["resid_pre", 8])[0, -1]  # [d_sae]

# Get logit attribution per feature  
# Feature contribution = feature_activation × decoder_weight × unembedding  
W_dec = sae.W_dec  # [d_sae, d_model]  
W_U = model.W_U    # [d_model, vocab]

# Contribution to "Paris" logit  
paris_token = model.to_single_token(" Paris")  
feature_contributions = features * (W_dec @ W_U[:, paris_token])

top_features = feature_contributions.topk(10)  
print("Top features for 'Paris' prediction:")  
for idx, val in zip(top_features.indices, top_features.values):  
    print(f"  Feature {idx.item()}: {val.item():.3f}")

[/code]

Типичные проблемы и решения

Проблема: Высокая доля мёртвых признаков

[code] # WRONG: No warm-up, features die early
cfg = LanguageModelSAERunnerConfig(
l1_coefficient=1e-4,
l1_warm_up_steps=0, # Bad!
)

# RIGHT: Warm-up L1 penalty  
cfg = LanguageModelSAERunnerConfig(  
    l1_coefficient=8e-5,  
    l1_warm_up_steps=1000,  # Gradually increase  
    use_ghost_grads=True,   # Revive dead features  
)

[/code]

Проблема: Плохая реконструкция (низкое восстановление CE)

[code] # Reduce sparsity penalty
cfg = LanguageModelSAERunnerConfig(
l1_coefficient=5e-5, # Lower = better reconstruction
d_sae=768 * 16, # More capacity
)

[/code]

Проблема: Признаки не интерпретируемы

[code] # Increase sparsity (higher L1)
cfg = LanguageModelSAERunnerConfig(
l1_coefficient=1e-4, # Higher = sparser, more interpretable
)
# Or use TopK architecture
cfg = LanguageModelSAERunnerConfig(
architecture="topk",
activation_fn_kwargs={"k": 50}, # Exactly 50 active features
)

[/code]

Проблема: Ошибки памяти во время обучения

[code] cfg = LanguageModelSAERunnerConfig(
train_batch_size_tokens=2048, # Reduce batch size
store_batch_size_prompts=4, # Fewer prompts in buffer
n_batches_in_buffer=8, # Smaller activation buffer
)

[/code]

Интеграция с Neuronpedia

Просматривайте признаки предобученных SAE на neuronpedia.org: [code] # Features are indexed by SAE ID
# Example: gpt2-small layer 8 feature 1234
# → neuronpedia.org/gpt2-small/8-res-jb/1234

[/code]

Справочник ключевых классов

Класс Назначение
SAE Модель разреженного автоэнкодера
LanguageModelSAERunnerConfig Конфигурация обучения
SAETrainingRunner Менеджер цикла обучения
ActivationsStore Сбор и пакетирование активаций
HookedSAETransformer Интеграция TransformerLens + SAE
## Справочная документация
Подробную документацию по API, руководства и расширенное использование см. в папке references/:
Файл Содержание
--- ---
references/README.md Обзор и краткое руководство
references/api.md Полная справка по API для SAE, TrainingSAE, конфигураций
references/tutorials.md Пошаговые руководства по обучению, анализу, управлению
## Внешние ресурсы
### Руководства
* Базовая загрузка и анализ
* Обучение разреженного автоэнкодера
* Учебная программа ARENA по SAE

Статьи

Официальная документация

Архитектуры SAE

Архитектура Описание Сценарий использования
Standard ReLU + L1-штраф Общего назначения
Gated Изучаемый механизм стробирования Лучший контроль разреженности
TopK Ровно K активных признаков Постоянная разреженность
[code]
# TopK SAE (exactly 50 features active)
cfg = LanguageModelSAERunnerConfig(
architecture="topk",
activation_fn="topk",
activation_fn_kwargs={"k": 50},
)

[/code] * Метаданные навыка * Справочник: полный SKILL.md * Проблема: полисемантичность и суперпозиция * Когда использовать SAELens * Установка * Основные концепции * Что изучают SAE * Ключевое подтверждение (исследование Anthropic) * Рабочий процесс 1: Загрузка и анализ предобученных SAE * Пошаговая инструкция * Доступные предобученные SAE * Контрольный список * Рабочий процесс 2: Обучение пользовательского SAE * Пошаговая инструкция * Ключевые гиперпараметры * Метрики оценки * Контрольный список * Рабочий процесс 3: Анализ признаков и управление * Анализ отдельных признаков * Управление признаками * Атрибуция признаков * Типичные проблемы и решения * Проблема: Высокая доля мёртвых признаков * Проблема: Плохая реконструкция (низкое восстановление CE) * Проблема: Признаки не интерпретируемы * Проблема: Ошибки памяти во время обучения * Интеграция с Neuronpedia * Справочник ключевых классов * Справочная документация * Внешние ресурсы * Руководства * Статьи * Официальная документация * Архитектуры SAE