makemore: MLP по символам и эмбеддинги

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

О чём урок

Из этого урока вы узнаете, почему биграммная модель не может учитывать длинный контекст, и познакомитесь с идеей, которая определила развитие языковых моделей на десятилетия вперёд: заменить символы обучаемыми векторами (эмбеддингами) и предсказывать следующий символ многослойным перцептроном. Мы разберём класс MLP из makemore.py по шагам, проследим за формами тензоров на каждом этапе и напишем собственную компактную реализацию той же идеи без вспомогательной инфраструктуры, чтобы увидеть механику без обёртки классов.

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

Биграммная модель из прошлого урока хранит таблицу: для каждого возможного предыдущего символа строку логитов для следующего. Это работает, но контекст у такой модели предельно короткий: один символ. Модель не различает, стоит ли «н» после «а» в слове «анна» или после «о» в слове «соня», она видит только непосредственно предыдущий символ.

Казалось бы, решение очевидно: взять контекст не из одного, а из нескольких предыдущих символов и завести таблицу логитов для каждой такой комбинации. Для алфавита из V символов и контекста длиной n число возможных комбинаций равно V^n. При V = 27 (26 букв латиницы и символ конца слова) и контексте всего из трёх символов получится уже больше 19 тысяч строк таблицы, и большинство из них почти никогда не встретятся в обучающих данных: такая таблица переобучится и будет плохо обобщаться на новые слова. Контекст из пяти символов даёт уже больше 14 миллионов комбинаций. Табличный подход упирается в экспоненциальный рост размера таблицы и в нехватку данных для её заполнения.

Выход, предложенный Бенджио и соавторами в статье 2003 года о нейронной языковой модели, устроен иначе. Вместо таблицы «контекст → логиты» вводится два слоя абстракции: сначала каждый символ превращается в компактный вектор фиксированной длины (эмбеддинг), затем векторы контекста объединяются и…

План урока

  1. От биграмм к более длинному контексту
  2. Эмбеддинги символов
  3. Устройство MLP в makemore.py
  4. Конфигурация и запуск обучения
  5. Переобучение и недообучение
  6. Наш пример: MLP на своих данных
  7. Попробуйте сами
  8. Итоги

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

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