00 · Основы: пять идей, которые тебе действительно нужны
Всё в этом туториале — внимание (attention), градиенты, трансформеры — построено из пяти идей, и ни одна из них не сложнее того, что ты видел на хорошем школьном уроке математики. Эта страница даёт каждую из них простым языком, с той самой терминологией, которой пользуются следующие уроки. Если ты уже знаешь все пять — смело прыгай в 01 · Обзор. А если какой-нибудь урок вдруг покажется написанным на иностранном языке — возвращайся сюда.
1. Модель — это просто функция
В школе функция — это что-то вроде f(x) = 3x + 2: числа на входе, числа на
выходе. Языковая модель — ровно то же самое, просто больше. microGPT — это
функция, которая берёт несколько символов на вход и выдаёт ~27 чисел на
выход (по одной оценке на каждый возможный следующий символ). Вся функция
собрана из сложений, умножений и пары кривых вроде exp(x). Внутри нет
никакой магии, нет базы заученных предложений — только арифметика.
Фишка вот в чём: в этой функции примерно 4 000 ручек, которые называются параметрами (или весами). Покрути ручки — и тот же вход даст другой выход. «Обучение» — это и есть кручение ручек до тех пор, пока выходы не станут хорошими. В этом вся игра.
2. Символы становятся числами (токены)
Функции едят числа, а не буквы. Поэтому первый шаг — скучная таблица
соответствий: a → 1, b → 2, … Это называется токенизацией, а каждое
такое число — токен (token). Большие модели вроде ChatGPT используют в
качестве токенов куски слов; microGPT не усложняет — один токен на символ.
Есть ещё один особый токен, который на входе означает «НАЧАЛО текста», а на
выходе — «СТОП».
3. Векторы, матрицы и скалярное произведение
Вектор — это просто список чисел, например [2, -1, 3]. Матрица —
таблица чисел. Вот и всё: когда урок говорит «эмбеддинг — это 16-мерный
вектор», это значит «этот символ представлен списком из 16 чисел».
Единственная операция, которую обязательно нужно знать, — скалярное произведение (dot product): перемножь два вектора позиция за позицией и сложи всё вместе.
[1, 2, 3] · [4, 0, -1] = 1·4 + 2·0 + 3·(-1) = 1Зачем оно? Потому что скалярное произведение — это мера похожести. Если два вектора смотрят в одну сторону, скалярное произведение большое и положительное; если они никак не связаны — оно близко к нулю; если противоположны — отрицательное. Внимание (урок 03) почти целиком построено на этом одном трюке: «насколько то, что я ищу, похоже на то, что предлагает каждый предыдущий символ?»
Умножение матриц — это ничуть не страшнее, чем много скалярных произведений разом: каждая строка одной таблицы скалярно умножается на каждый столбец другой.
4. Производная — это ручка чувствительности
Возможно, ты знаешь производную как «наклон кривой». Вот более полезное для этого туториала прочтение: производная отвечает на вопрос
Если я чуть-чуть подтолкну этот вход вверх, насколько и в какую сторону сдвинется выход?
Если f(x) = x² и x = 3, производная равна 6: сдвинь x вверх на волосок —
и f поднимется примерно на 6 волосков. Когда у функции много входов, это
число называется градиентом — по одному числу чувствительности на каждую
ручку.
Почему это важно: обучению нужно знать про каждую из 4 000 ручек — «если я поверну эту ручку вверх, ошибка модели станет лучше или хуже, и насколько?» Градиент — это ровно тот список ответов. А дальше рецепт почти до смешного прост: подтолкни каждую ручку на крошечный шаг в сторону уменьшения ошибки и повтори тысячи раз. Это градиентный спуск — то самое «обучение» в машинном обучении.
Цепное правило — это способ протащить градиенты через цепочку операций:
чувствительности перемножаются, как передаточные числа шестерёнок. Если
удвоение a учетверяет b, а удвоение b утраивает c, то толчок a
сдвигает c с коэффициентом 4 × 3. Урок 02 показывает это буквально — как
импульсы, текущие назад по графу; и стоит это один раз увидеть, как
загадочный вызов .backward() в каждом фреймворке глубокого обучения
перестаёт быть загадочным.
5. Оценки становятся вероятностями (софтмакс)
Сырые выходы модели — это 27 произвольных оценок, которые называются
логитами (logits) — что-нибудь вроде [2.3, -1.1, 0.4, …]. А нам нужны
вероятности: 27 положительных чисел, дающих в сумме 1. Преобразователь
называется софтмакс (softmax):
- Возьми
exp()от каждой оценки — теперь всё положительное, а большие оценки стали намного больше. - Подели каждую на общую сумму — теперь они дают в сумме 1.
Вот и вся функция. Большая оценка превращается в большую вероятность, маленькая — в маленькую, и ничто никогда не становится ровно нулём — у каждого символа остаётся хотя бы крошечный шанс. Когда урок 05 играет со слайдером температуры, он всего лишь делит оценки на константу перед софтмаксом: высокая температура сглаживает различия (больше случайности, больше творчества), низкая — заостряет их (больше уверенности, больше повторов).
Как уроки используют эти идеи
| Урок | О чём он | На какие идеи опирается |
|---|---|---|
| 01 · Обзор | Весь цикл за 30 секунд | функции (1), токены (2), софтмакс (5) |
| 02 · Автоград | Как .backward() вычисляет каждый градиент | производные и цепное правило (4) |
| 03 · Внимание | Как символ «смотрит» на более ранние символы | скалярное произведение (3), софтмакс (5) |
| 04 · Блок трансформера | Полный прямой проход, собранный от и до | все сразу |
| 05 · Обучение и генерация | Как ручки по-настоящему крутятся | градиенты (4), софтмакс и температура (5) |
Застрял на каком-то слове дальше? Загляни в Глоссарий — каждый термин, которым пользуются уроки, по одному безжалостному предложению на каждый.
И напоследок, для бодрости духа: microGPT — это ~150 строк обычного Python. Не 150 000 — 150. К концу урока 05 ты увидишь, как каждая из них делает свою работу в 3D. После этого в GPT не останется ни одного чёрного ящика.