AI-инжиниринг

Как работают LLM изнутри: токены, embeddings, attention

Цели урока

  • Понять как LLM генерирует текст (autoregressive generation) и почему это объясняет галлюцинации
  • Разобраться в токенизации (BPE, tiktoken) и почему она прямо влияет на стоимость
  • Освоить embeddings: как смысл становится вектором и почему king - man + woman = queen
  • Понять attention: Query-Key-Value, multi-head, KV-cache, FlashAttention
  • Научиться выбирать temperature и sampling strategy для разных задач

Предварительные знания

  • Карта AI-индустрии: модели, провайдеры и их различия
  • Понимание роли AI Backend Engineer
  • Ландшафт AI
  • AI для бекендера

2017 год. Google Brain. Восемь авторов публикуют paper на 15 страниц - "Attention Is All You Need". Через три года выходит GPT-3 с 175 миллиардами параметров, и few-shot learning возникает сам собой, без специального обучения. Одно правило: угадай следующий токен из 50 257 вариантов. Этот механизм сейчас пишет код в каждом редакторе планеты - и понимать его изнутри это разница между AI-магией и AI-инженерией.

  • **GitHub Copilot** генерирует токен за токеном - autoregressive в реальном времени прямо в редакторе
  • Русский промпт в 500 слов - примерно 1500 токенов; тот же текст на EN - примерно 600 токенов. Разница в цене - 2.5x
  • **RAG в Perplexity**: документы как embeddings в Qdrant, cosine similarity при каждом запросе к 100M+ пользователей
  • Собеседование на AI Engineer: "Объясни attention mechanism" - вопрос номер один во всех компаниях

Attention Is All You Need

2017 год. Google Brain. 8 авторов - Vaswani, Shazeer, Parmar, Uszkoreit, Jones, Gomez, Kaiser, Polosukhin. Один paper: **"Attention Is All You Need"**. До него - RNN и LSTM: текст обрабатывался последовательно, слово за словом. Долгосрочные зависимости терялись. Transformer уничтожил эту парадигму: все токены параллельно, через механизм self-attention. Обучение ускорилось на порядки. Через год - BERT. Ещё через год - GPT-2. 2020: Brown et al. опубликовали GPT-3 с 175B параметрами - и few-shot learning возник сам собой, без специального обучения. Из 8 авторов 6 ушли из Google и основали собственные стартапы: Aidan Gomez создал Cohere, Noam Shazeer - Character.AI (Google потом выкупил за 2.7 млрд долларов).

LLM - машина предсказания следующего слова

LLM не понимает текст. Она распределяет вероятности по 50 257 вариантам следующего токена. Каждый раз. На каждом шаге. И это работает.

**Large Language Model** - нейросеть, обученная на терабайтах интернет-текста. Одна задача: **предсказать следующий токен**. Не понять. Не запомнить. Предсказать - на основе статистических паттернов, встреченных миллиарды раз.

Затем "Париж" добавляется к контексту - и всё начинается снова. Следующий токен. Ещё один forward pass через все слои нейросети. Это называется **autoregressive generation**: каждый шаг строит на предыдущем, токен за токеном.

**Галлюцинации - не баг.** Это прямое следствие принципа работы. Модель генерирует правдоподобное продолжение, а не истинное. Если в обучающих данных тысячи раз встречалась фраза "Эйнштейн открыл теорию относительности в 1905" - она воспроизводит паттерн. Неважно, правда это или нет в данном контексте.

LLM генерирует ответ:

Токенизация: как текст превращается в числа

Нейросеть не работает с буквами. Ей нужны числа. Между текстом и нейросетью стоит **токенизатор** - и именно он определяет, сколько стоит каждый запрос.

Токен - не слово и не буква. Это **кусок текста**, оптимальный с точки зрения частотности. GPT-4 использует `cl100k_base` токенизатор с **50 257 токенами в словаре** - результат BPE (Byte Pair Encoding): алгоритм слияния частых пар символов до нужного размера словаря. Частые слова - один токен. Редкие - собираются из нескольких.

**Правило большого пальца:** 1 токен - примерно 4 символа на английском, примерно 1-2 символа на русском. Русские промпты "дороже" - за тот же объём текста тратится больше токенов, а платить придётся за каждый.

GPT-4o стоит USD 2.50 за миллион input-токенов. Кажется немного - пока не посчитаешь: 100 000 запросов по 500 токенов = 50M токенов = USD 125 в месяц только на input. Раздутые промпты с лишними пояснениями могут удвоить счёт.

МодельInput (за 1M токенов)Output (за 1M)Контекст
GPT-4oUSD 2.50USD 10.00128K
GPT-4o-miniUSD 0.15USD 0.60128K
Claude 3.5 SonnetUSD 3.00USD 15.00200K
Llama 3 70B (self-hosted)~USD 0.50~USD 1.008K

Текст на русском языке обычно занимает больше токенов чем аналогичный на английском потому что:

Embeddings: смысл как вектор

Число-токен поступает в нейросеть. Но число 15339 само по себе ничего не значит - нужно дать ему **смысл**. Для этого существует embedding layer: таблица, где каждому из 50 257 токенов сопоставлен вектор из чисел с плавающей точкой.

В GPT-2 это 768 чисел на токен. В GPT-3 - 12 288. В современных моделях - тысячи измерений. Эта таблица обучается вместе с остальной нейросетью: градиенты текут назад, каждое использование токена чуть-чуть сдвигает его вектор. Миллиарды микро-сдвигов - и структура языка закодировалась в геометрии пространства.

Это не феномен и не трюк. Это побочный эффект линейной алгебры на масштабе. Та же математика живёт в рекомендательных системах Spotify и Netflix - там треки и фильмы тоже представлены векторами, и "похожесть" - это косинусное расстояние. Один принцип, разные домены.

**Embeddings - основа RAG.** В Retrieval-Augmented Generation документы превращаются в вектора через `text-embedding-3-small` (1536 измерений) и кладутся в vector database (Qdrant, pgvector, Pinecone). Поиск - по cosine similarity. Модель получает найденный контекст и пересказывает его. Об этом - в уроке про RAG.

Cosine similarity между embeddings текстов "JavaScript - язык программирования" и "JS - ЯП для веба" будет:

Attention: как модель понимает контекст

Embeddings кодируют токены изолированно. Но "банк реки" и "банк денег" - одно слово, разный смысл. Статичные embeddings не различают их. Эта проблема не имела чистого решения - до появления механизма attention.

**Self-Attention** позволяет каждому токену "посмотреть" на все остальные и обновить своё представление с учётом контекста. Технически: для каждого токена считаются три вектора - Query, Key, Value. Q умножается на все K, результат - веса важности. Weighted sum по V - обновлённый embedding. Это один "головной" attention.

GPT-4 использует **multi-head attention**: не одна такая операция, а 96 параллельных "голов" на каждом из 120 слоёв. Каждая голова учится смотреть на разные аспекты - одна на синтаксис, другая на кореференцию, третья на факты. При inference хранятся **KV-cache** - чтобы не пересчитывать attention для уже обработанных токенов. Именно KV-cache делает длинные контексты дорогими по памяти.

**O(n²) по токенам.** Attention сравнивает каждый токен с каждым. 128K токенов контекста = 16 миллиардов пар. FlashAttention (используется в vLLM и большинстве инференс-серверов) оптимизирует это через tiling - вычисляет блоками, не материализуя полную матрицу. Но квадратичный рост памяти фундаментален - полностью не устраняется.

Зачем нужен механизм attention в Transformer?

Temperature и sampling: управление выводом

После всех слоёв нейросеть выдаёт вектор из 50 257 чисел - logits. Softmax превращает их в вероятности. Остался один вопрос: как выбрать токен? Взять самый вероятный (greedy decoding)? Или сэмплировать?

Greedy decoding детерминирован, но тупиковый: модель застревает в повторяющихся паттернах. Поэтому введён **temperature** - параметр, который масштабирует logits перед softmax. Меньше temperature - распределение острее (один вариант доминирует). Больше - равномернее (все варианты конкурентны). Temperature=1.0 - оригинальное распределение модели, то на чём она обучалась.

**top_p (nucleus sampling)** - альтернативный подход: берём минимальный набор токенов, чья суммарная вероятность >= p, и сэмплируем только из них. При `top_p=0.9` отрезаются редкие токены-аутсайдеры. **top_k** - ещё проще: оставляем только k самых вероятных. В production: не используй temperature и top_p одновременно - выбери что-то одно.

ЗадачаTemperatureПочему
JSON extraction0Нужен точный, воспроизводимый результат
Классификация0Один правильный ответ
Чат-бот / ассистент0.5-0.7Разнообразно, но адекватно
Креативный текст0.8-1.2Нужна вариативность и неожиданность
Brainstorming1.0-1.5Максимум разнообразия идей

**Для production:** начни с temperature=0 для всех задач. Увеличивай только если ответы слишком однообразны. Speculative decoding (используется в vLLM) позволяет ускорить inference до 3x: маленькая модель-драфтер предлагает несколько токенов, большая верифицирует пачкой - оба sampling режима совместимы.

При построении API, которое извлекает structured data (имя, email, телефон) из текста. Какой temperature выбрать?

LLM "знает" ответы - у неё есть база знаний

LLM воспроизводит статистические паттерны из обучающих данных. Нет базы данных - только веса нейросети

Это разница между поиском и генерацией. Google ищет - LLM генерирует правдоподобное продолжение. Именно поэтому модель уверенно выдаёт несуществующие ссылки: статистически "автор + название + год + URL" - это правдоподобный паттерн. RAG решает эту проблему: кладёт реальный контекст перед генерацией.

Temperature = случайность. Выше temperature - хуже ответы

Temperature управляет распределением вероятностей. Для разных задач нужны разные значения

При temperature=0 модель всегда выбирает самый вероятный токен. Это детерминировано, но может приводить к repetition loop. При temperature=1.0 сэмплируем из оригинального распределения модели - это то, на чём она обучалась. Значения выше 1.0 делают распределение более равномерным - полезно для brainstorming, опасно для фактических задач.

Ключевые концепции

  • LLM = autoregressive token predictor: 50 257 вариантов, каждый шаг - один forward pass через всю нейросеть
  • Токенизация (BPE, cl100k_base): токен != слово. Русский текст в 2-3x дороже английского в токенах
  • Embeddings: вектора смысла. text-embedding-3-small = 1536 измерений, cosine similarity = семантическая близость
  • Attention (QKV, multi-head, KV-cache): каждый токен видит всех. O(n²) - поэтому длинный контекст дорог
  • Temperature + nucleus sampling: 0 для extraction, 0.7 для диалогов, 1.0+ для креатива
  • От GPT-1 (117M параметров) до GPT-4 (~1.8T) - тот же принцип. Масштаб породил нечто похожее на интеллект

Вопросы для размышления

  • Если LLM генерирует по одному токену - почему streaming API выглядит так плавно? Что происходит между каждым токеном?
  • Embeddings позволяют искать по смыслу. Почему тогда поиск в Google до сих пор часто проигрывает RAG-системам по качеству?
  • При temperature=0 модель детерминирована. Значит два одинаковых запроса всегда дадут одинаковый ответ?

Что дальше

Механизм понятен. Следующий шаг - управлять им через API и строить production-системы.

  • Интеграция с LLM API — От теории к практике - подключаем GPT к Node.js
  • Embeddings и Vector DB — Embeddings из этого урока - основа RAG и semantic search
  • Токены и контекстное окно — Глубже про KV-cache, ограничения контекста и стратегии работы с ними

Связанные уроки

  • aie-02-ai-landscape — Ландшафт моделей и провайдеров - фундамент для понимания LLM
  • aie-04-tokens-context-window — KV-cache и лимиты контекста следуют из механики токенов
  • aie-09-embeddings — Embeddings из этого урока - основа RAG и vector search
  • aie-12-rag-fundamentals — RAG использует embeddings и attention механику напрямую
  • nlp-01 — NLP-фундамент: токенизация и языковые модели пересекаются
  • aie-06-prompt-patterns — Prompt engineering строится поверх понимания temperature и sampling
  • dl-03 — Архитектура нейросетей - контекст для понимания Transformer слоёв
  • ml-01
Как работают LLM изнутри: токены, embeddings, attention

0

1

Войти