Хабр, привет! Меня зовут Андрей Галичин, я младший научный сотрудник группы «Доверенные и безопасные интеллектуальные системы» в Институте AIRI, инженер‑исследователь в лаборатории безопасного искусственного интеллекта SAIL AIRI‑МТУСИ, а также аспирант Сколтеха. Мы с коллегами занимаемся интерпретируемостью больших языковых моделей. В январе этого года, когда все обсуждали впечатляющие результаты новой рассуждающей языковой модели DeepSeek‑R1 (подробный разбор статьи от моего коллеги Антона Разжигаева можно найти здесь), мы задались вопросом: а что на самом деле происходит внутри этих моделей, когда они «думают»?
Главная особенность таких моделей — это способность к рефлексии, самопроверке и сомнениях в своих рассуждениях, которые магическим образом возникают в процессе обучения (“aha moment”) и выражаются в использовании моделью человекоподобных фраз типа “Wait”, “Alternatively” и других. Однако никто толком не разбирался, откуда они берутся и зачем нужны (работает — не трогай!).

Именно на эти вопросы мы и попытались ответить в нашей новой статье "I Have Covered All the Bases Here: Interpreting Reasoning Features in Large Language Models via Sparse Autoencoders". Мы обнаружили, что эти фразы — не просто декорация, а действительно важные для модели вещи. Мы спустились на уровень скрытых представлений модели и нашли механизмы, отвечающие за рассуждающие способности. Более того, мы научились их контролировать — усиливая нужные компоненты, мы смогли заставить модель рассуждать глубже и точнее!
В этой статье я коротко расскажу про наши главные выводы.

Как модель думает?
Как я говорил, первое, что бросилось в глаза при просмотре ответов DeepSeek‑R1, — она постоянно использует определенные слова: "wait", "maybe", "but", "alternatively", "however". Мы предположили, что именно при помощи них модель сигнализирует о моментах неуверенности, переосмысления, поиска альтернатив. Проделав более глубокий анализ её ответов, мы составили небольшой словарь рассуждений.

Хорошо, словарь у нас есть. Но как проверить, что эти слова действительно важны для модели, а не просто декоративная «приправа» к рассуждениям? Мы решили провести простой эксперимент: а что будет, если просто запретить модели использовать слова из нашего словаря во время генерации?
Результат оказался впечатляющим! При запрете качество модели на математических бенчмарках падает очень заметно, равно как и средняя длина рассуждений! На AIME 2024 качество упало аж на 26.6%, а длина рассуждений сократилась практически на 3,500 токенов — с 12,400 до 9,100. При этом аналогичный эксперимент с запретом случайных слов практически не повлиял на качество.

Стало ясно: эти слова — не просто словесный мусор, а что‑то гораздо более важное и отражающее реальные внутренние процессы модели. Но главный вопрос оставался нерешённым: что происходит внутри модели, когда она генерирует эти слова?
Sparse Autoencoders: рентген для нейросетей
Чтобы заглянуть внутрь модели, мы использовали Sparse Autoencoders (SAE) — технику, которую можно сравнить с рентгеном для нейронных сетей. Суть в том, что SAE позволяет разложить активации модели на интерпретируемые фичи. Вместо того, чтобы смотреть на непонятные представления языковой модели на каком‑то слое, мы получаем разреженные фичи, каждая из которых (теоретически) соответствует какому‑то конкретному человеческому концепту.
Мы обучили SAE на представлениях DeepSeek‑R1-Llama-8B (рассуждающей модели, полученной путем дистилляции reasoning‑трейсов R1) и получили порядка 65,000 фичей. Но как из этого океана найти те, что отвечают за рассуждения?
Ищем иголку в стоге сена
Здесь пригодился наш собранный ранее словарь, на основе которого мы разработали метрику ReasonScore. Основная идея проста: если фича действительно отвечает за рассуждения, она должна появляться именно тогда, когда модель генерирует слова из нашего словаря. Дополнительно к этому мы добавили несколько хитростей:
Анализировали не только отдельные слова, но и контекст вокруг них (±2–3 токена) — ведь рассуждения это непрерывный процесс, а не точка.
Фильтровали фичи, которые активируются не только на одном‑двух словах из словаря, а захватывают большое множество.
В итоге из 65,536 фичей мы отобрали топ-200 кандидатов с самым высоким ReasonScore. Но действительно ли они отвечают за рассуждения?
Ручная работа: проверяем каждую фичу
Началась самая кропотливая часть исследования. Для каждой из 200 фичей мы вручную изучали контексты, в которых она активируется и как влияет на предсказания следующего токена модели.
Результаты получились довольно веселыми! Посмотрите на примеры: фича #4395 активируется на фразах "But how to verify this" и "But wait, maybe the constant", фича #25953 срабатывает на "Wait, here's another idea" и "Alternatively, maybe the formula". Это четкие паттерны неуверенности, поиска альтернатив и рефлексии!

В итоге из 200 кандидатов мы выделили 46 фичей, которые, по нашему мнению, действительно соответствуют различным аспектам рассуждений. Для проверки мы также использовали автоматическую интерпретацию с GPT-4o — результаты подтвердили нашу ручную разметку:

Фичи сгруппировались в понятные категории: «неуверенность», «исследование методов», «самокоррекция», «логическая организация» и другие. Только 5 из 46 попали в размытую категорию «другое поведение».
Усиливают ли наши фичи способности модели?
Несмотря на довольно завораживающие картинки активаций, настоящей проверкой было бы доказать каузальность. Если эти фичи действительно отвечают за размышления, то их усиление в процессе генерации ответов должно улучшать способности модели к рассуждению.
Мы провели steering‑эксперименты — искусственно усиливали найденные фичи во время генерации и измеряли качество и длину ответов на математических бенчмарках.

Результаты получились довольно хорошими! Усиление лучших фичей дало прирост по качеству, причем модель стала генерировать более длинные и детальные трейсы — на 13–20% больше токенов. Вот пример того, что происходило при усилении:

Без steering: стандартное решение на 1500 токенов. Со steering: развернутое рассуждение на 2000+ токенов с финальной фразой "I think I've covered all the bases here", которая указывает на уверенность модели в тщательности своего анализа.
Это как включить режим глубокого размышления в модели!
Когда появляется способность рассуждать?
Последний важный вопрос: когда именно появляются эти reasoning‑фичи? Может, они есть в любой большой языковой модели?
Чтобы проверить это, мы сравнили фичи SAE, обученные на разных комбинациях моделей и данных
S: базовая модель + базовые данные (со стадии pre‑train)
D: базовая модель + выборка на основе ответов DeepSeek‑R1
M: reasoning модель + базовые данные
F: reasoning модель + выборка на основе ответов DeepSeek‑R1

Результат был однозначным: рассуждающие фичи появляются только на финальной стадии — когда есть и рассуждающая модель, и соответствующие данные! В базовой модели их практически нет (0–4% наших проверенных фичей), только рассуждающие данные дают 4%, только рассуждающая модель — 0%. А вот полная комбинация — 51–60% фичей.
Это означает, что способность к рассуждению — не свойство модели, а специфически выученное поведение в результате дообучения!
Заключение
В нашей работе мы увидели конкретные механизмы внутри модели, отвечающие за различные аспекты мышления. Конечно, это только начало. В нашей работе мы анализировали один слой одной модели, только 23% кандидатов оказались четко интерпретируемыми, а ещё не стоит забывать, что SAE — все еще не идеальный механизм для анализа. Но направление задано!
Jedy
тоже заметил, что рассуждения DeepSeek почти всегда начинаются со слов вроде:
Особенно его "Ох" и "Ах" на мои вопросы про квантовую механику и философию Сартра меня просто умиляют и веселят.
Тоже пришел к выводу, что это не просто так и видимо именно такой "эмоциональный" подход как раз позволяет ему лучше думать находя более статистические интересные цепочки токенов. Ведь обычно в текстах книг и статей, после таких слов действительно идут какие то глубокие интересные рассуждения