Минимализм как высшая форма понимания
В мире, где GPT-5.3-Codex-Spark умещается на чипе размером с тарелку, а модели измеряются триллионами параметров, Андрей Карпаты сделал обратное. Он написал GPT. С нуля. На 200 строках чистого Python. Без PyTorch, без TensorFlow, без единой зависимости.
Это не очередной учебный проект. Это хирургический разрез, показывающий анатомию современного ИИ. Когда все говорят о масштабировании, Карпаты показывает фундамент. И этот фундамент удивительно прост.
Важный контекст: Этот код написан в 2023 году, но принципы остались неизменными. Современные GPT-5.2 и GPT-5.3 используют ту же архитектуру, просто в масштабе, который трудно представить. Разбирая microgpt, вы понимаете, что происходит внутри гигантов.
Проблема: черный ящик размером с вселенную
Откройте документацию к любому трансформеру. Вы увидите десятки абстракций, слоев оберток, оптимизаций. Попробуйте разобраться в коде реальной GPT - это тысячи строк на C++, CUDA, сложнейший граф вычислений.
Результат? Большинство разработчиков используют LLM как магические черные ящики. Они знают про промпты, про секретные промпты для GPT-5.2, про тонкую настройку. Но не понимают, как модель на самом деле генерирует текст. Какое внимание? Какие веса? Почему она вообще работает?
Карпаты решает эту проблему радикально. Он убирает все. Оставляет только математику.
Решение: 200 строк, которые объясняют все
Microgpt - это реализация GPT-2 архитектуры. Но не полномасштабной 1.5-миллиардной модели. А ее ядра. Того самого механизма, который делает GPT GPT.
Вот что там есть:
- Токенизация через Byte Pair Encoding (BPE)
- Эмбеддинги для токенов и позиций
- Многослойный трансформер с самовниманием
- Прямое распространение через линейные слои и GELU
- Автоматическое дифференцирование (своя реализация!)
- Обучение через AdamW и косинусный шедулер
И все это - в одном файле. Без импортов кроме стандартной библиотеки Python.
Пошаговый разбор: что скрыто в этих 200 строках
1 Токенизация - не такая простая, как кажется
Первое, что бросается в глаза - реализация BPE. Всего 50 строк кода, но они делают то же самое, что и огромная библиотека Hugging Face tokenizers.
Как это работает? Берем текст. Разбиваем на байты. Находим самые частые пары байтов. Заменяем их на новые токены. Повторяем 10,000 раз. Получаем словарь из 50,256 токенов - ровно как в GPT-2.
Магия в деталях. Карпаты не использует готовые таблицы BPE. Он обучает токенизатор на лету. На том же тексте, на котором будет обучаться модель. Это важно: токенизатор и модель должны быть согласованы.
2 Эмбеддинги: слова становятся векторами
После токенизации получаем последовательность чисел. Например, [15496, 2159, 318, 257]. Что с ними делать?
Сначала превращаем каждый токен в вектор. Берем матрицу размером vocab_size × n_embd. Для токена 15496 берем 15496-ю строку этой матрицы. Получаем вектор размерности n_embd (скажем, 768).
Но порядок слов важен! "кошка съела мышь" ≠ "мышь съела кошку". Поэтому добавляем позиционные эмбеддинги. Для первой позиции - один вектор, для второй - другой, и так до максимальной длины контекста.
Складываем токенные и позиционные векторы. Получаем вход для трансформера.
Ошибка, которую все делают: Многие думают, что эмбеддинги - это просто таблица поиска. На самом деле это обучаемые параметры. Во время обучения модель учится, какие векторы лучше всего представляют смысл токенов в разных контекстах.
3 Сердце GPT: механизм самовнимания
Вот где начинается настоящая магия. Механизм внимания - это то, что отличает трансформеры от всего, что было до них.
Как он работает в microgpt:
- Берем эмбеддинги (batch_size, seq_len, n_embd)
- Проецируем их в три пространства: Query, Key, Value (линейные слои)
- Вычисляем attention scores = Q @ K^T / sqrt(d_k)
- Применяем маску, чтобы модель не "заглядывала в будущее"
- Softmax по последней оси - получаем веса внимания
- Умножаем веса на V - получаем выход внимания
Звучит абстрактно? Представьте так: для каждого слова в последовательности модель вычисляет, насколько оно должно "обращать внимание" на все предыдущие слова. Если мы генерируем текст "кошка съела...", то слово "съела" будет сильно внимательно к "кошка", а следующее слово (скажем, "мышь") - к обоим предыдущим.
В microgpt это реализовано в 30 строках. В реальной GPT-5.3 - это оптимизированный до предела код на CUDA, но логика та же.
4 Автоматическое дифференцирование: своя реализация
Самая безумная часть microgpt. Карпаты реализует autograd с нуля. В 60 строках.
Зачем? Чтобы показать, что backpropagation - это не магия. Это цепное правило дифференцирования, реализованное через граф вычислений.
Каждая операция (сложение, умножение, матричное умножение, softmax) знает, как вычислять свои производные. Во время прямого прохода мы строим граф. Во время обратного - идем по графу назад, применяя цепное правило.
Вот как выглядит базовый класс для операций:
class Tensor:
def __init__(self, data, _children=(), _op=''):
self.data = data
self.grad = 0
self._backward = lambda: None
self._prev = set(_children)
self._op = _op
def backward(self):
topo = []
visited = set()
def build_topo(v):
if v not in visited:
visited.add(v)
for child in v._prev:
build_topo(child)
topo.append(v)
build_topo(self)
self.grad = 1
for v in reversed(topo):
v._backward()Элегантно? Да. Производительно? Нет. Но для обучения маленькой модели на CPU хватает. Главное - принцип ясен.
Обучение: от случайных чисел к осмысленному тексту
Инициализируем веса случайно. Подаем на вход текст Шекспира (или любой другой). Предсказываем следующее слово. Сравниваем с реальным следующим словом. Вычисляем ошибку через cross-entropy loss.
Делаем backward(). Градиенты текут по графу. Обновляем веса через AdamW. Повторяем 10,000 раз.
Что происходит? Модель учится статистике языка. Она понимает, что после "кошка" часто идет "съела", что предложения начинаются с заглавной буквы, что есть грамматические структуры.
Через несколько часов обучения на CPU microgpt начинает генерировать псевдо-шекспировский текст. Кривой, с ошибками, но узнаваемый.
Почему это важно сегодня, в 2026 году?
Казалось бы, зачем разбирать упрощенную реализацию, когда есть GPT-5.3-Codex-Spark на чипе? Когда бизнес массово переходит на компактные LLM под конкретные задачи?
Причин несколько:
- Понимание, а не использование: 95% разработчиков используют LLM через API. Они не понимают, что происходит внутри. Microgpt ломает эту стену.
- Образовательная ценность: Это лучший учебный материал по трансформерам. Лучше любой статьи, любого курса.
- Демонстрация принципов: Архитектура не изменилась с GPT-2. Увеличился масштаб, появились оптимизации, но core остался тем же.
- Возможность экспериментов: Хотите понять, как работает тонкая настройка для RAG? Модифицируйте microgpt. Добавьте свои данные. Посмотрите, как меняются веса.
Ограничения и что microgpt НЕ показывает
Честно о недостатках:
| Что есть в microgpt | Что отсутствует в реальных моделях |
|---|---|
| Базовая архитектура трансформера | Оптимизации внимания (FlashAttention, кэширование KV) |
| Обучение на CPU | Распределенное обучение на тысячах GPU |
| Наивный autograd | Смешанная точность, градиентный чекпоинтинг |
| Один файл, 200 строк | Миллионы строк кода, десятки зависимостей |
Microgpt не покажет вам, как работает гибридная архитектура Genesis-152M. Не объяснит все тонкости распределенного обучения. Но даст что-то более важное - интуицию.
Как использовать microgpt для реального обучения
Скачайте код с GitHub Карпаты. Запустите. Увидите, как модель обучается на тексте Шекспира.
Потом модифицируйте:
- Замените датасет на свой (код, документация, диалоги)
- Увеличьте размер эмбеддингов с 64 до 256 или 512
- Добавьте больше слоев трансформера
- Реализуйте механизм генерации с температурой и top-p sampling
- Добавьте возможность дообучения (fine-tuning)
Через неделю таких экспериментов вы поймете трансформеры лучше, чем после прочтения десяти статей.
Предупреждение: Не пытайтесь использовать microgpt в продакшене. Это образовательный проект. Для реальных задач берите готовые решения или фреймворки вроде полного стека для AI-разработки.
Что дальше? От microgpt к пониманию современных моделей
Разобрав microgpt, вы получаете фундамент. Теперь можно смотреть на реальные реализации:
- Как устроен attention в реальных GPT? Посмотрите на реализацию FlashAttention-2
- Как работают MoE (Mixture of Experts) слои в больших моделях?
- Что такое speculative decoding и как он ускоряет генерацию?
- Как устроен GliNER2 для извлечения структурированных данных внутри?
Но самое главное - вы перестаете бояться. GPT больше не магический черный ящик. Это матричные умножения, softmax, градиенты. Сложные, масштабные, но понятные.
Карпаты показал: чтобы понять ИИ, не нужны суперкомпьютеры. Нужны 200 строк Python и желание разобраться. В эпоху, когда ИИ становится все сложнее, такой подход - редкая роскошь. И бесценный подарок для всех, кто хочет не просто использовать, а понимать.