ARENA: путеводитель по практикуму
Путеводитель по программе ARENA (Alignment Research Engineer Accelerator): пять глав ноутбуков с тестами — основы, трансформеры и механистическая интерпретируемость, RL и RLHF, оценка LLM и агенты, наука о выравнивании; карта наборов упражнений к урокам курса, пересказ вводных частей главы 1 (трансформер с нуля и введение в TransformerLens) и как запускать на 4× RTX 4080.
Что это и для кого
Заголовок раздела «Что это и для кого»ARENA (Alignment Research Engineer Accelerator) — очная программа подготовки инженеров-исследователей в области безопасности ИИ, материалы которой выложены в открытый доступ. Это не лекции, а ноутбуки с упражнениями: вы пишете функции по описанию, а встроенные тесты сразу проверяют результат. К каждому набору есть решения, а у большинства — лекция-видео. Главный автор — Каллум Макдугалл; глава о трансформерах и интерпретируемости во многом основана на ноутбуках и видео Нила Нанды, автора библиотеки TransformerLens.
На странице «Учимся у создателей» ARENA названа лучшим практикумом по интерпретируемости. Для нашего ученика это практика к ступеням 4, 6, 7 и 9: собрать GPT-2 своими руками, найти индукционные головы, обучить разреженный автоэнкодер, написать DQN, PPO и RLHF, построить оценку и агента.
Чего ждать по уровню: упражнения рассчитаны на людей, уверенно знающих Python и PyTorch. У каждого упражнения есть оценка сложности и важности по пятибалльной шкале и ориентир по времени. Авторы прямо советуют пропускать неважные упражнения и подглядывать в решения, если застряли, — «чтобы скорее добраться до интересного».
Карта материалов
Заголовок раздела «Карта материалов»flowchart LR C0["Гл. 0. Основы: einops, CNN и ResNet, оптимизация, backprop, VAE и GAN"] --> C1["Гл. 1. Трансформеры и интерпретируемость"] C0 --> C2["Гл. 2. RL: бандиты → DQN → VPG → PPO → RLHF, MCTS"] C1 --> C2 C1 --> C3["Гл. 3. Оценка LLM и агенты"] C1 --> C4["Гл. 4. Наука о выравнивании"]
Глава 0. Основы
Заголовок раздела «Глава 0. Основы»| Набор | О чём | Урок курса |
|---|---|---|
| 0.0 Предварительные знания | что нужно знать по математике и Python; упражнения на einops и einsum | 0.3.1–0.3.2, ступень 1 |
| 0.1 Трассировка лучей | разминка на тензорных операциях: батчевые вычисления без циклов | ступень 0.3 |
| 0.2 CNN и ResNet | свои свёртки 1D и 2D, сборка ResNet, загрузка весов, дообучение | 3.5.1–3.5.2, 3.4.2 |
| 0.3 Оптимизация | SGD, momentum, Adam своими руками, подбор гиперпараметров с Weights & Biases | 1.4.2, 3.3.3 |
| 0.4 Backprop | свой механизм автоматического дифференцирования | модуль 3.2 |
| 0.5.1–0.5.2 VAE и GAN | порождающие модели на картинках | 9.1.3 |
Глава 1. Трансформеры и интерпретируемость
Заголовок раздела «Глава 1. Трансформеры и интерпретируемость»| Набор | О чём | Урок курса | Статус |
|---|---|---|---|
| 1.1 Трансформер с нуля | GPT-2 на чистом PyTorch, обучение, сэмплирование, KV-кэш | 4.5.1, 4.6.2–4.6.4 | обязательно |
| 1.2 Введение в механистическую интерпретируемость | TransformerLens, индукционные головы, хуки, обратная разработка цепей по весам | 9.3.1 | обязательно |
| 1.3.1 Линейные пробы | зонды (линейный зондлинейный зондEN linear probeЛогистическая или линейная регрессия на замороженных активациях модели. Показывает, что свойство линейно извлекаемо, но не доказывает, что модель его использует.) на «геометрию истины» и обман | 9.3.1 | по выбору |
| 1.3.2 Векторы функций и управление | векторы задач из in-context learning, steering, библиотека nnsight | 9.3.1 | по выбору |
| 1.3.3 Интерпретируемость с SAE | SAELens и Neuronpedia, поиск понятий с разреженными автоэнкодерами | 9.3.2 | по выбору |
| 1.3.4 Activation Oracles | модели, которые отвечают на вопросы об активациях другой модели | 9.3.2 | по выбору |
| 1.4.1 Indirect Object Identification | цепь, которая дописывает «Джон и Мэри пошли в магазин, Джон отдал сумку…» → «Мэри» в GPT-2 small; patching и абляции | 9.3.1 | по выбору, рекомендован |
| 1.4.2 Цепи из SAE | связи латентов SAE между слоями, транскодеры | 9.3.2 | по выбору |
| 1.5.1 Классификатор скобок | обратная разработка маленькой модели, проверяющей баланс скобок | 9.3.1 | по выбору, самый лёгкий |
| 1.5.2 Grokking и модульная арифметика | однослойный трансформер складывает по модулю через преобразование Фурье | 9.3.1; само явление — 11.4.1 и ДЗ s11-hw06-grokking | по выбору |
| 1.5.3 OthelloGPT | модель, обученная на ходах «Отелло», хранит доску внутри | 9.3.1 | по выбору |
| 1.5.4 Игрушечные модели суперпозиции и SAE | теория суперпозиции (суперпозиция признаковсуперпозиция признаковEN superpositionМодель хранит больше признаков, чем у неё измерений, раскладывая их по почти ортогональным направлениям. Работает, пока признаки редко активны одновременно.) и SAE на игрушечных моделях | 9.3.2 | по выбору |
Рекомендованный порядок с домашней страницы главы: из 1.1 обязательны разделы 1 и 2 (свой трансформер), из 1.2 — разделы 1–3; дальше — что интересно. Из необязательного сильнее всего советуют 1.5.1 (легче остальных), 1.4.1 (лучшее введение в интерпретируемость через цепи) и самый подробный практический набор по SAE. Большинство наборов занимают 1–3 дня.
Глава 2. Обучение с подкреплением
Заголовок раздела «Глава 2. Обучение с подкреплением»| Набор | О чём | Урок курса |
|---|---|---|
| 2.1 Введение в RL | бандиты и табличные методы по Саттону и Барто | 6.0.1, 6.0.2 |
| 2.2.1 DQN | Deep Q-Network на CartPole | 6.0.2 |
| 2.2.2 VPG | «ванильный» градиент политики — основа PPO | 6.0.3 |
| 2.3 PPO | свой PPO: CartPole за ~30 секунд, формирование награды, Atari и MuJoCo | 6.0.3 |
| 2.4 RLHF | PPO для своего трансформера из главы 1: буфер, фазы rollout и обучения, RLHFTrainer | 6.3.2 |
| 2.5 MCTS и AlphaZero | поиск по дереву Монте-Карло с моделью среды | — |
Глава 3. Оценка LLM
Заголовок раздела «Глава 3. Оценка LLM»Сделана вместе с Apollo Research. Нужен платный API (OpenAI или Anthropic) — дешёвая замена описана на странице «Учимся у создателей»: локальная модель через OpenAI-совместимый сервер.
| Набор | О чём | Урок курса |
|---|---|---|
| 3.1 Введение в оценки | модель угроз и спецификация свойства, которое меряем (пример — стремление к власти) | 7.3.1, 9.3.4 |
| 3.2 Генерация набора данных | ~300 вопросов с помощью LLM, их оценка и фильтрация, проверка на смещения | 7.3.1 |
| 3.3 Запуск оценок в Inspect | библиотека UK AISI: CoT или нет, сколько примеров в промпте и т. д. | 7.3.2 |
| 3.4 LLM-агенты | агент для арифметики, затем агент для «Википедийной гонки»; методы выявления способностей | 8.3.1, 8.3.2 |
| 3.5 AI Control | протоколы контроля: «красная» и «синяя» команды, мониторинг бэкдоров в коде | 9.3.4 |
Глава 4. Наука о выравнивании
Заголовок раздела «Глава 4. Наука о выравнивании»Самая новая глава: 4.1 эмерджентное рассогласование (после дообучения на небезопасном коде модель становится «плохой» в целом); 4.2 наука о рассогласовании; 4.3 интерпретация рассуждающих моделей («якоря мыслей» — предложения цепочки рассуждений, сильнее всего влияющие на ответ); 4.4 «психология» LLM и векторы персоны; 4.5 агенты- исследователи. Это материал к уроку 9.3.3 и дальше — для тех, кто хочет заниматься исследованиями.
Пересказ вводных частей главы 1
Заголовок раздела «Пересказ вводных частей главы 1»1.1 Трансформер с нуля: вступление
Заголовок раздела «1.1 Трансформер с нуля: вступление»Набор — это «чистая» реализация GPT-2 на PyTorch с нуля, архитектурно повторяющая библиотеку TransformerLens, с которой дальше идёт вся глава. Материал основан на серии видео Нила Нанды. Четыре раздела:
- Входы и выходы трансформера. Зачем он нужен — моделировать текст; что такое причинное внимание; токенизация; логиты и как получить из них распределение по словарю.
- Чистая реализация. Трансформер собирается по модулям, как ResNet в главе 0, и в конце в него загружаются готовые веса GPT-2, чтобы сверить ответы с эталоном.
- Обучение. Цикл обучения на наборе коротких историй; падение кросс-энтропии объясняется через свойства данных (сначала модель выучивает частоты биграмм).
- Сэмплирование. Жадный выбор, температура, штраф за частоту, top-k, top-p, лучевой поиск и KV-кэш. Вторую половину раздела авторы разрешают пропустить.
Зачем вообще трансформер. Авторы начинают с короткой формулы: трансформеры существуют, «чтобы моделировать текст». Модель в стиле GPT-2 получает последовательность и выдаёт распределение вероятностей следующего токена; сэмплируя из него и дописывая токен в конец, получаем генерацию. Важная деталь обучения: из последовательности длины модель делает предсказаний сразу — по одному на каждый префикс, . Поэтому обучение такое эффективное. Чтобы модель не «подглядывала» в токен, который должна предсказать, внимание делают причинным (причинная (каузальная) маскапричинная (каузальная) маскаEN causal maskЗапрещает токену смотреть на будущие позиции — оценки выше диагонали заменяются на −∞ до softmax. Нужна, чтобы GPT-подобная модель училась предсказывать следующий токен на всех позициях сразу.): информация течёт только вперёд.
Авторы предлагают образ, который стоит запомнить: очередь людей, у каждого по слову. Каждый может спросить что-то у стоящих позади, но не у стоящих впереди, и должен угадать слово человека перед собой.
Архитектура в терминах интерпретируемости. Главный объект — остаточный поток (остаточный потокостаточный потокEN residual streamВектор шириной d, который течёт сквозь все блоки. Каждый подслой читает из него и дописывает поправку, так что выход = вход + сумма всех поправок.): сумма выходов всех предыдущих слоёв, она же вход каждого следующего. Через него модель «помнит», передаёт информацию между слоями и хранит то, что внимание переносит между позициями. Отсюда — logit lens (logit lenslogit lens («логит-линза»)EN logit lensПрименить финальную нормализацию и LM-голову к остаточному потоку промежуточного слоя — «что модель предсказала бы, если бы остановилась здесь» (nostalgebraist, 2020).): поток посреди модели можно сразу перевести в распределение по токенам, и предсказания поздних слоёв оказываются на удивление осмысленными.
- Внимание — единственная часть трансформера, которая переносит информацию между позициями. Головы слоя работают независимо, их выходы складываются в поток. Каждая голова строит шаблон внимания (паттерн вниманияпаттерн вниманияEN attention patternМатрица весов внимания одной головы размера T×T; строка i показывает, как позиция-запрос i распределила внимание между позициями 0…i.) — распределение по предыдущим токенам — и одинаково переносит информацию от каждого источника к каждому получателю. Аналогия Q/K/V из ARENA: запрос — «ищу имя, встретившееся раньше»; ключ — «я имя», например «Мэри»; значение — само имя, то, что реально переносится. Ещё одна интуиция: внимание — это «обобщённая свёртка», которая не навязывает локальность, а сама решает, какие токены важны друг для друга.
- MLP работает с каждой позицией отдельно и одинаково, ничего не перенося. Когда внимание собрало нужное в одну позицию, MLP «думает»: вычисляет, ищет факты. Обычно на MLP приходится большая часть параметров (часто около 2/3). Полезная интуиция — MLP как пары «ключ → значение»: столбцы — входные направления нейронов, строки — выходные; нейрон, «узнав» свой признак, дописывает в поток своё выходное направление. Что именно происходит внутри MLP — по словам авторов, большая открытая проблема интерпретируемости.
- Дальше — LayerNorm, эмбеддинги токенов и позиций и «разэмбеддинг» , переводящий поток в логиты.
1.2 Введение в механистическую интерпретируемость: вступление
Заголовок раздела «1.2 Введение в механистическую интерпретируемость: вступление»Набор знакомит с библиотекой TransformerLens. Нил Нанда, её автор, объясняет во вступлении, зачем её написал: цель механистической интерпретируемости (механистическая интерпретируемостьмеханистическая интерпретируемостьEN mechanistic interpretabilityОбратная разработка обученной нейросети — поиск внутри неё понятных алгоритмов (схем) и доказательство вмешательством, что модель действительно их использует.) — взять обученную модель и по её весам восстановить алгоритмы, которые она выучила; инструментов, чтобы использовать и обучать модели, много, а чтобы заглядывать внутрь — мало. Главный принцип библиотеки — короткий цикл «идея эксперимента → результат», чтобы исследование «ощущалось как игра».
Сквозная тема набора — индукционные цепи: простейший механизм обучения в контексте. Четыре раздела:
- Введение в TransformerLens — загрузка
HookedTransformer, токенизатор, кэш всех активаций, визуализация шаблонов внимания библиотекойcircuitsvis. - Поиск индукционных голов — игрушечная двухслойная модель только из внимания (без MLP, LayerNorm и смещений; позиции добавляются только к запросам и ключам — так индукционные головы появляются в 2–3 раза раньше). Свои детекторы голов «на текущий токен», «на предыдущий токен», «на первый токен».
- Хуки — функции, которые читают или меняют активации во время прямого прохода; атрибуция логитов и абляции.
- Обратная разработка по весам — QK- и OV-цепи, класс
FactoredMatrix, оценки композиции голов.
Что такое индукционная голова (индукционная головаиндукционная головаEN induction headПара голов, которая находит в контексте прошлое появление текущего токена и копирует токен, шедший после него ([A][B] … [A] → [B]). Механизм in-context learning (Olsson и др., 2022).). Это голова второго слоя, которая смотрит на токен, стоявший сразу после предыдущего вхождения текущего токена, и копирует его: увидев «… Гарри Поттер … Гарри», она предсказывает «Поттер». Цепь из двух голов: голова «предыдущего токена» в слое 0 записывает в каждую позицию, какой токен стоял перед ней, а индукционная голова в слое 1 через K-композицию ищет позиции, где «предыдущий токен» совпадает с текущим. ARENA объясняет, почему эти головы так важны (пересказ):
- они появляются скачком, фазовым переходом, — по данным авторов, примерно между 2 и 4 млрд токенов обучения, — и на кривой потерь виден заметный «горб»;
- на них приходится большая часть способности использовать далёкий контекст — одно из главных преимуществ трансформеров над RNN и LSTM;
- тот же механизм используется в более сложных задачах — переводе и обучении по примерам.
Задачка из набора: почему индукционная голова не может возникнуть в однослойной модели? Ответ: оценка внимания зависит только от токена-запроса и токена-ключа, а индукции нужно смотреть на ключ по значению соседнего с ним токена — эту информацию в позицию ключа должна сначала перенести другая голова.
Красивая проверка: подайте модели последовательность случайных токенов, повторённую дважды. На первой половине потери высокие (угадать нечего), на второй — резко падают: модель «узнаёт» повтор, хотя в обучающих данных ничего подобного не было. Такое обобщение за пределы распределения — сильное свидетельство того, что цепь понята правильно.
Как запускать
Заголовок раздела «Как запускать»- Самый простой путь — Colab. У каждого набора на странице есть ссылки «exercises» и «solutions» на ноутбуки в Colab. Это вариант, который авторы рекомендуют большинству.
- Локально. Клонируйте репозиторий
git clone https://github.com/ARENA-education/ARENA_materials.git. Скриптinstall.shрассчитан на облачные машины (RunPod, Vast.ai): ставит Miniconda, окружениеarena-envс Python 3.13 и пакеты изrequirements.txt(PyTorch 2.11+, TransformerLens,einops,jaxtyping,wandb, Inspect и др.). На своей машине лучше прочитать скрипт и выполнить нужные шаги вручную в отдельном окружении (урок 0.1). - Упражнения лежат в
chapterN_*/exercises/partNN_*/: файлы упражнений, решений и тестов. Правите файл упражнений, запускаете ячейку с тестом — видите, прошло или нет. - Ошибки в материалах авторы просят сообщать в канал
#errataих Slack.
Что сделать руками прямо сейчас
Заголовок раздела «Что сделать руками прямо сейчас»Проверьте интуицию «MLP как пары ключ → значение» из набора 1.1 — без библиотек и скачиваний:
import numpy as nprng = np.random.default_rng(0)d_model, d_mlp = 8, 32 # как в GPT-2: d_mlp = 4 * d_modelW_in = rng.normal(size=(d_model, d_mlp)) # столбцы W_in — «входные направления» нейроновW_out = rng.normal(size=(d_mlp, d_model)) # строки W_out — «выходные направления»x = rng.normal(size=d_model) # вектор остаточного потока в одной позицииgelu = lambda z: 0.5 * z * (1 + np.tanh(np.sqrt(2 / np.pi) * (z + 0.044715 * z**3)))
whole = gelu(x @ W_in) @ W_out # MLP целиком (без смещений)by_neuron = sum(gelu(x @ W_in[:, i]) * W_out[i, :] for i in range(d_mlp)) # сумма вкладов нейроновprint(np.allclose(whole, by_neuron)) # True: MLP = сумма «ключ → значение» по нейронамacts = gelu(x @ W_in)top = np.argsort(-np.abs(acts))[:3]print("сильнее всего сработали нейроны", top, "с активациями", acts[top].round(2))Ожидаемый вывод:
Trueсильнее всего сработали нейроны [8 4 9] с активациями [7.77 7.08 5.69]Дальше — по плану:
- После уроков 4.6.2–4.6.4 сделайте 1.1 целиком (разделы 1–3 обязательно, 4 — по желанию): это проверка того, что ваш GPT совпадает с эталонным до знака.
- После урока 9.3.1 — 1.2, затем 1.5.1 и 1.4.1.
- После урока 9.3.2 — 1.5.4 (теория) и практический набор по SAE.
- После урока 6.3.2 — 2.3 и 2.4 (RLHF на своём трансформере).
Что читать дальше
Заголовок раздела «Что читать дальше»- Статья Distill «Zoom In» — откуда взялись понятия «признак», «цепь» и «суперпозиция»;
- «Визуализация признаков» — предыстория;
- статьи журнала Anthropic Transformer Circuits — первоисточники набора 1.2: «Математическая основа цепей трансформера» и «Обучение в контексте и индукционные головы» (группа переводов «Anthropic»);
- конспект Lil’Log о взломе награды — фон к главам 2.4, 3 и 4.
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| mechanistic interpretability | механистическая интерпретируемость |
| residual stream | остаточный поток |
| attention pattern, attention head | шаблон внимания, голова внимания |
| logit lens, direct logit attribution | logit lens, прямая атрибуция логитов |
| induction head / circuit, previous token head | индукционная голова / цепь, голова предыдущего токена |
| K-composition, QK / OV circuit | K-композиция, QK- / OV-цепь |
| hook, activation cache | хук, кэш активаций |
| ablation, activation patching | абляция, подмена активаций |
| linear probe, steering vector, function vector | линейный зонд, вектор управления, вектор функции |
| sparse autoencoder (SAE), transcoder | разреженный автоэнкодер, транскодер |
| superposition | суперпозиция |
| grokking | грокинг (внезапное обобщение после долгого переобучения) |
| threat model, elicitation | модель угроз, выявление способностей |
| AI control | контроль ИИ |