Технологии

Что такое трансформер

Архитектура, на которой построены все современные языковые модели. Разбираем её ровно настолько, насколько она объясняет практику: почему длинный текст дорожает быстрее, чем растёт.

Трансформер — архитектура нейронной сети, предложенная в 2017 году и с тех пор вытеснившая всё остальное в обработке текста. Все языковые модели, которые вы запускаете локально или зовёте по API, построены на ней; различия между ними — в размере, данных и деталях, а не в скелете.

#Из чего собран один слой

Модель — это стопка одинаковых по устройству слоёв, от пары десятков у небольших моделей до сотни у крупных. Каждый слой делает две вещи подряд:

  1. Блок внимания. Каждая позиция в тексте смотрит на все предыдущие и собирает из них взвешенную сводку. Это единственное место, где токены «общаются» друг с другом; подробнее — в справке про механизм внимания.
  2. Полносвязный блок. Каждая позиция независимо прогоняется через две матрицы с нелинейностью между ними. Здесь живёт основная масса параметров модели.

Вокруг обоих блоков — нормализация и остаточные связи, благодаря которым стопку из восьмидесяти слоёв вообще удаётся обучить.

Между слоями текст не превращается ни во что человекочитаемое: на каждой позиции лежит вектор, который постепенно накапливает контекст. На выходе последнего слоя вектор последней позиции превращается в оценки для всех токенов словаря, и из них выбирается следующий токен. Потом всё повторяется — по одному токену за проход.

#Почему длинный текст дорожает быстрее, чем растёт

Это главное практическое следствие архитектуры, и оно вытекает прямо из пункта 1.

  • Обработка промпта (prefill). Внимание сопоставляет каждый токен с каждым, то есть работа растёт примерно как квадрат длины. Удвоив промпт, вы более чем удваиваете время до первого токена. Отсюда симптом «модель долго молчит, потом печатает бодро» — разбор в справке про задержку и время до первого токена.
  • Память. Чтобы не пересчитывать всю историю на каждом шаге, движок хранит промежуточные векторы уже обработанных токенов — KV-кэш. Его объём растёт линейно с длиной контекста, и на длинных диалогах он способен занять больше места, чем сама модель; арифметика — в разборе контекста и VRAM под KV-кэш.
  • Генерация. А вот скорость вывода от длины контекста зависит слабо: на каждый новый токен модель всё равно читает все свои веса. Скорость упирается в пропускную способность памяти, а не в длину текста.
Что растёт Как зависит от длины контекста Что чувствуется
Время обработки промпта ~квадратично долгая пауза перед ответом
Память под KV-кэш линейно нехватка VRAM, выгрузка на CPU
Скорость генерации почти не зависит ровный поток токенов

Практический вывод: длинный контекст оплачивается один раз в начале запроса и постоянно — местом в памяти. Именно поэтому «просто положить весь архив в окно» дороже, чем найти пять нужных фрагментов и положить их.

#Где путают

Заблуждение первое: у каждой компании своя архитектура. Скелет один и тот же — стопка слоёв внимания. Различаются детали: способ кодирования позиций, число ключ-значение-голов, наличие разреженных экспертов. Эти детали влияют на скорость и память, но не делают модели принципиально разными механизмами.

Заблуждение второе: трансформер «понимает» текст целиком. Он обрабатывает контекст целиком на входе, но порождает по одному токену за проход, каждый раз заново прогоняя всю стопку слоёв. Никакого плана ответа, составленного заранее, у модели нет.

Заблуждение третье: квадратичный рост означает, что длинный контекст невозможен. Возможен: современные реализации применяют оптимизации доступа к памяти и разреженные схемы внимания, из-за чего практический рост мягче теоретического. Но он остаётся сверхлинейным, и это видно на секундомере.

#Частые вопросы

#Все ли языковые модели — трансформеры?

Практически все, что применяются сегодня. Альтернативные архитектуры с линейной сложностью по длине разрабатываются и публикуются, но в массовом локальном запуске их пока почти нет.

#Что означает «decoder-only»?

Что модель состоит только из части, порождающей текст, и каждый токен видит лишь предыдущие. Так устроены все модели-собеседники. Модели для эмбеддингов чаще устроены иначе — там каждый токен видит весь текст в обе стороны.

#Как число слоёв связано с числом параметров?

Напрямую: параметры распределены по слоям, и общий объём определяется числом слоёв и шириной вектора. Что это значит для места на диске и в памяти — в справке про параметры модели.

#Правда ли, что модель «предсказывает следующее слово»?

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

Остальные термины — в глоссарии терминов ИИ.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт