microGPT: как работает GPT в одном маленьком файле

Этот интерактивный гайд разбирает файл microgpt.py построчно: от загрузки данных и собственного autograd до внимания, Adam-обновления и генерации новых имён. Все объяснения ниже даны на русском языке и в светлой теме.

199 строкполный цикл обучения + инференс
0 ML-фреймворковбез PyTorch/NumPy в модели
Autograd вручнуюцепное правило через граф вычислений
GPT-скелетэмбеддинги, attention, MLP, Adam, sampling

1) Карта пайплайна: от текста до новых слов

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

2) Карта исходника по блокам

Выберите модуль и посмотрите, что он делает, где находится и какая у него ключевая идея.

3) Лаборатория цепного правила (Autograd)

В `Value.backward()` градиенты идут по графу в обратном топологическом порядке. Ниже мини-симулятор на выражении loss = ReLU(a*b + c)^2 в стиле класса `Value`.

1.2
0.9
-0.5
Градиенты по входам
a = 0.0 dL/da = 0.0 b = 0.0 dL/db = 0.0 u = a*b dL/du = 0.0 c = 0.0 dL/dc = 0.0 v = u+c dL/dv = 0.0 r=ReLU dL/dr L=r^2 dL/dL=1

4) Визуализация self-attention по головам

В коде каждое новое положение добавляет свои `k` и `v` в кэш (`keys/values`) и вычисляет веса внимания через softmax. Ниже демонстрация той же идеи: матрица показывает, на какие прошлые символы смотрит каждый текущий символ.

Будет добавлен BOS в начало
Размер головы: 4 (при n_embd=16 и n_head=4)
токены: 0

5) Калькулятор размера модели

В этом `microgpt.py` веса создаются вручную матрицами без bias и без trainable-параметров в нормализации. Формула ниже соответствует строкам создания `state_dict`.

27
16
1
16
Эмбеддинги Трансформер-блоки LM head

6) Тренировочный цикл как интерактивный таймлайн

Переключайте этапы цикла `for step in range(num_steps)` и смотрите, что происходит в этот момент и какие строки отвечают за шаг.

1 / 7

7) Песочница Adam-обновления

В строках 177-181 параметры обновляются вручную по формулам Adam. Подставьте свои числа и посмотрите один шаг обновления.

Схема как в `microgpt.py`
Результат шага

8) Температура генерации: почему модель пишет по-разному

При инференсе логиты делятся на `temperature` (строка 195), затем делается softmax и случайный выбор. Ниже видно, как температура сжимает или выравнивает распределение вероятностей.

0.50
Нажмите кнопку
История выводится ниже

9) Что важно понять после разбора

Этот файл ценен тем, что показывает не «оптимальный» production-код, а чистую суть алгоритма. Если вы поняли пункты ниже, то устройство GPT уже в руках.

`Value` хранит число + локальные производные `backward()` строит топологический порядок и гонит градиент назад `gpt()` получает 1 токен и обновляет контекст через `keys/values` attention = softmax(dot(q, k)) * v ошибка = средний NLL по последовательности Adam обновляет каждый scalar-parameter отдельно inference: temperature + random.choices

Быстрый порядок чтения файла: 1) строки 29-72 (autograd), 2) 74-90 (инициализация весов), 3) 92-144 (`gpt`), 4) 151-184 (обучение), 5) 186-200 (генерация).