О чём урок
Этот урок завершает сборку трансформера: в прошлый раз вы разобрали механизм self-attention, теперь к нему добавится вычислительная часть блока (MLP), схема остаточных связей с нормализацией и, наконец, класс GPT, который оборачивает всё это в полноценную языковую модель. После урока вы сможете читать model.py от начала до конца, понимать, откуда берётся каждая группа параметров, и самостоятельно создать модель на PyTorch, прогнать через неё случайный батч и получить осмысленную стартовую функцию потерь.
Неофициальный курс AI University по открытому коду (MIT). В уроке приводится код из karpathy/nanoGPT © Andrej Karpathy, лицензия MIT; комментарии переведены на русский, объяснения написаны нашей командой. Курс не связан с автором кода и не одобрен им.
Self-attention решает задачу «коммуникации»: токены обмениваются информацией друг с другом. Но после того как каждый токен собрал нужный контекст, его представление нужно как-то переработать, то есть применить к нему нелинейное преобразование независимо от остальных токенов. Эту работу выполняет MLP (multi-layer perceptron), простой полносвязный блок, который применяется к каждой позиции последовательности отдельно и одинаково.
Обратите внимание на коэффициент 4: первый линейный слой c_fc расширяет размерность эмбеддинга в 4 раза, а второй, c_proj, сжимает обратно. Это расширение даёт сети больше «места» для вычислений внутри блока: промежуточное представление временно живёт в пространстве большей размерности, где нелинейности GELU есть с чем работать, а затем проецируется обратно в n_embd, чтобы форма тензора не менялась от блока к блоку. Именно это расширение в 4 раза даёт основную долю параметров трансформера, что вы увидите чуть ниже на конкретных числах.
GELU (Gaussian Error Linear Unit) здесь используется вместо ReLU: это гладкая функция активации, которая не обрезает отрицательные значения резко до нуля, как ReLU, а плавно уменьшает их вклад, что на практике немного улучшает обучение глубоких сетей.
PyTorch не позволяет напрямую создать nn.LayerNorm без смещения (bias), поэтому в nanoGPT есть своя небольшая обёртка:
LayerNorm нормализует вектор каждого…
План урока
- MLP: вычислительная часть блока
- LayerNorm и схема pre-norm
- Конфигурация GPTConfig
- Класс GPT: эмбеддинги, веса, инициализация
- forward: от индексов токенов к логитам
- Считаем параметры: конфигурация shakespeare_char
- Наш пример: первый прогон модели
- Попробуйте сами
Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.