12k
All articles

Как на самом деле работают LLM

Как работают LLM: токены, эмбеддинги, внимание трансформера, обучение, сэмплинг, температура, галлюцинации и почему ChatGPT ошибается.

OpenReplay Team
OpenReplay Team
Как на самом деле работают LLM

Большая языковая модель — это нейронная сеть, обученная предсказывать следующий токен в последовательности: она преобразует текст в числовые векторы, использует механизм внимания, позволяющий каждому токену собирать контекст из остальных, и генерирует вывод по одному токену за раз, делая выборку из распределения вероятностей по всему словарю. Этот единственный механизм — предсказать токен, добавить его, предсказать следующий — и есть весь движок, стоящий за ChatGPT, GitHub Copilot, Claude и Gemini. Всё остальное — это масштаб, процедура обучения и инженерные решения поверх него.

Если вы пользуетесь этими инструментами ежедневно, но никогда не заглядывали под капот, то замеченные вами особенности поведения — уверенно неправильные ответы, чат, который «забывает» начало разговора, кардинально разные результаты при незначительном перефразировании запроса, неспособность посчитать буквы в слове «strawberry» — не случайные причуды. Каждая из них напрямую вытекает из механики работы модели. Эта статья даст вам точную ментальную модель этой механики: токены и эмбеддинги, слои внимания и прямого распространения в трансформере, три фазы обучения, реальный процесс генерации текста, а также разбор заблуждений, которые и призвано исправить слово «на самом деле» в заголовке.

Ключевые выводы

  • LLM не извлекает ответы из базы данных — на каждом шаге она вычисляет новое распределение вероятностей по всему словарю, выбирает один токен и повторяет процесс. Поэтому «рассуждение», которое вы читаете, формируется слева направо, а не извлекается целиком.
  • LLM читает субсловные токены, а не отдельные буквы — вот почему задачи на правописание и подсчёт букв решаются хуже, чем можно было бы ожидать, судя по общей беглости модели.
  • Обучение проходит в три этапа: самообучение с учителем на этапе предобучения (следующее слово служит собственной меткой), дообучение на инструкциях по парам «запрос–ответ», написанным людьми, и обучение с подкреплением на основе обратной связи от людей (RLHF).
  • По умолчанию LLM является вероятностной, а не детерминированной: при любой температуре выше нуля один и тот же запрос может давать разные ответы, поскольку модель делает выборку из распределения, а не всегда выбирает наиболее вероятный токен.
  • Галлюцинации — это поведение по умолчанию для системы, оптимизированной на создание статистически правдоподобного текста: она вознаграждается за то, что звучит правильно, а не за то, что является правильным.

Что такое LLM на самом деле: предсказание следующего токена

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

Это переосмысление является ключевым инсайтом. «Напиши функцию, которая реализует debounce для callback» — это не команда, по которой модель ищет ответ. Это запрос, который модель продолжает токен за токеном, потому что в её обучающих данных последовательности, похожие на этот запрос, следовали за последовательностями, похожими на рабочий код. Модель — это движок продолжения текста, направленный на ваш ввод.

Архитектура, которая сделала это работающим в масштабе, — трансформер, представленный в статье 2017 года Attention Is All You Need Васвани и соавторов. «GPT» в ChatGPT расшифровывается как Generative Pre-trained Transformer. До трансформеров модели обрабатывали текст более или менее слева направо и с трудом связывали слова, далеко стоящие друг от друга в предложении; механизм внимания позволил модели взвешивать каждый токен относительно каждого другого токена параллельно, что и открыло путь как к качеству, так и к скорости обучения.

Токены и эмбеддинги: как текст становится числами

Прежде чем модель сможет что-либо сделать с вашим запросом, она разбивает текст на токены — субсловные фрагменты, не слова и не буквы — и сопоставляет каждый токен с числом. Токен может быть целым словом (" the"), фрагментом слова ("ing"), одним символом или знаком препинания. Этот шаг токенизации невидим в интерфейсе чата, но именно он объясняет целый класс ошибок.

Поскольку модель читает субсловные токены, а не отдельные буквы, просьба подсчитать буквы в слове идёт вразрез с тем, как модель представляет текст — вот почему задачи на подсчёт букв и правописание решаются хуже, чем можно было бы ожидать, судя по общей беглости модели. Модель никогда не «видит» три буквы «r» в слове «strawberry»; она видит несколько непрозрачных целочисленных идентификаторов, представляющих фрагменты токенов, в которых буквы уже «растворены».

Это можно наблюдать с помощью опенсорсного токенизатора tiktoken от OpenAI:

# pip install tiktoken
import tiktoken

enc = tiktoken.get_encoding("cl100k_base")
ids = enc.encode("strawberry")
print(ids)                       # a short list of integer token IDs
print([enc.decode([i]) for i in ids])  # the sub-word chunks, not letters

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

Каждый идентификатор токена затем отображается в эмбеддинг: длинный список чисел (вектор), помещающий токен в многомерное «пространство слов». В этом пространстве похожие слова группируются — cat находится рядом с dog, kitten и pet — а геометрия кодирует смысл. Классическая демонстрация этого принципа пришла из word2vec (Миколов и соавторы, 2013), который показал, что векторная арифметика улавливает отношения: приблизительно, biggest − big + small ≈ smallest и Paris − France + Italy ≈ Rome. Те же векторы наследуют человеческие предубеждения, присутствующие в обучающем тексте, поэтому doctor − man + woman может смещаться в сторону nurse. Эмбеддинги формируются в процессе обучения, а не задаются вручную.

Внутри трансформера: слои внимания и прямого распространения

Трансформер — это стек идентичных слоёв, каждый из которых последовательно выполняет две задачи: шаг внимания, на котором токены собирают контекст из других токенов, и шаг прямого распространения (feed-forward), на котором модель применяет знания, хранящиеся в её весах, к каждому токену по отдельности. Современная фронтирная модель состоит из десятков таких слоёв, на каждом из которых представление каждого токена немного уточняется. Ранние слои обрабатывают локальную структуру — грамматику и неоднозначности; более поздние отслеживают смысл более высокого уровня: кто что сделал с кем и о чём идёт речь в тексте.

Механизм внимания работает как служба знакомств. Для каждого токена модель формирует вектор запроса («что я ищу?») и вектор ключа («что я предлагаю?»). Она сравнивает каждый запрос с каждым ключом, и там, где они совпадают, между токенами происходит обмен информацией. В предложении «When John gave the book to Mary, she thanked him» именно механизм внимания связывает «she» с «Mary», а «him» с «John», чтобы последующие слои могли использовать эту информацию. Один слой запускает множество таких операций внимания — называемых головами — параллельно, и каждая из них обучается отслеживать свой тип отношений.

Шаг прямого распространения — это место, где хранятся усвоенные факты. После того как механизм внимания собрал релевантный контекст, сеть прямого распространения обрабатывает каждый токен самостоятельно, преобразуя его на основе паттернов, усвоенных в процессе обучения. Чёткое разделение труда: внимание извлекает информацию из находящегося перед ним запроса, тогда как слои прямого распространения поставляют информацию, усвоенную из обучающего корпуса. Когда модель продолжает «The capital of Poland is» словом «Warsaw», этот факт берётся из весов прямого распространения, а не из чего-либо в вашем запросе.

Для линейной алгебры и точных уравнений, лежащих в основе механизма внимания, первичным источником служит оригинальная статья о трансформере. Ментальная модель — сопоставить, собрать контекст, затем применить сохранённые знания, повторяя это на множестве слоёв — достаточна для анализа поведения модели.

Как обучаются LLM: предобучение, дообучение и RLHF

Обучение проходит в три этапа: самообучение с учителем на этапе предобучения, где следующее слово в обычном тексте служит собственной меткой; дообучение на инструкциях по парам «запрос–ответ», написанным людьми; и обучение с подкреплением на основе обратной связи от людей (RLHF), которое согласовывает вывод модели с человеческими предпочтениями. Каждый этап порождает модель с иными характеристиками.

ЭтапВходные данныеОткуда берётся «метка»Что получается на выходе
ПредобучениеОгромный неразмеченный текст (веб, книги, код)Следующее слово в самом тексте — разметка людьми не требуетсяБеглый завершитель текста, продолжающий любой запрос, но не следующий инструкциям
Дообучение на инструкцияхОтобранные пары «запрос–ответ»Люди пишут желаемые ответыМодель, отвечающая на вопросы и следующая инструкциям как ассистент
RLHFВыводы модели, ранжированные людьмиСуждения людей о предпочтениях обучают модель вознагражденияВывод, согласованный с требованиями полезности, безвредности и соответствия задаче

Предобучение является самообучением с учителем: поскольку правильное следующее слово уже находится в тексте, обучающий сигнал бесплатен и практически неограничен — каждое предложение в интернете является размеченным примером. Модель начинает со случайных весов, делает ужасные предсказания и улучшается на сотнях миллиардов примеров, корректируя веса для снижения ошибки предсказания (математика этой корректировки — обратное распространение ошибки, подробно описанное в других источниках). В статье 2020 года о законах масштабирования (Каплан и соавторы) было обнаружено, что точность модели улучшается как степенной закон с ростом размера модели, объёма обучающих данных и вычислительных ресурсов — эмпирический результат, обосновавший создание всё более крупных моделей.

Чисто предобученная модель — это просто завершитель текста. Спросите её «What is your first name?», и она может продолжить «What is your last name?», потому что это правдоподобное продолжение, а не потому что она намеренно уклоняется от ответа. Дообучение на инструкциях и RLHF исправляют это. Процесс превращения сырой модели в ассистента был описан в статье InstructGPT (Оуян и соавторы, 2022) — работе, непосредственно лежащей в основе ChatGPT, который был запущен как публичный исследовательский превью 30 ноября 2022 года. Большинство современных чат-моделей обучается по какому-либо варианту этого конвейера, хотя точные рецепты являются проприетарными.

Два замечания о числах. Часто цитируемые показатели GPT-3 — 175 миллиардов параметров, 96 слоёв, эмбеддинги размерностью 12 288, словарь из 50 257 токенов — взяты из статьи GPT-3 2020 года и полезны как конкретная иллюстрация, а не как актуальные спецификации. Фронтирные лаборатории больше не публикуют количество параметров своих последних моделей: нет официальных данных о параметрах текущей серии GPT-5, Claude Opus/Sonnet/Haiku или линеек Gemini 3.x. Любые утверждения вида «X триллионов параметров» о современной модели следует считать слухами.

Как работает генерация: сэмплирование, температура и почему вывод вероятностен

Когда LLM генерирует текст, она запускает цикл предсказания по одному токену за раз и делает выборку следующего токена из вычисляемого ею распределения вероятностей — она не просто выдаёт «ответ». Вот этот цикл в псевдокоде:

tokens = tokenize(prompt)
while not done:
    logits = model.forward(tokens)        # one score per vocabulary token
    probs  = softmax(logits / temperature) # convert scores to probabilities
    next_token = sample(probs)             # pick one, weighted by probability
    tokens.append(next_token)
    if next_token == END_OF_TEXT:
        break
output = detokenize(tokens)

Параметр temperature управляет тем, как оценки преобразуются в вероятности. По умолчанию LLM является вероятностной, а не детерминированной: температура выше нуля означает, что один и тот же запрос может давать разные ответы, поскольку модель делает выборку из распределения, а не всегда выбирает единственный наиболее вероятный токен. При температуре 0 модель становится жадной — она всегда выбирает токен с наибольшей вероятностью — что примерно соответствует детерминированному поведению и хорошо подходит для кода или извлечения информации. Более высокие температуры выравнивают распределение, делая токены с низкой вероятностью более вероятными, а вывод — более разнообразным. Параметр temperature задокументирован в справочнике OpenAI API и справочнике Anthropic Messages API; оба позволяют задавать его для каждого запроса.

Вот почему повторный запуск одного и того же промпта в ChatGPT может давать разные ответы, и почему «установить temperature в 0» является стандартным советом, когда вам нужен воспроизводимый вывод из API.

Распространённые заблуждения об LLM

Ряд интуитивных представлений о работе LLM неверен, и каждое из них приводит к тому, что разработчики неправильно используют инструменты или неверно интерпретируют их ошибки. Слово «на самом деле» в заголовке этой статьи призвано исправить именно их.

ЗаблуждениеКак оно есть на самом деле
«Модель ищет ответ в базе данных.»Никакой таблицы фактов для извлечения не существует. Модель вычисляет новое распределение вероятностей по всему словарю на каждом шаге.
«Модель знает ответ до того, как его пишет.»Каждый токен выбирается на основе предшествующих токенов. Ответ строится слева направо, а не извлекается целиком.
«Параметры хранят факты в виде читаемого текста.»Параметры — это числовые веса. «Факты» — это размытые статистические паттерны, распределённые по миллиардам весов, а не извлекаемые строки.
«Модель детерминирована — одинаковый ввод даёт одинаковый вывод.»При температуре > 0 модель делает выборку, поэтому идентичные запросы могут давать разные продолжения.

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

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

Почему LLM ведут себя именно так

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

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

Контекстные окна. Контекстное окно — это фиксированное количество токенов, которые модель может учитывать одновременно; всё, что выходит за этот предел, просто недоступно модели — вот почему длинный чат в итоге «забывает» своё начало. По состоянию на июнь 2026 года современные фронтирные модели сходятся примерно к окну в один миллион токенов: Gemini 3.5 Flash обрабатывает 1 048 576 входных токенов, Claude Opus 4.8 по умолчанию имеет окно в 1 млн токенов, а серия GPT-5 предлагает окно в 1 млн токенов через API. Большое, но всё равно фиксированное: как только ваш разговор или кодовая база превышает его, старейшие токены оказываются за пределами видимости модели.

Чувствительность к промпту, цепочка мыслей и few-shot. Точная формулировка вашего запроса смещает распределение вероятностей и, следовательно, ответ, поскольку вывод вычисляется токен за токеном на основе предшествующих токенов. Это же свойство объясняет, почему работают приёмы промптинга. Few-shot промптинг (демонстрация готовых примеров) засевает контекст паттерном, продолжение которого вы хотите получить. Промптинг с цепочкой мыслей («think step by step») работает потому, что собственный сгенерированный текст модели становится частью входных данных, которые она читает следующими — промежуточные шаги выступают рабочей памятью, на которой модель может строить дальнейшие рассуждения, вместо того чтобы вынуждать её выдавать финальный ответ за один прыжок.

Заземление и RAG. Retrieval-augmented generation помещает релевантные документы непосредственно в запрос, чтобы модель могла извлекать факты через механизм внимания к тексту перед ней, а не из своих «дырявых» весов прямого распространения. Вот почему модель с доступом к веб-поиску или вашим документам в контексте точнее отвечает на конкретные вопросы — вы переложили бремя с «вспомнить это из обучения» на «прочитать это из запроса», что архитектура делает значительно надёжнее.

Вопрос о «стохастических попугаях»

Является ли предсказание следующего токена подлинным пониманием или изощрённой имитацией — открытый и дискуссионный вопрос. Скептическая точка зрения была сформулирована в статье 2021 года On the Dangers of Stochastic Parrots (Бендер, Гебру и соавторы), в которой утверждалось, что модель, сшивающая обучающий текст по статистической вероятности без какой-либо укоренённости в смысле, является скорее попугаем, чем разумом. Противоположная точка зрения состоит в том, что достаточно хорошее предсказание текста требует сжатой, пригодной для использования модели описываемого им мира. Механика, изложенная в этой статье, установлена; эта интерпретация — нет, и вам не нужно её разрешать, чтобы эффективно пользоваться инструментами.

Что вам действительно нужно — это механическая модель: токены на входе, слои внимания и прямого распространения, уточняющие их на множестве слоёв трансформера, распределение вероятностей на выходе, по одному токену за раз. Держите эту картину в голове, и в следующий раз, когда Copilot выдумает метод или ChatGPT начнёт противоречить сам себе на третьем шаге разговора, вы будете точно знать, какая часть механизма это породила — и, что не менее важно, какое изменение промпта или шаг с извлечением данных это исправит.

Часто задаваемые вопросы

В чём разница между токеном и словом в LLM?

Токен — это субсловный фрагмент, а не слово. Токенизатор разбивает текст на части, которые могут быть целым словом, фрагментом слова, например «ing», одним символом или знаком препинания, а затем сопоставляет каждую часть с целочисленным идентификатором. Распространённое слово может быть одним токеном, тогда как редкое слово разбивается на несколько. Модель всегда оперирует этими идентификаторами токенов, а не сырыми словами или буквами — вот почему задачи на уровне символов, например подсчёт букв, идут вразрез с тем, как модель представляет текст.

Увеличение контекстного окна повышает точность LLM?

Не напрямую. Большее контекстное окно лишь позволяет модели учитывать больше токенов одновременно; оно не делает модель лучше в рассуждениях или запоминании. Качество может по-прежнему снижаться, когда релевантная информация находится далеко от того места, где она нужна, а слишком большой объём нерелевантного текста в запросе может ослабить полезный сигнал. Преимущество состоит в том, что меньше ранних токенов оказывается за пределами окна, поэтому модель «забывает» меньше из длинного разговора или документа.

Если установить temperature в 0, будет ли LLM всегда давать одинаковый вывод?

Temperature 0 делает генерацию жадной — всегда выбирается токен с наибольшей вероятностью, что примерно соответствует детерминированному поведению для данной модели и запроса. На практике точная воспроизводимость не всегда гарантирована между вызовами API из-за таких факторов, как недетерминизм операций с плавающей точкой на параллельном оборудовании, изменения версий модели и маршрутизация на стороне провайдера. Temperature 0 — правильная настройка, когда вам нужен стабильный вывод для кода или извлечения информации, но воспринимайте её как близкую к детерминированной, а не как жёсткую гарантию.

Почему retrieval-augmented generation снижает количество галлюцинаций?

RAG помещает релевантные документы непосредственно в запрос, чтобы модель могла извлекать факты через механизм внимания к тексту перед ней, а не из своих «дырявых» весов прямого распространения. Архитектура извлекает информацию из запроса значительно надёжнее, чем воспроизводит размытые паттерны, усвоенные в процессе обучения. Это смещает задачу с «вспомнить этот факт» на «прочитать этот факт» — вот почему модель с вашими документами или результатами веб-поиска в контексте отвечает на конкретные вопросы точнее, хотя она всё равно может неверно прочитать или использовать предоставленную информацию.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — self-hosted, with full data ownership.

Star on GitHub

We use cookies to improve your experience. By using our site, you accept cookies.