Трансформер — архитектура нейронной сети, предложенная в 2017 году и с тех пор вытеснившая всё остальное в обработке текста. Все языковые модели, которые вы запускаете локально или зовёте по API, построены на ней; различия между ними — в размере, данных и деталях, а не в скелете.
#Из чего собран один слой
Модель — это стопка одинаковых по устройству слоёв, от пары десятков у небольших моделей до сотни у крупных. Каждый слой делает две вещи подряд:
- Блок внимания. Каждая позиция в тексте смотрит на все предыдущие и собирает из них взвешенную сводку. Это единственное место, где токены «общаются» друг с другом; подробнее — в справке про механизм внимания.
- Полносвязный блок. Каждая позиция независимо прогоняется через две матрицы с нелинейностью между ними. Здесь живёт основная масса параметров модели.
Вокруг обоих блоков — нормализация и остаточные связи, благодаря которым стопку из восьмидесяти слоёв вообще удаётся обучить.
Между слоями текст не превращается ни во что человекочитаемое: на каждой позиции лежит вектор, который постепенно накапливает контекст. На выходе последнего слоя вектор последней позиции превращается в оценки для всех токенов словаря, и из них выбирается следующий токен. Потом всё повторяется — по одному токену за проход.
#Почему длинный текст дорожает быстрее, чем растёт
Это главное практическое следствие архитектуры, и оно вытекает прямо из пункта 1.
- Обработка промпта (prefill). Внимание сопоставляет каждый токен с каждым, то есть работа растёт примерно как квадрат длины. Удвоив промпт, вы более чем удваиваете время до первого токена. Отсюда симптом «модель долго молчит, потом печатает бодро» — разбор в справке про задержку и время до первого токена.
- Память. Чтобы не пересчитывать всю историю на каждом шаге, движок хранит промежуточные векторы уже обработанных токенов — KV-кэш. Его объём растёт линейно с длиной контекста, и на длинных диалогах он способен занять больше места, чем сама модель; арифметика — в разборе контекста и VRAM под KV-кэш.
- Генерация. А вот скорость вывода от длины контекста зависит слабо: на каждый новый токен модель всё равно читает все свои веса. Скорость упирается в пропускную способность памяти, а не в длину текста.
| Что растёт | Как зависит от длины контекста | Что чувствуется |
|---|---|---|
| Время обработки промпта | ~квадратично | долгая пауза перед ответом |
| Память под KV-кэш | линейно | нехватка VRAM, выгрузка на CPU |
| Скорость генерации | почти не зависит | ровный поток токенов |
Практический вывод: длинный контекст оплачивается один раз в начале запроса и постоянно — местом в памяти. Именно поэтому «просто положить весь архив в окно» дороже, чем найти пять нужных фрагментов и положить их.
#Где путают
Заблуждение первое: у каждой компании своя архитектура. Скелет один и тот же — стопка слоёв внимания. Различаются детали: способ кодирования позиций, число ключ-значение-голов, наличие разреженных экспертов. Эти детали влияют на скорость и память, но не делают модели принципиально разными механизмами.
Заблуждение второе: трансформер «понимает» текст целиком. Он обрабатывает контекст целиком на входе, но порождает по одному токену за проход, каждый раз заново прогоняя всю стопку слоёв. Никакого плана ответа, составленного заранее, у модели нет.
Заблуждение третье: квадратичный рост означает, что длинный контекст невозможен. Возможен: современные реализации применяют оптимизации доступа к памяти и разреженные схемы внимания, из-за чего практический рост мягче теоретического. Но он остаётся сверхлинейным, и это видно на секундомере.
#Частые вопросы
#Все ли языковые модели — трансформеры?
Практически все, что применяются сегодня. Альтернативные архитектуры с линейной сложностью по длине разрабатываются и публикуются, но в массовом локальном запуске их пока почти нет.
#Что означает «decoder-only»?
Что модель состоит только из части, порождающей текст, и каждый токен видит лишь предыдущие. Так устроены все модели-собеседники. Модели для эмбеддингов чаще устроены иначе — там каждый токен видит весь текст в обе стороны.
#Как число слоёв связано с числом параметров?
Напрямую: параметры распределены по слоям, и общий объём определяется числом слоёв и шириной вектора. Что это значит для места на диске и в памяти — в справке про параметры модели.
#Правда ли, что модель «предсказывает следующее слово»?
Следующий токен, а не слово, и это точное описание механики, а не принижение. Всё остальное — способность рассуждать, следовать инструкции, писать код — возникает как побочный результат очень хорошего решения этой одной задачи.
Остальные термины — в глоссарии терминов ИИ.