О чём урок
Из этого урока вы узнаете, почему биграммная модель не может учитывать длинный контекст, и познакомитесь с идеей, которая определила развитие языковых моделей на десятилетия вперёд: заменить символы обучаемыми векторами (эмбеддингами) и предсказывать следующий символ многослойным перцептроном. Мы разберём класс MLP из makemore.py по шагам, проследим за формами тензоров на каждом этапе и напишем собственную компактную реализацию той же идеи без вспомогательной инфраструктуры, чтобы увидеть механику без обёртки классов.
Неофициальный курс AI University по открытому коду (MIT). В уроке приводится код из karpathy/makemore © Andrej Karpathy, лицензия MIT; комментарии переведены на русский, объяснения написаны нашей командой. Курс не связан с автором кода и не одобрен им.
Биграммная модель из прошлого урока хранит таблицу: для каждого возможного предыдущего символа строку логитов для следующего. Это работает, но контекст у такой модели предельно короткий: один символ. Модель не различает, стоит ли «н» после «а» в слове «анна» или после «о» в слове «соня», она видит только непосредственно предыдущий символ.
Казалось бы, решение очевидно: взять контекст не из одного, а из нескольких предыдущих символов и завести таблицу логитов для каждой такой комбинации. Для алфавита из V символов и контекста длиной n число возможных комбинаций равно V^n. При V = 27 (26 букв латиницы и символ конца слова) и контексте всего из трёх символов получится уже больше 19 тысяч строк таблицы, и большинство из них почти никогда не встретятся в обучающих данных: такая таблица переобучится и будет плохо обобщаться на новые слова. Контекст из пяти символов даёт уже больше 14 миллионов комбинаций. Табличный подход упирается в экспоненциальный рост размера таблицы и в нехватку данных для её заполнения.
Выход, предложенный Бенджио и соавторами в статье 2003 года о нейронной языковой модели, устроен иначе. Вместо таблицы «контекст → логиты» вводится два слоя абстракции: сначала каждый символ превращается в компактный вектор фиксированной длины (эмбеддинг), затем векторы контекста объединяются и…
План урока
- От биграмм к более длинному контексту
- Эмбеддинги символов
- Устройство MLP в makemore.py
- Конфигурация и запуск обучения
- Переобучение и недообучение
- Наш пример: MLP на своих данных
- Попробуйте сами
- Итоги
Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.