Что предсказывает языковая модель
Движок вероятностного продолжения
Языковая модель принимает последовательность токенов & назначает вероятностное распределение тому токену, который придёт следующим. Подайте ей the cat sat on the & она выдаст вероятности по всему словарю: высокая масса на mat, floor, couch; низкая масса на xylophone, Tuesday.
Сэмплирование этого распределения, добавление токена & обратная подача: этот цикл генерирует текст по одному токену за раз. Автореgressive generation, названное так потому, что каждый шаг регрессирует на своём собственном предыдущем выводе.
Три числа определяют языковую модель
Размер словаря (V). Сколько различных токенов может генерировать модель. ANDREA-12M использовала 4 353 токена; ANDREA-120M использует 8 449.
Окно контекста (T). Сколько токенов помещается в один проход вперед. Модели ANDREA используют T = 1 024.
Количество параметров (P). Сколько обучаемых весов находится внутри. 12M, 120M и 480M называют семейство по P.
Семья из трёх
| Вариант | d_model | Головы | Слои | Контекст | Параметры |
|---|---|---|---|---|---|
| ANDREA-12M | 384 | 12 | 6 | 1024 | 12.8M |
| ANDREA-120M | 768 | 12 | 12 | 1024 | ~120M |
| ANDREA-480M | 1536 | 24 | 16 | 1024 | ~480M |
Три регулятора масштабирования: d_model (ширина каждого внутреннего вектора), n_layer (глубина стэкированных блоков трансформера), n_head (параллельные проекции внимания). Словарный запас и контекст остаются фиксированными в пределах семейства.
Чтение таблицы семейства
Почему малое имеет значение
Ограничение как освобождение
Большие языковые модели с сотнями миллиардов параметров требуют тысяч GPU, проприетарных наборов данных и корпоративных бюджетов. Немногие могут обучить такую модель. Немногие могут её ремонтировать.
Маленькая языковая модель на одной GPU меняет это. Любой, у кого есть 4090 (или 3060), может воспроизвести ANDREA из открытых данных. Рецепт обучения одновременно служит модельной картой. Открытый код, открытые веса, открытые данные; полная провенансность за 72 часа вычислений.
Ёмкость против качества
Меньшие модели не могут запомнить свой обучающий корпус. ANDREA-12M с 12,8 млн параметров не имеет ёмкости для хранения фактического содержимого; она изучает структуру ходов, распределение словаря и форму ответа. ANDREA-120M с ёмкостью в 10 раз больше изучает фактическое вспоминание, связность многоабзацных текстов и широту доменов (проверено внешней оценкой на 9,5/10 по выборкам по биологии и обработке сигналов).
Главный вывод: ёмкость устанавливает потолок. Учебная программа определяет, будет ли этот потолок достигнут. Активности 14-23 охватывают учебную программу. [TITLE decoder_only/]
Три варианта трансформера
Энкодер, Декодер, Оба
Оригинальный Transformer (Vaswani et al., 2017) включал энкодер и декодер, склеенные вместе для перевода. От этой статьи произошли три архитектурные линии:
Только энкодер (линия BERT). Двунаправленное внимание, без причинной маски. Оптимизировано для классификации, а не генерации. Токен видит и своё прошлое, и своё будущее во время обучения.
Encoder-decoder (T5, BART). Энкодер читает вход; декодер генерирует выход, используя кросс-аттеншн к энкодеру. Используется для перевода, суммаризации.
Decoder-only (GPT, ANDREA). Causal mask: каждый токен видит только прошлое. Обучается предсказывать следующий токен. Генерация бесплатна; обучение и инференс используют один и тот же forward pass.
Почему Decoder-Only побеждает на одной GPU
Три причины:
1. Единая цель. Предсказание следующего токена работает на любом тексте. Не нужны пары источник/цель.
2. Симметрия обучения и инференса. Один и тот же прямой проход, без специальной логики генерации.
3. Простота памяти. Нет кросс-аттеншена; один стек слоёв; один поток активаций.
ANDREA наследует выбор decoder-only от microGPT, который унаследовал от nanoGPT, который унаследовал от GPT-2. Линия остаётся стандартной; то, что меняется, живёт в токенизации, инфраструктуре обучения и учебном плане.
Почему Decoder-Only для ANDREA
Что помещается в 24 ГБ
Байт на параметр
RTX 4090 поставляется с 24 ГБ VRAM. Обучение ANDREA-12M использовало 1,4 ГБ. ANDREA-120M использовало существенно больше. Разница объясняется простым упражнением по учёту: каждый параметр появляется несколько раз в памяти во время обучения.
Для каждого параметра обучение хранит:
- Сам вес (1× вес)
- Первый момент Adam (m): такая же форма, как у весов (1× веса)
- Второй момент Adam (v): такая же форма, как у весов (1× веса)
- Градиенты: такая же форма, как у весов (1× веса)
- Активации и временные переменные: ~2-4× веса (варьируется в зависимости от батча и контекста)
Итого: ~6-8× от количества весов, в байтах определяется точностью.
Точность умножает всё
| Точность | Байт/парам. | Всего для 120M весов | Примечания |
|---|---|---|---|
| FP32 | 4 | 480 МБ | Базовая; самая безопасная, самая медленная |
| FP16 | 2 | 240 МБ | cuBLAS, вдвое меньше памяти |
| FP8 E4M3 | 1 | 120 МБ | Tensor cores, риск NaN |
Умножьте на 6-8× для полного объёма памяти во время обучения. ANDREA-120M комфортно обучается в FP16 (~2 ГБ для весов + оптимизатор + градиенты); FP8 E4M3 вдвое сокращает время обучения на tensor cores RTX 4090.
Активность 13 (grow_a_language_model_precision) подробно разбирает компромиссы точности FP.
Размер состояния оптимизатора ANDREA-120M
Двадцать пять заданий
Две половины
Этот курс делится четко. Первая половина охватывает то, чему microGPT научил область: трансформер, который работает на одной GPU. Вторая половина охватывает реальный вклад ANDREA: учебный план, который учится.
Половина 1: Трансформер на одной GPU (задания 2-13)
| # | Задание | Этап |
|---|---|---|
| 2 | Токенизатор морфем Харриса | распределочная сегментация, словарь 256+N+1 |
| 3 | Выравнивание токенизатор-диета | точка насыщения, почему 12M потратили 63.6% |
| 4 | Вложения и позиция | обученные токены + поиск позиции |
| 5 | Масштабированное скалярное произведение | Q·Kᵀ/√d, причинная маска, softmax |
| 6 | Многоголовое внимание | разделение на головы, параллельные проекции |
| 7 | Блок трансформера | MLP, остатки, нормализация слоя |
| 8 | Кросс-энтропия и перплексия | логарифмическая вероятность, потеря SMMA |
| 9 | Обратное распространение в custom CUDA | правило цепочки через microgpt_cuda.cu |
| 10 | AdamW | развязанный затухание весов; почему обычный Adam умер |
| 11 | LR warmup + cosine decay | 2000-шаговый разгон; почему мгновенный пик уничтожает 120M |
| 12 | Gradient clipping | глобальная L2 норма; 3 CUDA-ядра |
| 13 | FP32 / FP16 / FP8 E4M3 | компромиссы точности; тензорные ядра |
Вторая половина: Учебный план, который учится (активности 14-24)
| # | Активность | Победа |
|---|---|---|
| 14 | Многорукие бандиты | UCB1, исследование против использования |
| 15 | Фазовый контроль кубиков | 7/14/21/28/42 фазы, 1d3/1d4 кубики |
| 16 | Атрибуция вознаграждений и EMA | EMA потерь по источникам, масштабирование 1000× |
| 17 | Минимальные уровни источников и штраф за эпохи | 1/(1+epochs) предотвращает запоминание |
| 18 | Бонус за покрытие | отслеживание на уровне документа, 1.3× свежесть |
| 19 | Разогрев по учебному плану | 7 чат/проза источников первые 20K шагов |
| 20 | Фильтрация по форме, не по символам | has_system_prompt_shape() |
| 21 | Ранний останов с контролем когерентности | bigram/trigram/word/char auto-halt |
| 22 | Чекпоинты, возобновление, сигналы | format, SIGTERM/SIGUSR1, loss.json continuity |
| 23 | Аудит выборки и внешняя оценка | чтение запуска, территория 9.5/10 |
| 24 | От microGPT к ANDREA-120M | v1 collapse, v2 fixes, v2.5 patch, v3 polish |
Плюс компаньон: geometry_of_andrea рассматривает каждый слой как геометрию (пространство встраиваний, внимание как проекцию, поверхность потерь, бандит как прогулку по дискретному симплексу).
Рекомендуемый порядок
Занятия 2–13 строят работающий трансформер. Пропустите к половине 2, если вы уже обучали трансформеры; возвращайтесь, когда любопытство возьмет верх.
Каждое занятие, где возможно, самодостаточно. Ссылки на математику отсылают к предыдущим занятиям по имени (см. занятие 5: scaled dot-product attention). Ссылки на код указывают на microgpt/microgpt_cuda.cu & microgpt/training_proxy.py в ~/git/uncloseai-cli/.