Учебник «Большие языковые модели»
В предыдущих главах мы собрали машину: токенизатор превращает текст в последовательность номеров (глава 1), эмбеддинги — номера в векторы (глава 2), башня блоков трансформера — векторы в распределение вероятностей следующего токена (глава 3). Осталось главное: миллиарды параметров этой машины изначально заполнены случайным шумом. Процесс, который превращает шум в знание, называется предобучением (pre-training). Для базовых моделей это обычно самый вычислительно дорогой этап, хотя его учебная постановка удивительно проста.
Вся задача формулируется в одну строку: по префиксу текста предсказать следующий токен. Никакой разметки не нужно — «правильные ответы» содержатся в самом тексте, каждый его токен по очереди служит целью для предсказания по предыдущим. Поэтому предобучение называют самоконтролируемым обучением (self-supervised learning): целевая разметка автоматически получается из самого текста.
Модель для позиции i выдаёт распределение вероятностей pθ(t | t1, …, ti−1) по всему словарю (θ — совокупность параметров). Качество измеряется перекрёстной энтропией: штраф за позицию — минус логарифм вероятности, которую модель назначила правильному токену, а потери на тексте — среднее по позициям:
L(θ) = −(1/n) Σi=1..n log pθ(ti | t1, …, ti−1)
Интуиция проста: если модель дала правильному токену вероятность 1, штраф равен нулю; если вероятность мала — штраф велик (логарифм стремится к минус бесконечности). Заметьте, что благодаря причинной маске из главы 3 потери по всем позициям последовательности вычисляются за один проход — каждый токен одновременно и контекст для следующих, и цель для предыдущих; в этом источник эффективности обучения трансформеров.
Производная метрика — перплексия (perplexity): PPL = exp(L). Её можно интуитивно понимать как эффективное число вариантов: перплексия 8 соответствует той же средней логарифмической потере, что и равновероятный выбор из восьми токенов. При почти равномерном распределении случайно инициализированной модели PPL близка к размеру словаря. Сравнивать перплексию корректно лишь на одном корпусе и при совместимой токенизации: разные словари задают разные единицы измерения.
Обучение — это минимизация L(θ) градиентным спуском: градиенты всех параметров вычисляются обратным распространением ошибки, и параметры сдвигаются небольшим шагом против градиента. На практике используется стохастический вариант, часто с оптимизатором AdamW: на каждом шаге берётся случайный батч текста (в крупных обучениях — миллионы токенов на шаг), и таких шагов делаются сотни тысяч. Скелет цикла обучения на PyTorch помещается на полстраницы:
import torch
import torch.nn.functional as F
# model: трансформер из главы 3, отображает (B, n) номеров токенов
# в логиты (B, n, V); data -- итератор батчей токенов (B, n+1)
opt = torch.optim.AdamW(model.parameters(), lr=3e-4)
for batch in data: # batch: (B, n+1)
x = batch[:, :-1] # входы: токены 1..n
y = batch[:, 1:] # цели: токены 2..n+1
logits = model(x) # (B, n, V)
loss = F.cross_entropy(
logits.reshape(-1, logits.size(-1)), # (B*n, V)
y.reshape(-1)) # (B*n,)
opt.zero_grad()
loss.backward() # градиенты всех параметров
opt.step() # шаг оптимизатора
print(f"loss {loss.item():.3f} ppl {loss.exp().item():.1f}")
Сдвиг входов и целей на один токен — вся «разметка», которая нужна. Этот цикл, по существу без изменений, обучает и игрушечную модель на ноутбуке, и модель на сто миллиардов параметров — разница в объёме данных, числе GPU и количестве инженерии вокруг.
При близких архитектурах важным различием становятся данные. Смесь может включать отфильтрованный веб (открытые корпуса часто строятся на слепках Common Crawl), код, книги, научные статьи, энциклопедии и диалоги. Для ряда крупных моделей раскрыты объёмы в триллионы и десятки триллионов токенов, но состав и размер коммерческих корпусов часто не публикуются. Доля каждого источника и качество фильтрации не менее важны, чем общий счётчик токенов.
Подготовка данных — огромная и недооценённая часть работы: извлечение текста из HTML, фильтрация машинного и токсичного мусора, языковая фильтрация, дедупликация (повторы корпуса ухудшают модель и усиливают запоминание конкретных текстов), удаление персональных данных и — критически важно — исключение тестовых наборов бенчмарков, иначе оценки качества теряют смысл (загрязнение, contamination). Возрастает доля синтетических данных — текстов, порождённых другими моделями: ими добирают недопредставленные области (математика, редкие языки), но при неосторожности модель наследует и усиливает ошибки модели-генератора.
Использование текстов для обучения поднимает вопросы авторского права, лицензий, персональных данных и условий доступа. Практика и судебные решения зависят от юрисдикции и продолжают меняться, поэтому происхождение и права на данные надо документировать, а юридические выводы — сверять для конкретного проекта.
Законы масштабирования (scaling laws; Каплан и др., 2020) описывают эмпирическое наблюдение: в исследованных режимах потери на отложенных данных падают примерно степенным образом с ростом числа параметров N, объёма данных D и вычислений C, причём в позднейшей работе о Chinchilla (Хоффман и др., 2022) зависимость от N и D параметризована в виде
L(N, D) ≈ E + A/Nα + B/Dβ
где E, A, B, α и β подбираются по измерениям и зависят от постановки. Практический смысл: серия небольших экспериментов помогает оценить отдачу от дополнительных параметров, данных и вычислений. Такая экстраполяция полезна внутри проверенного диапазона, но не гарантирует качество на отдельной прикладной задаче.
Работа о Chinchilla также уточнила баланс для исследованного семейства плотных моделей: при фиксированном бюджете вычислений параметры и данные выгодно наращивать примерно пропорционально; полученная оценка составляла около 20 обучающих токенов на параметр. Это не универсальная константа. Архитектура, качество данных и стоимость последующего инференса меняют оптимум; поэтому модели, которые будут обслуживать много запросов, иногда намеренно делают меньше и обучают дольше.
Для плотного трансформера часто используют грубую инженерную оценку стоимости обучения:
C ≈ 6 N D операций с плавающей точкой
(порядка 2ND на прямой проход и вдвое больше на обратный). Формула не учитывает часть операций, разреженные MoE-слои, повторное использование данных и потери эффективности оборудования. Например, модель на N = 70·109 параметров и D = 15·1012 токенов — это ~6,3·1024 FLOP; кластер из тысячи ускорителей с полезной производительностью 400 ТФЛОПС каждый посчитает это примерно за 180 суток (или 6000 ускорителей — за месяц). Отсюда понятно, почему крупное предобучение требует значительной инфраструктуры. Реальные срок и стоимость зависят от загрузки ускорителей, сети, памяти, сбоев и цены оборудования. Само обучение при этом ведётся распределённо, комбинируя параллелизм по данным (копии модели обрабатывают разные батчи), по тензорам (слои режутся между ускорителями) и по конвейеру (разные блоки — на разных устройствах); это отдельная большая инженерная дисциплина.
Предсказание следующего токена выглядит простой целью, но для снижения потерь на разнообразных текстах модели приходится усваивать грамматику, стили, программные шаблоны, многочисленные фактические ассоциации и связи между понятиями. Эти внутренние представления не являются полной или гарантированно верной моделью мира, но позволяют переносить закономерности между задачами и языками и обучаться по примерам в контексте (few-shot; глава 8).
Из природы задачи следуют ограничения. Фиксированный обучающий корпус задаёт дату отсечения знаний (knowledge cutoff); более свежие сведения можно подать через поиск и инструменты или добавить последующим обучением. Модель обучена продолжать правдоподобно, а не истинно — отсюда галлюцинации: уверенный тон не подкреплён механизмом проверки фактов. Она усваивает статистику данных вместе с их перекосами и стереотипами. И главное: предобученная модель — ещё не ассистент. На вопрос она может ответить встречным вопросом, продолжить список похожих вопросов или воспроизвести стилистику форума — она делает то, чему её учили: продолжает текст. Путь от «продолжателя текста» к помощнику, который понимает инструкции и отказывается от вредных просьб, — это дообучение: SFT, RLHF и их родственники. Ими откроется вторая часть учебника.
Предобучение превращает текст в саму обучающую задачу: модель минимизирует перекрёстную энтропию следующего токена на большом подготовленном корпусе. Перплексия полезна для сравнения совместимых экспериментов, но не переносится напрямую между разными корпусами и токенизаторами. Законы масштабирования и оценка 6ND помогают планировать вычисления, оставаясь эмпирическими приближениями. Итоговая модель усваивает множество закономерностей данных, но не получает встроенной проверки истины и ещё не становится ассистентом.
Упражнения
1. При почти равномерном распределении перплексия случайной модели близка к размеру словаря. Какой перплексии соответствует средний штраф L = 2,0 ната на токен? Сколько это «эффективных вариантов» выбора?
2. По формуле C ≈ 6ND оцените, во сколько FLOP обойдётся обучение модели на 8 млрд параметров на 15 трлн токенов, и сколько времени займёт обучение на 8 ускорителях по 400 ТФЛОПС. Реалистично ли это для небольшой компании?
3. Соберите из открытых источников (например, объявлений о выпуске открытых моделей) пары (N, D) для пяти–семи моделей и посчитайте отношение D/N. Кто ближе всех к оценке из работы Chinchilla, а кто дальше всех — и почему это может быть осознанным решением? Не называйте эту оценку универсальным оптимумом.