Как Андрей Карпатый собрал GPT из 200 строк кода

Andrej Karpathy 7,1 млн 1 ч 56 мин 4 мин 17.01.2023
Главное

17 января 2023 года Андрей Карпатый опубликовал видеоруководство по созданию архитектуры GPT с нуля. Он демонстрирует процесс написания кода на языке Python с использованием библиотеки PyTorch. Главная цель урока — показать внутреннее устройство трансформеров, которые лежат в основе ChatGPT.

📊 Подготовка данных и токенизация 7:53

Андрей Карпатый использует набор данных Tiny Shakespeare объёмом около 1 МБ . Этот файл содержит все произведения Шекспира, объединённые в одну строку из 1 миллиона символов . Для обучения модели автор выбирает посимвольную токенизацию вместо обработки целых слов.

Процесс обработки данных включает:

В индустрии чаще используют субсимвольную токенизацию (subword tokenization). Например, Google применяет SentencePiece, а OpenAI в своих моделях GPT использует библиотеку TikToken и алгоритм Byte Pair Encoding (BPE) . Посимвольный подход в данном уроке выбран для максимальной простоты кода .

🧱 Формирование обучающих блоков и батчей 14:40

Модель не получает весь текст целиком, так как это вычислительно невозможно. Данные подаются случайными фрагментами заданной длины, которую называют block_size или контекстным окном .

Технические особенности формирования выборки:

Андрей Карпатый использует функцию torch.stack для объединения одномерных фрагментов в тензоры размерности BxT (Batch by Time) .

📉 Базовая модель Bigram Language Model 22:11

В качестве отправной точки автор строит простейшую модель Bigram. В ней вероятность появления следующего символа зависит только от текущего . Модель использует таблицу эмбеддингов (nn.Embedding) размером 65x65 .

Результаты работы Bigram-модели:

После 10 000 итераций обучения потери снижаются до 2.5, но текст всё ещё остаётся трудночитаемым .

🧠 Механизм Self-Attention: математический трюк 42:13

Для улучшения предсказаний токены должны учитывать контекст. Самый простой способ — усреднить векторы предыдущих токенов . Андрей Карпатый показывает, как эффективно реализовать это через матричное умножение .

Ключевой метод реализации:

  1. Создание нижней треугольной матрицы tril из единиц с помощью torch.tril .
  2. Нормализация строк матрицы так, чтобы их сумма равнялась 1 .
  3. Матричное умножение этой маски на тензор данных для получения скользящего среднего.

В трансформерах этот процесс расширяется до Softmax-нормализации. Автор заполняет верхний треугольник матрицы значениями -inf (минус бесконечность), чтобы модель не могла «заглядывать в будущее» при обучении .

🔗 Реализация голов внимания (Query, Key, Value) 1:02:13

Self-attention в GPT работает на основе трёх векторов для каждого токена: Query (Запрос), Key (Ключ) и Value (Значение) .

Принцип взаимодействия:

Аффинитет (степень связи) вычисляется как скалярное произведение Query одного токена и Key всех предыдущих токенов . Полученные веса масштабируются делением на квадратный корень из размерности головы (Scaled Dot-Product Attention), чтобы контролировать дисперсию при инициализации .

🏗️ Сборка полнофункционального трансформера 1:20:55

Андрей Карпатый объединяет компоненты в полноценную архитектуру, следуя статье «Attention is All You Need» .

Стандартный блок трансформера включает:

Автор отмечает, что в современных реализациях (включая GPT) слой нормализации ставят перед блоком внимания (Pre-norm), в отличие от оригинальной статьи 2017 года .

🚀 Масштабирование и обучение 1:39:32

Для финального обучения Андрей Карпатый увеличивает параметры модели. Он устанавливает 6 слоёв трансформера, 6 голов внимания и размерность эмбеддинга 384 . Контекстное окно расширяется до 256 символов .

Результаты финальной модели:

Модель насчитывает около 10 миллионов параметров, что в тысячи раз меньше GPT-3 (175 миллиардов параметров) .

🤖 Путь от GPT к ChatGPT 1:49:05

Андрей Карпатый объясняет, что обученная модель является лишь «достройщиком документов» (document completer) . Чтобы превратить её в помощника вроде ChatGPT, требуется второй этап — Fine-tuning (тонкая настройка).

Этапы превращения в ассистента:

  1. SFT (Supervised Fine-tuning): обучение на специально отобранных диалогах «вопрос-ответ» .
  2. Reward Model: создание модели, которая оценивает качество ответов .
  3. PPO (Reinforcement Learning): использование обучения с подкреплением для максимизации оценок от модели вознаграждения .

Библиотека nanoGPT, созданная автором, фокусируется именно на первом этапе — предварительном обучении (pre-training) .

💬 Цитаты

«Внимание — это механизм коммуникации между узлами в направленном графе.»

Андрей Карпатый 1:11:45

«Трансформер — это архитектура, которая захватила мир ИИ за последние пять лет.»

Андрей Карпатый 02:51
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Токенизация
Процесс разбиения текста на мелкие единицы (токены), такие как символы или части слов.
Эмбеддинг
Представление токена в виде вектора чисел в многомерном пространстве.
Self-attention
Механизм, позволяющий модели определять важность других токенов в контексте при обработке текущего токена.
Логиты
Сырые предсказания модели до применения функции Softmax.
Residual Connection
Метод архитектуры нейросетей, при котором входной сигнал добавляется к выходу слоя, минуя нелинейные преобразования.
📊 Цифры
🗓 Хронология
  1. 2017 Публикация статьи «Attention is All You Need» с описанием архитектуры трансформера.
  2. 2023-01-17 Выход видеоурока Андрея Карпатого по сборке GPT.
⚖️ Другая сторона
Искусственный интеллект Andrej Karpathy PyTorch Transformer Self-attention GPT