Sparse Autoencoders (SAE)
Разреженный автоэнкодер (SAE) разделяет активации сети на множество признаков, из которых одновременно активны лишь немногие; это ключевой инструмент для интерпретации LLM.
Разреженный автоэнкодер (SAE) — это автоэнкодер, обученный восстанавливать входные данные через скрытый слой, в котором для каждого конкретного входа активны лишь несколько нейронов. В современных исследованиях ИИ SAE обучают на внутренних активациях большой языковой модели (LLM) или модели зрения; скрытых нейронов при этом значительно больше, чем измерений входных данных, поэтому каждый нейрон, называемый признаком или латентным представлением, обычно срабатывает на одну распознаваемую человеком концепцию. SAE — основной инструмент механистической интерпретируемости: в работе Anthropic Scaling Monosemanticity за 2024 год обучили SAE с числом признаков до 34 миллионов на активациях Claude 3 Sonnet и обнаружили признаки таких концепций, как мост Золотые Ворота, ошибки в коде и обман.
Чем полезны разреженные признаки для интерпретируемости#
Отдельные нейроны в крупных моделях часто полисемантичны и реагируют на несколько не связанных между собой концепций. Гипотеза суперпозиции, изученная в работе Anthropic Toy Models of Superposition, объясняет почему: слой с d измерениями может представлять гораздо больше d концепций как почти ортогональные направления, если в каждый момент активно лишь несколько из них. SAE ищет такое избыточное множество направлений. Его разреженный код для активации показывает, какие из этих немногих направлений присутствуют и насколько они выражены; это гораздо проще анализировать, чем тысячи смешанных значений нейронов.
Как работает разреженный автоэнкодер#
Кодировщик преобразует вектор активаций в гораздо более широкий вектор латентных представлений, после чего применяется ReLU. Декодировщик восстанавливает активацию как взвешенную сумму своих столбцов, каждый из которых задаёт направление отдельного признака. Обучение минимизирует ошибку реконструкции и одновременно соблюдает ограничение разреженности. Классический вариант — штраф L1 на латентные представления, то есть разновидность регуляризации; SAE TopK от OpenAI оставляют только k крупнейших латентных значений для каждого входа и масштабированы до SAE с 16 миллионами латентных значений на активациях GPT-4; JumpReLU SAE от Google DeepMind обнуляют все латентные значения ниже обучаемого порога. После обучения латентные представления SAE применяют двумя основными способами:
В приведённом ниже упрощённом примере 64 известных направления признаков упакованы в 32 измерения, поэтому ни одно измерение не соответствует одному признаку; затем обучается SAE TopK, чтобы восстановить эти признаки:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Toy activations: 64 feature directions packed into 32 dimensions (superposition), ~3 active per sample
features = F.normalize(torch.randn(64, 32), dim=1)
acts = (torch.rand(8192, 64) * (torch.rand(8192, 64) < 0.05)) @ features
encoder, decoder = torch.nn.Linear(32, 256), torch.nn.Linear(256, 32) # 256 latents: 8x overcomplete
optimizer = torch.optim.Adam([*encoder.parameters(), *decoder.parameters()], lr=1e-3)
for step in range(3000):
# TopK sparsity: keep each sample's 4 largest latents and zero the rest
values, idx = encoder(acts).topk(4, dim=-1)
latents = torch.zeros(len(acts), 256).scatter(-1, idx, F.relu(values))
loss = (decoder(latents) - acts).pow(2).sum(-1).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
directions = F.normalize(decoder.weight.T, dim=1) # one learned direction per latent
print(f"Unexplained variance: {loss.item() / (acts - acts.mean(0)).pow(2).sum(-1).mean().item():.3f}")
print(f"Features matching a single neuron: {(features.abs().max(dim=1).values > 0.9).sum().item()} of 64")
print(f"Features matching an SAE latent: {((directions @ features.T).max(dim=0).values > 0.9).sum().item()} of 64")При не более чем 4 активных латентных представлениях на образец SAE не объясняет 7,1% дисперсии. Ни один из 64 заложенных признаков не совпадает с отдельным входным измерением с косинусным сходством выше 0,9, тогда как все 64 совпадают с направлением декодера для какого-либо латентного представления SAE.
Применение#
- Поиск признаков: Исследователи присваивают каждому латентному представлению метку, собирая входные данные, которые активируют его сильнее всего; часто метку формирует LLM. Затем признаки используют для аудита того, что представляет модель.
- Управление: Если зафиксировать признак на высоком значении, поведение модели изменится — примерно так же, как при добавлении вектора управления. В мае 2024 года Anthropic ненадолго выпустила Golden Gate Claude — версию, в которой признак моста был усилен, поэтому мост возникал почти в каждом ответе.
- Трассировка вычислительных цепочек: В атрибуционных графах Anthropic за 2025 год используются межслойные транскодеры — вариант SAE, который считывает активации одного слоя и восстанавливает выходы последующих слоёв MLP, чтобы отслеживать многоэтапные вычисления внутри Claude 3.5 Haiku.
- Открытые наборы SAE: В Google DeepMind Gemma Scope выпустили JumpReLU SAE для каждого слоя Gemma 2 2B и 9B, а Gemma Scope 2 добавляет SAE и транскодеры для моделей Gemma 3 с числом параметров от 270M до 27B. Библиотека SAELens обучает и загружает такие SAE.
- Модели зрения: SAE, обученные на активациях CLIP и Vision Transformer, также обнаруживают интерпретируемые визуальные концепции. Для SAE нужен набор данных с векторами активаций, а
model.embed()в Ultralytics YOLO26 возвращает усреднённый пулингом вектор активации для каждого изображения с любого слоя; по умолчанию используется предпоследний слой.
Ограничения#
SAE восстанавливают активации неидеально, и замена активаций слоя их реконструкцией измеримо увеличивает функцию потерь модели. Обнаруживаемые признаки зависят от размера словаря и запуска обучения: в более широких SAE один признак разделяется на несколько более тонких, а некоторые латентные представления вообще не активируются. В марте 2025 года команда Google DeepMind по интерпретируемости сообщила, что классификаторы на основе признаков SAE уступали обычным линейным классификаторам при обнаружении вредоносных намерений в запросах вне обучающего распределения. Команда заявила, что снижает приоритет фундаментальных исследований SAE, но продолжит использовать SAE как один из нескольких инструментов.
SAE и смежные понятия#
- Обычный автоэнкодер: Сжимает данные через узкое место, размер которого меньше размера входных данных, чтобы выполнить сжатие или снижение размерности. SAE расширяет скрытый слой и обеспечивает разреженность, чтобы разделить концепции.
- Линейный классификатор-проба: Обучает классификатор с учителем распознавать одну заранее выбранную концепцию. SAE — это обучение без учителя; оно обнаруживает признаки без меток.
- Инженерия представлений (RepE): Находит направления концепций, сопоставляя активации для парных запросов, тогда как признаки SAE получают только из реконструкции.
- Разреженное кодирование: Более старый метод обучения словаря, который SAE аппроксимируют за один проход кодировщика, вместо оптимизации для каждого входа. Ольсхаузен и Филд (1996) показали, что разреженный код, обученный на естественных изображениях, создаёт локализованные фильтры, ориентированные на края и напоминающие рецептивные поля простых клеток первичной зрительной коры.










