Lil’Log: семейство трансформеров 2.0
Конспект обзора Лилиан Венг (2023): основы трансформера и позиционные кодирования (синусы, относительные, RoPE, ALiBi), длинный контекст через память и рекуррентность, адаптивные вычисления, разреженное, хеширующее и линейное внимание, трансформеры в RL — с картой «что из этого живо в LLM 2026 года».
Коротко
Заголовок раздела «Коротко»- Пост — каталог модификаций трансформера до начала 2023 года, сгруппированный по задаче, которую решает каждая: позиции, длинный контекст, адаптивные вычисления, эффективное внимание, применение в RL.
- Корень почти всех проблем — квадратичная цена внимания: время и память по длине .
- Позиционные кодирования прошли путь от синусов, прибавляемых ко входу, к схемам, которые меняют сами оценки внимания в каждом слое: относительные позиции, ротационные позиционные эмбеддингиротационные позиционные эмбеддинги (RoPE)EN rotary position embedding (RoPE)RoPE предложен в Китае (Су Цзяньлинь и соавторы, компания Zhuiyi). Сейчас используется почти во всех LLM., ALiBiALiBi (линейные смещения внимания)EN Attention with Linear Biases (ALiBi)К оценке внимания прибавляется штраф, линейно растущий с расстоянием, свой наклон у каждой головы (Press и др., 2021). Использовался в BLOOM и MPT; позже уступил RoPE..
- Длинный контекст пробовали получать четырьмя путями: кэш прошлых сегментов (Transformer-XL), внешняя память с поиском ближайших соседей (kNN-LM, Memorizing Transformer), штраф за расстояние (ALiBi) и рекуррентность (Universal Transformer).
- Эффективное внимание — три семейства: фиксированные разреженные шаблоны (локальное окно, шаг, глобальные токены), внимание по содержимому (хеширование, кластеризация) и низкоранговые/ядерные приближения (Linformer, Performer).
- Из всего каталога в больших LLM 2026 года выжили немногие идеи — RoPE, скользящее окно, разреженность «по содержимому» и линейное внимание в гибридах; карта ниже показывает, где они в курсе.
Как читать вместе с курсом
Заголовок раздела «Как читать вместе с курсом»Первую часть («Основы трансформера») читайте как повторение после уроков 4.4.2, 4.4.3, 4.5.1 и 4.5.2 «Позиционное кодирование». Остальное — справочник к ступени 5: разделы «Длинный контекст» и «Эффективное внимание» — к урокам 5.5.2 «Разреженное внимание» и 5.5.3 «Линейное внимание».
Помните о дате: пост написан в январе 2023 года. В нём нет того, что стало стандартом позже: внимание с группами запросоввнимание с группами запросов (GQA)EN grouped-query attention (GQA)Головы запросов делятся на G групп, у каждой группы своя пара K/V. G = H — это MHA, G = 1 — MQA. Стандарт Llama 3 и Qwen (Ainslie и др., 2023). и многоголовое латентное вниманиемногоголовое латентное внимание (MLA)EN multi-head latent attention (MLA)Предложено DeepSeek в DeepSeek-V2 (2024). (уроки 5.2.1–5.2.2), FlashAttention (5.7.2), интерполяции RoPE для длинного контекста (5.5.1), смесь экспертовсмесь экспертов (MoE)EN mixture of experts (MoE) в современном виде (5.3). Новичку можно пропустить разделы про Compressive Transformer, SPALM, Depth-Adaptive Transformer, ETC и Routing Transformer.
1. Основы трансформера
Заголовок раздела «1. Основы трансформера»Венг начинает с таблицы обозначений: — размер модели, — число голов, — длина сегмента, , , — запросы, ключи и значения ( и т. д.), — матрица внимания . Затем — коротко:
- Внимание — взвешенное среднее значений с весами, которые сеть учит; самовнимание — внимание частей одного примера друг к другу. Само по себе оно не знает порядка элементов: это операция над множеством.
- Масштабированное скалярное внимание: . Через Венг обозначает множество ключей, на которые смотрит -й запрос, — это обозначение пригодится для разреженного внимания: в полном внимании — все позиции, в разреженном — их часть.
- Многоголовое внимание: голов в подпространствах размера , конкатенация, выходная проекция .
- Кодировщик–декодер: стопка одинаковых блоков (самовнимание + поточечный FFN, вокруг каждого — residual и LayerNorm); в декодере ещё маска будущего и перекрёстное внимание к кодировщику.
Позиционные кодирования
Заголовок раздела «Позиционные кодирования»| Вид | Идея | Где в курсе |
|---|---|---|
| синусоидальное | к эмбеддингу прибавляется вектор синусов и косинусов с длинами волн от до | 4.5.2 |
| обучаемое абсолютное | у каждой позиции свой обучаемый вектор (иногда — свой в каждом слое) | 4.5.2 |
| относительное (Shaw и др., 2018) | обучаемые векторы для смещения , обрезанного до ; так модель обобщается на невиданные длины | 4.5.2 |
| Transformer-XL | оценку раскладывают на четыре слагаемых «содержимое/позиция» и заменяют абсолютные позиции относительными плюс два обучаемых вектора , | — |
| RoPE (Su и др., 2021) | запрос и ключ поворачивают на угол, пропорциональный позиции; в скалярном произведении остаётся только разность позиций | 4.5.2, 5.5.1 |
| ALiBi (Press и др., 2022) | к оценке прибавляют штраф, линейный по расстоянию, с разным наклоном в каждой голове | 4.5.2 |
Ключевое свойство RoPE: — поворот на и на вместе дают поворот на разность. Венг подчёркивает, что по сути это те же синусоиды, только записанные как матрица поворота и применённые в каждом слое к и , а не один раз ко входу.
2. Длинный контекст
Заголовок раздела «2. Длинный контекст»Длина входа на инференсе ограничена длиной, на которой модель обучали, а наивное удлинение упирается в квадратичную цену. Венг выделяет четыре подхода.
Память контекста. Transformer-XL (Dai и др., 2019) решает проблему «нарезки на сегменты»: без неё модель не видит ничего за границей сегмента, плохо предсказывает первые токены каждого сегмента и при сдвиге окна на один токен пересчитывает всё заново. Решение — хранить скрытые состояния предыдущего сегмента (без градиента) и подавать их как дополнительные ключи и значения; поэтому и понадобилось относительное кодирование позиций. Compressive Transformer (Rae и др., 2019) добавляет второй уровень памяти: старые активации не выбрасываются, а сжимаются (свёрткой, пулингом и т. п.), и для обучения сжатия есть две вспомогательные потери.
Внешняя недифференцируемая память. kNN-LM (Khandelwal и др., 2020) смешивает предсказание обычной LM с предсказанием поиска ближайших соседей по огромной базе «контекст → следующий токен». SPALM совмещает кэш в стиле Transformer-XL (краткосрочная память) и kNN-базу (долгосрочная). Memorizing Transformer (Wu и др., 2022) ставит ближе к верху декодера слой внимания, который ищет ближайших пар ключ–значение во внешнем FIFO-кэше и смешивает результат с обычным локальным вниманием через обучаемый гейт. Связь с курсом: это предки RAG (генерация с дополнением извлечёнными даннымигенерация с дополнением извлечёнными данными (RAG)EN retrieval-augmented generation (RAG), ступень 8.2) — только поиск здесь встроен внутрь модели.
Штраф за расстояние. DA-Transformer и ALiBi явно добавляют к оценке внимания функцию расстояния между запросом и ключом. В ALiBi это — сильное предпочтение недавнего. Венг приводит результат авторов: модель на 1,3 млрд параметров, обученная на длине 1024, работала на инференсе с длиной около 2048.
Рекуррентность. Universal Transformer (Dehghani и др., 2019) применяет один и тот же блок много раз (веса общие), а число повторов для каждого токена выбирает механизм адаптивного времени вычислений — тот самый ACT из статьи Distill о дополненных RNN.
3. Адаптивное моделирование
Заголовок раздела «3. Адаптивное моделирование»Идея раздела: не всем токенам и не всем головам нужен одинаковый объём вычислений.
- Адаптивная длина внимания (Sukhbaatar и др., 2019): у каждой головы своя обучаемая длина окна, с мягкой «рампой»-маской на краю, чтобы она была дифференцируемой. Оказалось, что нижним слоям хватает коротких окон, а длинные нужны лишь части голов верхних слоёв.
- Адаптивная глубина — Depth-Adaptive Transformer (Elbayad и др., 2020) и CALM (Schuster и др., 2022): к слоям приделаны классификаторы «раннего выхода», и простые токены покидают сеть раньше. Порог уверенности надо калибровать: CALM подбирает его статистической процедурой Learn then Test, чтобы качество гарантированно не упало ниже заданного.
4. Эффективное внимание
Заголовок раздела «4. Эффективное внимание»Самый длинный раздел. Схема ниже — наша, она группирует то, что описывает Венг.
flowchart TD E["Как удешевить внимание O(L²)"] --> F["Фиксированные разреженные шаблоны"] E --> C["Разреженность по содержимому"] E --> R["Низкий ранг / ядра"] F --> F1["Локальное окно: Image Transformer"] F --> F2["Шаг и блоки: Sparse Transformer, Blockwise"] F --> F3["Окно + глобальные токены: ETC, Longformer, Big Bird"] C --> C1["LSH-хеширование: Reformer"] C --> C2["k-means кластеры: Routing Transformer"] R --> R1["Проекция длины L→k: Linformer"] R --> R2["Случайные признаки вместо softmax: RFA, Performer"]
Фиксированные шаблоны.
- Локальное окно (Image Transformer, Parmar и др., 2018): каждый токен смотрит только на соседей в одномерном или двумерном блоке — цена растёт линейно.
- Шаг (Sparse Transformer, Child и др., 2019): «факторизованное» внимание из двух видов голов — локальной и «через каждые позиций»; за два шага информация доходит от любой позиции к любой. Это позволило обучать сети на последовательностях до 16 384 элементов. Blockwise Attention (Qiu и др., 2019) разбивает матрицу внимания на блоки и оставляет лишь их часть.
- Локальное + глобальное (ETC, Longformer, Big Bird): скользящее окно плюс несколько выделенных токенов (например,
[CLS]), которые видят всё и видны всем. Longformer добавляет «прореженные» (dilated) окна и растит окно от нижних слоёв к верхним; Big Bird вместо прореживания добавляет случайные связи — случайный граф хорошо передаёт информацию.
Внимание по содержимому.
- Reformer (Kitaev и др., 2020): после softmax важны только самые большие оценки, поэтому для каждого запроса ищут ближайшие ключи хешированием, чувствительным к близости (LSH; локально-чувствительное хешированиелокально-чувствительное хеширование (LSH)EN locality-sensitive hashing (LSH)): со случайной матрицей . Похожие векторы попадают в одну корзину, внимание считают внутри корзин — . Второй приём — обратимые residual-слои: активации можно восстановить из следующего слоя и не хранить.
- Routing Transformer (Roy и др., 2021): то же, но корзины — кластеры онлайн-k-means.
Низкий ранг и ядра.
- Linformer (Wang и др., 2020): проецирует ключи и значения по длине из в строк — линейная сложность.
- RFA (Peng и др., 2021) и Performer (Choromanski и др., 2021): приближают скалярным произведением случайных признаков (теорема Rahimi и Recht, 2007). Тогда можно сначала перемножить и получить линейную по цену, а в причинном случае — рекуррентное обновление состояния. Performer берёт положительные ортогональные случайные признаки, чтобы уменьшить ошибку.
Что из этого живо в 2026 году (наша сводка по курсу, не из поста):
| Идея из поста | Что с ней стало | Урок |
|---|---|---|
| локальное окно + «стоки» внимания | скользящее окно в части слоёв современных LLM | 5.5.2 |
| разреженность по содержимому | выбор top-k блоков обученным «индексатором» (NSA, DSA в DeepSeek) | 5.5.2 |
| ядерное/линейное внимание | линейное внимание с гейтами и дельта-правилом в гибридных моделях | 5.5.3 |
| RoPE | стандарт; для длинного контекста — интерполяции (NTK, YaRN) | 4.5.2, 5.5.1 |
| ALiBi | встречается реже, вытеснен RoPE | 4.5.2 |
| Reformer, Linformer, Performer | в больших LLM почти не используются: проиграли плотному вниманию с FlashAttention | 5.7.2 |
5. Трансформеры для обучения с подкреплением
Заголовок раздела «5. Трансформеры для обучения с подкреплением»- GTrXL (Parisotto и др., 2019): Transformer-XL, который стабильно учится в RL, если вынести LayerNorm на вход подблоков и заменить residual-сложение гейтом в стиле GRU.
- Decision Transformer (Chen и др., 2021): RL как условное моделирование последовательности. Траекторию записывают тройками (желаемая будущая отдача, состояние, действие) и обучают трансформер предсказывать действие. На инференсе задают высокую желаемую отдачу — и модель действует «как в хороших эпизодах». Это офлайн-RL: модель учится по фиксированному набору траекторий.
Что сделать руками
Заголовок раздела «Что сделать руками»Проверьте два свойства из раздела о позициях: у RoPE скалярное произведение зависит только от разности позиций, а ALiBi — это просто матрица штрафов, прибавляемая к оценкам.
import numpy as np
def rope(x, pos, base=10000): """Поворачивает пары координат вектора x на углы pos·θ_k (RoPE).""" d = x.shape[-1] theta = base ** (-np.arange(0, d, 2) / d) # θ_k = 10000^(-2k/d) ang = pos * theta x1, x2 = x[0::2], x[1::2] # пары (x_0, x_1), (x_2, x_3), ... out = np.empty_like(x) out[0::2] = x1 * np.cos(ang) - x2 * np.sin(ang) out[1::2] = x1 * np.sin(ang) + x2 * np.cos(ang) return out
rng = np.random.default_rng(0)q, k = rng.normal(size=8), rng.normal(size=8)for i, j in [(5, 3), (105, 103), (1000, 998)]: # везде расстояние i − j = 2 print(i, j, round(rope(q, i) @ rope(k, j), 6)) # скалярное произведение одно и то же
# ALiBi: штраф за расстояние, у каждой головы свой наклонL, heads = 5, 8slopes = 2.0 ** (-np.arange(1, heads + 1)) # 1/2, 1/4, ..., 1/256dist = np.arange(L)[None, :] - np.arange(L)[:, None] # j − ibias_head0 = slopes[0] * np.minimum(dist, 0) # только прошлое: 0, −0.5, −1, ...print(bias_head0)Ожидаемый вывод:
5 3 -1.763129105 103 -1.7631291000 998 -1.763129[[ 0. 0. 0. 0. 0. ] [-0.5 0. 0. 0. 0. ] [-1. -0.5 0. 0. 0. ] [-1.5 -1. -0.5 0. 0. ] [-2. -1.5 -1. -0.5 0. ]]Наклоны для 8 голов — схема из статьи ALiBi. Верхний треугольник в реальной модели всё равно закрыт причинной маской, поэтому мы оставили там нули.
Дальше:
- Нарисуйте (
matplotlib.imshow) маски для локального окна, «шага» Sparse Transformer и схемы Longformer при и сравните долю ненулевых элементов с полной матрицей. - Реализуйте «внимание через случайные признаки» по формулам раздела RFA и сравните его результат с точным softmax для , при разном числе признаков.
- Сделайте практику уроков 5.5.2 и 5.5.3, где эти идеи доведены до современных вариантов.
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| scaled dot-product attention | масштабированное скалярное внимание |
| multi-head self-attention | многоголовое самовнимание |
| positional encoding: sinusoidal, learned, relative | позиционное кодирование: синусоидальное, обучаемое, относительное |
| rotary position embedding (RoPE) | вращательное позиционное кодирование (RoPE) |
| attention with linear biases (ALiBi) | внимание с линейными штрафами (ALiBi) |
| context segmentation | нарезка контекста на сегменты |
| external memory, kNN | внешняя память, поиск ближайших соседей |
| adaptive attention span, early exit | адаптивная длина внимания, ранний выход |
| sparse / strided / dilated attention | разреженное / с шагом / прореженное внимание |
| global tokens | глобальные токены |
| locality-sensitive hashing (LSH) | хеширование, чувствительное к близости |
| reversible residual layer | обратимый residual-слой |
| low-rank attention, random features | низкоранговое внимание, случайные признаки |
| decision transformer, return-to-go | Decision Transformer, оставшаяся отдача |