makemore: данные и биграммная модель

Урок 5 из 16 курса «Нейросети с нуля: по открытому коду Андрея Карпати»: неофициальный курс AI University по открытому коду (MIT). Урок входит в платный доступ; первые уроки курса бесплатно.

О чём урок

Из этого урока вы наконец оставите позади микроскопические графы вычислений micrograd и перейдёте к задаче посерьёзнее: генерации новых слов, похожих на слова из обучающей выборки. Это второй проект курса, makemore, и на этом уроке вы разберёте его данные и самую простую из шести моделей, которые в нём реализованы, биграммную. После урока вы будете понимать, как текстовый файл со словами превращается в тензоры для обучения, зачем нужна маска -1 в функции потерь, как связаны подсчёт частот пар символов и обучение логитов градиентным спуском, и как устроена генерация новых слов с учётом температуры.

Неофициальный курс AI University по открытому коду (MIT). В уроке приводится код из karpathy/makemore © Andrej Karpathy, лицензия MIT; комментарии переведены на русский, объяснения написаны нашей командой. Курс не связан с автором кода и не одобрен им.

makemore решает одну задачу: взять список слов, по одному на строку, и научиться выдавать новые слова, которые выглядят так, будто взяты из того же источника. В оригинальном репозитории для этого используется файл names.txt с примерно 32 тысячами английских имён, но тот же код одинаково хорошо работает на любом списке строк: фамилиях, названиях городов, химических соединениях, никах в игре. Дальше в примерах будет использоваться небольшой список: названия российских городов, записанные латиницей, строчными буквами, без пробелов: moskva, kazan, omsk, ufa, tver, pskov, sochi, tomsk, kursk, orel и так далее.

Модель, которую обучает makemore, работает на уровне символов: это языковая модель, которая получает на вход последовательность символов и предсказывает распределение вероятностей для следующего символа. Слово целиком собирается по одному символу за раз: модель генерирует первый символ, затем, видя его, генерирует второй, и так далее, пока не сгенерирует специальный символ конца слова. Такой подход не зависит от длины слова и одинаково применим к короткому "ufa" и длинному "ekaterinburg".

Файл makemore.py в репозитории реализует сразу шесть архитектур: от трансформера и RNN до простейшей биграммной таблицы…

План урока

  1. Задача: генерация похожих слов
  2. CharDataset: как слова становятся тензорами
  3. Биграммная модель: таблица логитов
  4. Подсчёт частот как альтернативный способ обучения
  5. Та же модель, но обученная градиентным спуском
  6. Функция потерь: зачем логарифм и откуда число 3.30
  7. Генерация: температура, top-k и обрезка контекста
  8. Запуск биграммной модели из командной строки

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Полезные гиды