← Все главы

00 · Версия материала 5

Карта устройства современной LLM

Посмотрите, как токенизация, эмбеддинги, блоки декодера, внимание, ветви прямого распространения, обучение, выбор токена и KV-кэш соединяются в LLM только с декодером.

Сначала взгляните на систему целиком

LLM только с декодером легче понять как связанную систему, а не как один непрозрачный чёрный ящик. Сначала текст запроса превращается в ID токенов. По ним из таблицы эмбеддингов извлекаются обучаемые признаки. Затем стек блоков декодера многократно смешивает информацию из доступного префикса и преобразует признаки в каждой позиции. Наконец, проекция на словарь выдаёт по одной оценке для каждого возможного следующего токена.

Эти оценки используются двумя способами. При генерации стратегия декодирования выбирает ID токена, добавляет его к последовательности и снова запускает модель, используя уже заполненный KV-кэш внимания. При обучении фактически следующий токен служит целью: функция потерь измеряет ошибку прогноза, градиенты показывают её чувствительность к каждому весу, а оптимизатор обновляет веса эмбеддингов, блоков декодера и проекции на словарь.

Этот обзор намеренно ограничивается названиями, назначением и связями частей. В следующих главах выводятся формулы, а каждый механизм реализуется на Rust тогда, когда его место в модели уже понятно.

Короткий путь к современной блок-схеме

Частотные n-граммные модели учитывают только фиксированный короткий контекст и не умеют обучать распределённые признаки, пригодные в разных контекстах, или выбирать информацию из более длинного префикса в зависимости от его содержимого. Нейронные языковые модели научились строить распределённые представления токенов, Transformer добавил маскированное самовнимание по префиксу, а более поздние авторегрессионные модели на основе Transformer сохранили задачу предсказания следующего токена при масштабировании. Современная LLM только с декодером многократно преобразует признаки токенов: перед ветвями каузального внимания и вентильного прямого распространения выполняется нормализация, а затем результат проецируется в распределение вероятностей следующего токена, которое используется при обучении или генерации.

Переход от подсчёта частот к обучаемым признакам хорошо виден в работе A Neural Probabilistic Language Model. Бенжио и соавторы сопоставляют обобщение в n-граммных моделях с нейронной вероятностной функцией, которая обучает распределённые представления слов; их модель появилась до Transformer и до блока декодера, который рассматривается в этом курсе.

Следующий архитектурный рубеж описан в работе Attention Is All You Need. Васвани и соавторы описывают Transformer и задают маску, запрещающую самовниманию декодера обращаться к более поздним позициям; опубликованная ими система состоит из энкодера и декодера, а не только из декодера, как модель в этом курсе. Схема только из декодерных блоков, показанная в курсе, — более поздняя архитектурная специализация, а не копия той системы.

Масштабирование авторегрессионного подхода показано в работе Language Models are Few-Shot Learners. Браун и соавторы описывают GPT-3 как масштабированную авторегрессионную языковую модель; её масштаб и результаты измерения её возможностей нельзя переносить на небольшую учебную модель этого курса.

Проследите путь по единой системе

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

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

Сначала рассмотрите LLM целиком, затем собирайте её по частям

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

Как связана вся система

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

Общий путь прямого распространения
Текст / примеры

Запрос; отдельные документы для обучения.

Токенизатор

Преобразует текст в ID токенов и обратно.

Эмбеддинги

ID токенов → обучаемые признаки.

Блоки декодера

Внимание и SwiGLU в каждом блоке.

↻ в каждом слое

Проекция на словарь

Итоговые признаки → логиты токенов.

Логиты

По одной оценке для каждого токена словаря.

Генерация
Выбор токена

Из логитов получает вероятности и выбирает токен.

ID выбранного токена

Добавляется к контексту.

Обучение
Логиты модели

Оценки для этой позиции.

и
Целевой токен

Фактически следующий токен.

Функция потерь

Измеряет ошибку по целевому токену.

Градиенты

Показывают влияние весов на потери.

Оптимизатор AdamW

Обновляет веса по градиентам.

Обновлённые веса

Валидация выберет одно состояние.

Состояние и вычислительная основа
KV‑кэш слоя

Внимание читает и дополняет KV‑кэш при генерации.

Тензорная основа

Тензорные операции; граф вычислений — только при обучении.

Итоговая оценка

Выбранные веса → один локальный оценщик → отчёт по фиксированному примеру.

Контрольная точка

Состояние модели и обучения ↔ контрольная точка.

Устройство LLM по главам курса

Сравните генерацию с обучением и разберите блок декодера по главам. Итоговая сборка: Объединяет все части. Гл. 39

Генерация следующего токена

Запрос токенизируется один раз; по выбранному ID снова извлекается эмбеддинг, а KV‑кэш сохраняется.

  1. Текст / примеры

    Запрос; отдельные документы для обучения.

  2. Токенизатор

    Преобразует текст в ID токенов и обратно.

  3. Эмбеддинги

    ID токенов → обучаемые признаки.

  4. Блоки декодера

    Внимание и SwiGLU в каждом блоке.

    ↻ в каждом слое

  5. Проекция на словарь

    Итоговые признаки → логиты токенов.

  6. Выбор токена

    Из логитов получает вероятности и выбирает токен.

    ↺ ID токена → эмбеддинг

Внутри блока декодера

Блок добавляет результат внимания, затем результат SwiGLU.

  1. RMSNorm

    Задаёт масштаб входа.

  2. Каузальное внимание

    Читает доступный префикс.

  3. Остаточное сложение

    Добавляет результат ветви к потоку.

  4. RMSNorm

    Задаёт масштаб входа.

  5. SwiGLU

    Вентильная обработка признаков по позициям.

  6. Остаточное сложение

    Добавляет результат ветви к потоку.

Обучение и оценка тех же весов

По потерям и градиентам обновляются те же веса.

Общий путь до логитов

текст → токенизатор → эмбеддинги → декодер → проекция на словарь; при обучении вместо выбора берём целевой токен.

  1. Функция потерь

    Измеряет ошибку по целевому токену.

  2. AdamW и выбор состояния

    Обновляет веса; отбор — по валидации.

  3. Итоговая оценка

    Оценивает зафиксированную модель после завершения выбора; известный результат служит регрессионной проверкой фиксированного примера.

  4. Контрольная точка

    Сохраняет модель и ход обучения.

Используйте карту как оглавление

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

Главы 1–7 вводят текст, токенизацию, каузальные примеры, базовую частотную модель и метрики языковой модели. В главах 8–23 строятся тензорная основа и механизмы обучения. В главах 24–32 собирается декодер. Главы 33–38 посвящены обучению, итоговой оценке, сохранению состояния, выбору следующего токена и генерации с KV-кэшем. В главе 39 все части объединяются в одну небольшую работающую LLM.

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

Начните с входной границы модели

В главе 1 начинается реализация и вводится различие, от которого зависят все последующие блоки: сам текст модель ещё не принимает. Сначала его нужно превратить в стабильные ID токенов. Затем каждая глава раскроет одну подпись на этой карте: даст объяснение, исполняемую реализацию на Rust и проверяемое подтверждение того, что соответствующая часть работает.