Привет, Хабр. Меня зовут Вика, я работаю в AIRI, преподаю в Школе Анализа Данных и Сколтехе и вместе со своими коллегами занимаюсь обработкой естественного языка, изображений и видео, а также иными задачами, где могли бы пригодиться трансформерные модели. Трансформерные архитектуры — очень мощное орудие, которые может быть применено почти во всех сферах DL, и интереснейший концепт, в котором много потенциала для исследования. А, главное, их очень легко применить к технологиям, которые способны изменить нашу жизнь здесь и сейчас.
На словах всё красиво. Но три года назад мы заметили, что и магистры, и работники индустрии, связанной с AI, часто просят «объяснить, как же все‑таки работают трансформеры, потому что из научной статьи ничего не понятно». Так происходит из‑за того, что многое, что в статьях считается очевидным и само собой разумеющимся, очень плохо разъясняется в учебной литературе или существующих курсах. Как следствие, многие не могут использовать трансформеры для решения практических задач и реализации своих идей.
Эта трудность побудила нас создать полноценный курс по трансформерам, в котором проработаны такие проблемные точки и который адаптирован для студентов с разным профессиональным бэкграундом. О нём я и расскажу в этой статье.
Мы уже апробировали курс на лекциях в Сколтехе, МГУ и Сбер Университете, а также написали в AIRI о нём статью, которую представили на воркшопе по преподаванию на одной из самых популярных мировых конференций по NLP — ACL-2024. Материалы академической версии курса можно найти в нашем репозитории.
Приятного чтения!
Во время планирования курса я уже преподавала в ШАД и одновременно училась в Сколтехе. Это позволило мне сравнить два разных подхода к выдаче заданий.
В первом дают практику по множеству тем, предлагая разобраться примерно с одной из них в неделю и решить несколько несложных практических задач вида «дозаполнить код».
Как показала практика, в режиме интенсивного обучения за неделю пройти тему с нуля нереально. Индивидуальные, по сути, задания становились групповыми, решения копировались у старших курсов и счастливчиков с приятелями‑преподавателями.
Во втором подходе, наоборот, упор ставится на командную работу: за терм — аналог семестра — команда из нескольких человек должна придумать тему и на ее основе создать исследовательский проект. По задумке авторов курса это позволяет не спеша и глубоко изучить выбранную проблему, обсуждая ее с сокомандниками. В реальности команда обычно формировалась вокруг одного‑двух сильных студентов и в качестве проекта бралась уже сделанная им работа.
Мы хотели взять из каждой системы лучшее, минимизировать возможность студенческого чита и создать такую структуру домашних заданий, чтобы
каждый студент курса был гарантированно вовлечен в работу,
работа была непосредственно по теме курса,
студент имел возможность подумать над проблемой, осознать ее, попробовать несколько подходов к решению.
Курс состоит из 14 занятий, включающих в себя лекции и семинары. На лекциях разбираются теоретические аспекты и статьи, релевантные теме. На семинаре «с нуля» решается определенная практическая задача с дискуссией о выбранном методе, подбором датасета и обучением модели.
Касаемо последнего: мы решили сделать два больших задания на месяц по двум наиболее распространенным задачам в NLP: классификации и генерации. В задании по классификации мы просим присвоить каждой единице текста — токену — лейбл, определяющий его роль задаче сравнения двух опций. В задаче генерации мы просим изменить текст, сделать его менее грубым и токсичным. Структура оценивания строится таким образом, что тщательное проделывание одного из двух этих заданий уже гарантирует проходной балл.
Каждое задание имеет бейзлайн и несколько релевантных статей с возможными решениями. Оно подразумевает глубокое погружение в задачу и предлагает возможность попробовать несколько различных подходов, тщательно рассматривая и обсуждая их преимущества, недостатки и возможные модификации. Такое задание точно моделирует процесс решения реальных проблем и занимает не менее месяца. В середине месяца проводится дополнительное занятие, где можно поделиться с преподавателями своей стратегией и обсудить, что получается/не получается в решении задачи.
Попробовав несколько подходов, студент выбирает лучший и в индивидуальном порядке отправляет решение на соревновательную платформу CodaLab. Кроме этого, студент должен предоставить технический отчет с описанием использованных методов и код с комментариями.
Также в оценку включается мини‑квиз по каждой лекции и небольшое практическое задание по семинару. Лекционный квиз состоит из простых вопросов по теории, в семинарском предлагается изменить несколько параметров используемой модели и описать результат.
Если кратко подытожить написанное выше, цель у курса — путем углубления понимания теоретической базы научить студентов применять трансформерные модели для самых разных задач. Поэтому сначала мы подробно разбираем архитектуру трансформеров, потом — настройки и приемы обучения больших языковых моделей (LLM), основанных на этой архитектуре.
Затем мы учим студентов разделять проблемы, решаемые LLM, на классы и связывать их с проблемами из классического ML. Для каждого типа задач обычно используют определенные модели в определенных сетапах, что упрощает поиск решений для желаемого кейса. В конце курса мы показываем, как использовать трансформерные модели не только для текста, но и в других областях — для картинок, видео, временных рядов, графовых структур.
Расскажу поподробнее о каждом этапе.
В Лекции 1 мы подробно разбираем архитектуры трансформер. Материалы лекции и семинара базируются на тьюториале «Annotated Transformer». В Лекции 2 мы от архитектуры переходим непосредственно к модели — разбираем, как обучаются модели типа BERT. В Лекции 3 мы разбираем задачи, решаемые энкодерными трансформенными архитектурами. Это классификация текста — задача 1–2-классовой классификации в ML — и sequence tagging — multi‑label классификация.
В Лекции 4 мы переходим к декодерным архитектурам и генерации текста. В ML это соответствует задаче многоклассовой классификации, где количество возможных классов огромно и равно размеру словаря. В этой же лекции мы разбираем процесс генерации текста. Обсуждаем методы контролируемой генерации.
В Лекции 5 мы продолжаем тему контролируемой генерации и концепцию Reinforcement Learning from Human Feedback — основополагающую при обучении ChatGPT.
В Лекции 6 от декодерной архитектуры мы переходим к энкодерно‑декодерной и разбираем множество задач, подходящие под определение seq2seq — перевод, изменение тональности, диалоговые ассистенты. Обсуждаем мультиязычные модели.
В Лекции 7 отвечаем на вопрос, как сделать модель мультиязычной. В Лекции 8 мы обсуждаем, как можно управлять правдоподобностью трансформеров — сделать их предсказания более надежными и достоверными.
Поскольку современные трансформерные модели весьма большие, последние несколько лет довольно релевантна задача сделать их более компактными с сохранением изначальной эффективности. В Лекции 9 мы обсуждаем подходы к сжатию моделей (прунинг, дистилляцию и квантизацию), а также методы и нюансы распараллеливания моделей на нескольких ГПУ.
В Лекции 10 мы обсуждаем представление внутренней структуры трансформеров в более компактном виде с использованием различных алгебраических структур. В Лекции 11 объясняем, как LLM могу работать с модальностями, отличными от текстовых — видео, картинки, аудио — и рассматриваем архитектуру и алгоритмы обучения Vision Transformers.
Последние лекции посвящены применению трансформеров к различным типам данных. Так, Лекция 12 объясняет, как с их помощью представить графовую структуру, Лекция 13 — как использовать трансформеры для предсказания временных рядов, Лекция 14 описывает их применение в Табулярных данных.
Курс меняется вместе с изменением AI‑коммьюнити — например, в прошлом году основной запрос поменялся с «объяснить, как работают трансформеры» на «объяснить, как работает ChatGPT и что это».
Сейчас на пике находится использование больших языковых моделей для различных задач (так называемые Foundation models), а также использование LLM для работы с изображениями и видео. Следуя за этой тенденцией, в курсе мы расширяем и углубляем темы по мультимодальности, промпт и инстракшн‑тюнингу.
Для объяснения сложных концепций мы используем принцип анализа‑синтеза: разбиваем вопрос на отдельные логически законченные блоки, объясняем каждый из них, что дает картину концепции целиком.
Например, генерацию текста трансформерами мы объясняем так: отмечаем, что первая часть — модель — дает логиты, которые описывают вероятностное пространство слов, а не сами слова. Далее говорим, что можно влиять на само вероятностное пространство (top‑p, top‑k), на форму вероятностного распределения (temperature) и на сам процесс сэмплирования при фиксированном распределении (beam search, greed search).
ChatGPT тоже объясняем издалека. Сначала рассказываем, как еще можно повлиять на то, что генерит модель (prompt engineering, steering technique). Далее подводим студентов к мысли, что для этой цели можно использовать Reinforcement Learning (RL) и людей‑аннотаторов. Рассказываем про Reinforcement Learning from Human Feedback на примере Instruct GPT и говорим, что у ChatGPT похожая схема.
Курс стартовал летом 2022 года и читался 3 раза на английском языке Сколтехе и в Институте искусственного интеллекта МГУ для AI Masters и 6 раз на русском в Сбер Университете для любых сотрудников, которые интересовались темой и прошли входное тестирование. Первый тип обучающихся я называю здесь студентами‑академиками или просто «академией», второй — студентами‑индустриалами или просто «индустрией», поскольку чаще всего ко второй группе относятся уже работающие инженеры и руководители подразделений.
Для индустрии курс читается вечером. Поначалу мы брали такую же длительность занятий, как и для академии — 2 пары по полтора часа, лекция и семинар. Однако после первых запусков стало понятно, что инженерам тяжело после рабочего дня полноценно концентрироваться еще три часа, а некоторая часть академических лекций — например, математические выкладки и нюансы методов — не нужны для индустрии. Поэтому мы сократили размер пары до 1 часа.
Вопросы, которыми интересовались эти две группы, тоже различались. В индустрии студенты спрашивали: «а как на практике сделать это? А вот то? А если у нас такая задача, как можно решить ее этим методом?» В академии спрашивали про экспериментальное и теоретическое обоснование метода, «а как отразится на результате, если в методе изменить определенную вещь?».
Так как курс меняется в соответствии с запросами аудитории, для двух этих потоков мы изменяли акценты в лекциях, а иногда и сами лекции. В академических запусках мы уделяем особое внимание теории, лежащей в основе методов, и ее потенциальному развитию. В индустриальных запусках мы обсуждаем практические трудности: расположение и работа большой модели на нескольких GPU‑картах, проблемы и нюансы сбора датасетов с помощью краудсорсинга и т. д..
В академических запусках мы больше концентрируемся на теоретическом материале, давая больше математических формул и объяснений. Во время индустриальных запусков мы приводим больше практических примеров, иллюстрируя все методы с максимально возможным количеством вариантов использования и бизнес‑приложений.
Приведу несколько примеров.
В лекции по декодерным архитектурам академикам я рассказываю, как в коде устроен блок внимания в GPT‑модели. Что Query, Key, Value — это три обучаемые матрицы, которые мы собираем в одну, на ее основании для токена получаем один общий вектор, который решейпится и разделяется на три. В индустрии мы опускаем это.
В семинаре про стратегии генерации в академии мы перебираем различные способы влияния на результирующий текст — от изменения температуры до стоп‑слов — и смотрим, как изменяется выход модели. В индустрии в этом семинаре упор делается на создании чат‑бота на основе GPT-2.
На занятии про низкоранговые структуры в трансформерах для академии я рассказываю теоретический бэкграунд ТТМ-разложения, а для индустрии просто говорю «теперь наша двумерная матрицы весов стала несколькими четырехмерными кубиками».
В занятии по эффективному использованию трансформеров академики больше интересуются алгоритмами уменьшения эффективного размера модели (прунинг, квантизация), индустриалы — схемами распараллеливания и синхронизации вычислений (Varuna, Megatron)
Формальной разницы в заданиях или критериях оценки для академиков и индустриалов нет. Однако во время академических запусков мы стимулируем студентов больше концентрироваться на теоретическом анализе своих результатов и научных выводах, которые они могут из них сделать, в то время как в индустриалов мы просим больше рассказывать о практических эффектах, которые можно вывести из результатов, полученных ими в заданиях.
Мы с коллегами остались очень довольны проделанной работой и читали курс с огромным удовольствием. Поскольку курс очень динамичен, для каждого запуска мы готовили новый материал, и чтение лекций не приедалось. Очень вдохновляет, когда студенты, словив несколько инсайтов, внезапно начинают понимать всю картину целиком. Или когда понимают, как сложные формулы превращаются в понятный каждому объект: картинку или текст.
Разница в восприятии индустриальных и академических студентов тоже расширяет кругозор. Иногда рассказываешь одну и ту же лекцию в разных сетапах и удивляешься, насколько широкий спектр мыслей и ассоциаций она рождает (ты бы о таких даже не подумала бы).
Диалог с индустриалами здесь особенно интересен. Во‑первых, сами мы ближе к академии и думаем как академики, индустрия же подсвечивает стороны, на которые мы традиционно не смотрим; во‑вторых, в индустрии студенты — это уже сложившиеся специалисты, которые видят предмет более обще. Иногда они предлагают необычные кейсы внедрения и применимости.
Повод для отдельной гордости — это тот факт, что некоторые студенты в течение курса заинтересовались описываемыми темами глубже, чем предполагалось, и у них появлялись идеи для ресерча. При поддержке лекторов этим идеям был дан зелёный свет, в результате чего появилось несколько научных статей.
В конце каждого запуска мы проводили студентам небольшой опрос, чтобы собрать обратную связь. Как видно из диаграмм средней оценки фичей курса от индустриалов и фидбека академиков по отдельным критериям, в целом студенты оставались довольны. Небольшая просадка в колонке «регулярный фидбек» была вызвана тем, что, стараясь дать максимально достоверную информацию, мы отвечали на вопросы, только проверив информацию по нескольким релевантным статьям. Возможно, здесь лучшее было врагом хорошего: студенты хотели не долго ждать академически выверенных ответов, а чтобы мы подумали вместе с ними.
Материалы курса общедоступны для любого желающего, больше деталей можно узнать из нашей статьи:
Irina Nikishina, Maria Tikhonova, Viktoriia Chekalina, Alexey Zaytsev, Artem Vazhentsev, and Alexander Panchenko. 2024. Industry vs Academia: Running a Course on Transformers in Two Setups. In Proceedings of the Sixth Workshop on Teaching NLP, pages 7–22, Bangkok, Thailand. Association for Computational Linguistics.
Живьем же курс можно послушать в Сколтехе и Корпоративном Университете Сбербанка.
Авторы курса: Ирина Никишина, Мария Тихонова, Виктория Чекалина, Алексей Зайцев, Артём Важенцев и Александр Панченко.
Если у вас есть аналогичный опыт в преподавании или создании учебных курсов по трансформерам, расскажите о нём в комментариях. Давайте обмениваться экспертизой!