Пир духа.
В Nature за 15 июля статья DeepMind про AlphaFold2:
https://www.nature.com/articles/d41586-021-01968-y
https://www.nature.com/articles/s41586-021-03819-2
Код выложен на гитхаб:
https://github.com/deepmind/alphafold
В Science за 15 июля статья про RoseTTAFold (писали про неё недавно, https://news.1rj.ru/str/gonzo_ML/642):
https://www.science.org/doi/abs/10.1126/science.abj8754
Этот код уже был на гитхабе ранее, когда мы про эту модель писали:
https://github.com/RosettaCommons/RoseTTAFold
В Nature за 15 июля статья DeepMind про AlphaFold2:
https://www.nature.com/articles/d41586-021-01968-y
https://www.nature.com/articles/s41586-021-03819-2
Код выложен на гитхаб:
https://github.com/deepmind/alphafold
В Science за 15 июля статья про RoseTTAFold (писали про неё недавно, https://news.1rj.ru/str/gonzo_ML/642):
https://www.science.org/doi/abs/10.1126/science.abj8754
Этот код уже был на гитхабе ранее, когда мы про эту модель писали:
https://github.com/RosettaCommons/RoseTTAFold
Nature
DeepMind’s AI for protein structure is coming to the masses
Nature - Machine-learning systems from the company and from a rival academic group are now open source and freely accessible.
Highly accurate protein structure prediction with AlphaFold
John Jumper, Richard Evans, Alexander Pritzel, Tim Green, Michael Figurnov, Olaf Ronneberger, Kathryn Tunyasuvunakool, Russ Bates, Augustin Žídek, Anna Potapenko, Alex Bridgland, Clemens Meyer, Simon A. A. Kohl, Andrew J. Ballard, Andrew Cowie, Bernardino Romera-Paredes, Stanislav Nikolov, Rishub Jain, Jonas Adler, Trevor Back, Stig Petersen, David Reiman, Ellen Clancy, Michal Zielinski, Martin Steinegger, Michalina Pacholska, Tamas Berghammer, Sebastian Bodenstein, David Silver, Oriol Vinyals, Andrew W. Senior, Koray Kavukcuoglu, Pushmeet Kohli & Demis Hassabis
Статья: https://www.nature.com/articles/s41586-021-03819-2
Модель: https://github.com/deepmind/alphafold
Ну вот наконец и AlphaFold2. В статье и на гитхабе новая система называется просто AlphaFold, а под названием AlphaFold2 она фигурировала на соревновании CASP14. Новая система является совершенно другой системой по сравнению со старой AlphaFold, участвовавшей на CASP13, так что будьте внимательны и не путайте.
Итак, собственно, какова структура этой системы.
На вход системы поступает последовательность аминокислот белка. Для этой последовательности ищутся эволюционные родственники и генерируется множественное выравнивание (MSA, про него мы несколько раз писали в предыдущих постах о похожих моделях). Также в базе структур белков (с 3D координатами атомов) ищутся гомологичные структуры (если есть), и они тоже поступают на вход.
Сама сеть AlphaFold напрямую предсказывает 3D координаты всех тяжёлых атомов (углероды, азоты) по входным данным.
Сеть состоит из двух частей.
Сначала ствол сети обрабатывает входы с помощью последовательности (аж 48 штук, каждый со своими весами) новых блоков под названием Evoformer (хитрый вариант трансформера). Evoformer выдаёт на выходе тензор с обработанным MSA (размера N_seq*N_res, где N_seq — число последовательностей в MSA, а N_res — число аминокислот) и тензор (размера N_res*N_res) с репрезентацией пар аминокислотных остатков.
За стволом сети следует структурный модуль (structure module), генерирующий вращения и смещения для каждого из аминокислотных остатков (инициализируются они identity вращениями и позициями в начале координат) с помощью 8 слоёв с расшаренными весами.
И структурный модуль, и вся сеть целиком итеративно улучшает свои предсказания, подавая их себе же на вход. Этот процесс называется в работе “recycling”, он выполняется трижды, и существенно повышает качество результата.
Главная хитрость Evoformer’а в обмене информацией между репрезентациями MSA и пар аминокислот, образующих по сути отдельные стримы обработки данных.
Для обработки MSA используется вариант axial attention с чередующимся вниманием по строкам и по столбцам, причём оно gated через сигмоиду. Также есть transition layer, который по сути двуслойный MLP.
Стрим для обработки репрезентаций пар аминокислот по сути представляет собой графовый трансформер, узлами графа выступают соседние аминокислоты, а операции обновления репрезентаций работают над треугольниками аминокислот (следствие из интуиции относительно необходимости соблюдения неравенства треугольника для расстояний между аминокислотами). Две основные операции там это triangle multiplicative update и triangle self-attention.
По репрезентациям MSA считается outer product между всеми позициями попарно и добавляется к соответствующим репрезентациям пар. Так происходит регулярный обмен между стримом MSA и стримом парных фич.
Структурный модуль работает с репрезентацией бэкбона белка, используя прилетающие на вход репрезентации пар и оригинальную последовательность белка из MSA. Структура бэкбона представлена N_res независимыми вращениями и трансляциями каждой конкретной аминокислоты относительно глобального фрейма. Это называется “residue gas” (как бы независимо плавающие аминокислотные остатки, которые мы пытаемся ориентировать в пространстве).
John Jumper, Richard Evans, Alexander Pritzel, Tim Green, Michael Figurnov, Olaf Ronneberger, Kathryn Tunyasuvunakool, Russ Bates, Augustin Žídek, Anna Potapenko, Alex Bridgland, Clemens Meyer, Simon A. A. Kohl, Andrew J. Ballard, Andrew Cowie, Bernardino Romera-Paredes, Stanislav Nikolov, Rishub Jain, Jonas Adler, Trevor Back, Stig Petersen, David Reiman, Ellen Clancy, Michal Zielinski, Martin Steinegger, Michalina Pacholska, Tamas Berghammer, Sebastian Bodenstein, David Silver, Oriol Vinyals, Andrew W. Senior, Koray Kavukcuoglu, Pushmeet Kohli & Demis Hassabis
Статья: https://www.nature.com/articles/s41586-021-03819-2
Модель: https://github.com/deepmind/alphafold
Ну вот наконец и AlphaFold2. В статье и на гитхабе новая система называется просто AlphaFold, а под названием AlphaFold2 она фигурировала на соревновании CASP14. Новая система является совершенно другой системой по сравнению со старой AlphaFold, участвовавшей на CASP13, так что будьте внимательны и не путайте.
Итак, собственно, какова структура этой системы.
На вход системы поступает последовательность аминокислот белка. Для этой последовательности ищутся эволюционные родственники и генерируется множественное выравнивание (MSA, про него мы несколько раз писали в предыдущих постах о похожих моделях). Также в базе структур белков (с 3D координатами атомов) ищутся гомологичные структуры (если есть), и они тоже поступают на вход.
Сама сеть AlphaFold напрямую предсказывает 3D координаты всех тяжёлых атомов (углероды, азоты) по входным данным.
Сеть состоит из двух частей.
Сначала ствол сети обрабатывает входы с помощью последовательности (аж 48 штук, каждый со своими весами) новых блоков под названием Evoformer (хитрый вариант трансформера). Evoformer выдаёт на выходе тензор с обработанным MSA (размера N_seq*N_res, где N_seq — число последовательностей в MSA, а N_res — число аминокислот) и тензор (размера N_res*N_res) с репрезентацией пар аминокислотных остатков.
За стволом сети следует структурный модуль (structure module), генерирующий вращения и смещения для каждого из аминокислотных остатков (инициализируются они identity вращениями и позициями в начале координат) с помощью 8 слоёв с расшаренными весами.
И структурный модуль, и вся сеть целиком итеративно улучшает свои предсказания, подавая их себе же на вход. Этот процесс называется в работе “recycling”, он выполняется трижды, и существенно повышает качество результата.
Главная хитрость Evoformer’а в обмене информацией между репрезентациями MSA и пар аминокислот, образующих по сути отдельные стримы обработки данных.
Для обработки MSA используется вариант axial attention с чередующимся вниманием по строкам и по столбцам, причём оно gated через сигмоиду. Также есть transition layer, который по сути двуслойный MLP.
Стрим для обработки репрезентаций пар аминокислот по сути представляет собой графовый трансформер, узлами графа выступают соседние аминокислоты, а операции обновления репрезентаций работают над треугольниками аминокислот (следствие из интуиции относительно необходимости соблюдения неравенства треугольника для расстояний между аминокислотами). Две основные операции там это triangle multiplicative update и triangle self-attention.
По репрезентациям MSA считается outer product между всеми позициями попарно и добавляется к соответствующим репрезентациям пар. Так происходит регулярный обмен между стримом MSA и стримом парных фич.
Структурный модуль работает с репрезентацией бэкбона белка, используя прилетающие на вход репрезентации пар и оригинальную последовательность белка из MSA. Структура бэкбона представлена N_res независимыми вращениями и трансляциями каждой конкретной аминокислоты относительно глобального фрейма. Это называется “residue gas” (как бы независимо плавающие аминокислотные остатки, которые мы пытаемся ориентировать в пространстве).
👍1
Репрезентации этого residue gas итеративно обновляются в два этапа. Сначала специальный оператор внимания под названием Invariant Point Attention (IPA) обновляет N_res активаций сети (одиночных абстрактных репрезентаций, которые изначально прилетели из стека Evorofmer’ов) и вроде как эта операция эквивариантная (но судя по абляциям IPA, и без этого норм). Затем обновляется бэкбон белка (предсказываются вращения и трансляции). И затем мелкий резнет предсказывает все (почти) торсионные углы. Из них, так понимаю, определяются уже позиции атомов. Здесь используется урезанный вариант FAPE loss (Frame-aligned point error), штрафующий за промахи в предсказании координат C_alpha атомов.
FAPE loss также является основным лоссом для обучения сети, в полном варианте он считается по всем атомам бэкбона и боковой цепи. Кроме него в сети используются разные другие дополнительные лоссы, например, BERT-подобный лосс для замаскированных элементов MSA, кросс-энтропийный лосс на распределение расстояний, и другие. В целом самое мясо находится в Supplementary Information файле, за всеми деталями надо туда.
На выходе модель также выдаёт confidence scores для каждой отдельной аминокислоты, и это используется при инференсе — прогоняется 5 обученных моделей (с различными seed) и для каждой цели выбирается наиболее уверенная модель.
Ещё из интересного, при обучении модели используется само-дистилляция. Обученная сеть используется для предсказания структур дополнительных 350К различных последовательностей из Uniclust30, из этого датасета отфильтровываются предсказания с высокой степенью уверенности, и затем та же самая архитектура обучается с нуля на смеси оригинальных данных из PDB (25%) и этого нового датасета (75%) с различными аугментациями (сабсэмплинг MSA). Это позволяет использовать кучу неразмеченных данных и существенно повышает качество.
Обучалось всё на 128 TPUv3 с батчем 128 (то есть по одной последовательности на каждом TPU) на кропах по 256 аминокислот. Потом файнтюнили на кусочках по 384 аминокислоты. Ушла неделя на обучение и ещё 4 дня на файнтюнинг.
По скорости инференса заявлено на V100 4.8 минуты для белка длиной 256 аминокислот, 9.2 минуты для 384 и 18 часов для 2500. Это типа быстрее, чем было на CASP14, потому что заюзали XLA. После CASP14 показали также, что ансамблирование сетей не очень много добавляет, зато без него всё в 8 раз быстрее.
В общем всё интересно, достойно отдельного более глубокого рассмотрения и подробного сравнения с RoseTTAFold.
FAPE loss также является основным лоссом для обучения сети, в полном варианте он считается по всем атомам бэкбона и боковой цепи. Кроме него в сети используются разные другие дополнительные лоссы, например, BERT-подобный лосс для замаскированных элементов MSA, кросс-энтропийный лосс на распределение расстояний, и другие. В целом самое мясо находится в Supplementary Information файле, за всеми деталями надо туда.
На выходе модель также выдаёт confidence scores для каждой отдельной аминокислоты, и это используется при инференсе — прогоняется 5 обученных моделей (с различными seed) и для каждой цели выбирается наиболее уверенная модель.
Ещё из интересного, при обучении модели используется само-дистилляция. Обученная сеть используется для предсказания структур дополнительных 350К различных последовательностей из Uniclust30, из этого датасета отфильтровываются предсказания с высокой степенью уверенности, и затем та же самая архитектура обучается с нуля на смеси оригинальных данных из PDB (25%) и этого нового датасета (75%) с различными аугментациями (сабсэмплинг MSA). Это позволяет использовать кучу неразмеченных данных и существенно повышает качество.
Обучалось всё на 128 TPUv3 с батчем 128 (то есть по одной последовательности на каждом TPU) на кропах по 256 аминокислот. Потом файнтюнили на кусочках по 384 аминокислоты. Ушла неделя на обучение и ещё 4 дня на файнтюнинг.
По скорости инференса заявлено на V100 4.8 минуты для белка длиной 256 аминокислот, 9.2 минуты для 384 и 18 часов для 2500. Это типа быстрее, чем было на CASP14, потому что заюзали XLA. После CASP14 показали также, что ансамблирование сетей не очень много добавляет, зато без него всё в 8 раз быстрее.
В общем всё интересно, достойно отдельного более глубокого рассмотрения и подробного сравнения с RoseTTAFold.
[OpenAI DALL·E] Zero-Shot Text-to-Image Generation
Aditya Ramesh, Mikhail Pavlov, Gabriel Goh, Scott Gray, Chelsea Voss, Alec Radford, Mark Chen, Ilya Sutskever
Статья: https://arxiv.org/abs/2102.12092
Пост в блоге: https://openai.com/blog/dall-e/
Код (официальный, но неполный): https://github.com/openai/dall-e
Код (неофициальный, но более полный): https://github.com/lucidrains/DALLE-pytorch
Обученная модель от Сбера: https://github.com/sberbank-ai/ru-dalle
В последнее время появилось много мультимодальных трансформеров, и хочется их поразбирать. Нельзя обойти при этом наиболее известные модели, одна из которых — DALL·E от OpenAI.
DALL·E прошумел уже довольно давно, в самом начале года, но статья и все детали реализации стали доступны не сразу (в официальной репе так вообще лежит только обученный dVAE, который лишь часть от DALL·E).
Собственно, что такое DALL·E? Это декодер трансформера, который авторегрессионно умеет генерить изображения, “продолжая” заданное текстовое описание и, возможно, начальную часть изображения.
В оригинальном посте было заявлено, что это 12-миллиардная версия GPT-3, обученная на парах картинок и их описаний, но реальность сильно сложнее.
Начать стоит с того, что процесс обучения двухэтапный. На первом этапе обучается дискретный VAE (dVAE), сжимающий входную картинку 256*256 в картиночные токены на сетке 32*32, принимающие 8192 возможных значения каждый (то есть размер словаря). Это нужно для того, чтобы уменьшить количество токенов, с которыми должен дальше оперировать трансформер, и даёт уменьшение размера контекста в 192 раза. Часть высокочастотного сигнала в изображении при этом, ожидаемо, теряется, мелкие детали становятся плохо- или неразличимы, но в целом качество восстановления картинки после такого dVAE вполне достойно. Именно отсюда получается та самая своеобразная гладкость генеримых DALL·E картинок и проблемы с мелкими деталями, соответственно не для любого типа изображений DALL·E подходит, либо же процесс требует переобучения dVAE на более специальные кейсы. В dVAE никаких трансформеров нет, это свёрточный резнет.
Второй этап — это собственно трансформер. 256 кодирующих текст BPE-токенов (словарь размера 16384) конкатенируются с 1024 картиночными токенами, полученными от dVAE, и эта последовательность авторегрессионно продолжается. Сам трансформер это 64-слойный sparse transformer от тех же OpenAI (https://arxiv.org/abs/1904.10509). Он хитрый, в нём три типа шаблонов внимания: 1) text-to-text классический masked механизм как в авторегрессионных языковых моделях по типу GPT, где текущий токен не имеет права заглядывать в будущие токены; 2) image-to-text, где каждый токен изображения смотрит на все токены текста; и 3) image-to-image, где используются паттерны из sparse transformer с вниманием по строкам, столбцам и более хитрыми свёрточными шаблонами, которые применяются только в последнем self-attention слое. При этом все три типа заведены в одну единственную операцию внимания, потому что это работало лучше, чем три отдельные операции.
Авторы сначала экспериментировали на маленькой модели в 1.2B параметров и датасете в 3.3M пар картинка-текст, а потом отскейлили это на 12B модель и датасет в 250M пар (который пришлось собрать). Собственно этот скейлинг и составляет главные идейную и техническую часть работы. Идейно — показать, что обученная на большом датасете модель большого размера демонстрирует интересное поведение, а технически — заставить всё это работать, потому что вылезает много инженерных челленджей, не проявляющихся на меньших масштабах.
По признанию авторов, самая сложная часть проекта была в том, чтобы обучить большую модель на 16-битных числах (вместо обычных 32-битных). Было много всяких нестабильностей, поэтому авторы придумали хитрые методы масштабирования градиентов для защиты от underflow. Другой челлендж — распределённое обучение, где использовался тонко настроенный вариант PowerSGD. За этими (на самом деле важными, если хотите повторить) техническими деталями обращайтесь в Appendix.
Aditya Ramesh, Mikhail Pavlov, Gabriel Goh, Scott Gray, Chelsea Voss, Alec Radford, Mark Chen, Ilya Sutskever
Статья: https://arxiv.org/abs/2102.12092
Пост в блоге: https://openai.com/blog/dall-e/
Код (официальный, но неполный): https://github.com/openai/dall-e
Код (неофициальный, но более полный): https://github.com/lucidrains/DALLE-pytorch
Обученная модель от Сбера: https://github.com/sberbank-ai/ru-dalle
В последнее время появилось много мультимодальных трансформеров, и хочется их поразбирать. Нельзя обойти при этом наиболее известные модели, одна из которых — DALL·E от OpenAI.
DALL·E прошумел уже довольно давно, в самом начале года, но статья и все детали реализации стали доступны не сразу (в официальной репе так вообще лежит только обученный dVAE, который лишь часть от DALL·E).
Собственно, что такое DALL·E? Это декодер трансформера, который авторегрессионно умеет генерить изображения, “продолжая” заданное текстовое описание и, возможно, начальную часть изображения.
В оригинальном посте было заявлено, что это 12-миллиардная версия GPT-3, обученная на парах картинок и их описаний, но реальность сильно сложнее.
Начать стоит с того, что процесс обучения двухэтапный. На первом этапе обучается дискретный VAE (dVAE), сжимающий входную картинку 256*256 в картиночные токены на сетке 32*32, принимающие 8192 возможных значения каждый (то есть размер словаря). Это нужно для того, чтобы уменьшить количество токенов, с которыми должен дальше оперировать трансформер, и даёт уменьшение размера контекста в 192 раза. Часть высокочастотного сигнала в изображении при этом, ожидаемо, теряется, мелкие детали становятся плохо- или неразличимы, но в целом качество восстановления картинки после такого dVAE вполне достойно. Именно отсюда получается та самая своеобразная гладкость генеримых DALL·E картинок и проблемы с мелкими деталями, соответственно не для любого типа изображений DALL·E подходит, либо же процесс требует переобучения dVAE на более специальные кейсы. В dVAE никаких трансформеров нет, это свёрточный резнет.
Второй этап — это собственно трансформер. 256 кодирующих текст BPE-токенов (словарь размера 16384) конкатенируются с 1024 картиночными токенами, полученными от dVAE, и эта последовательность авторегрессионно продолжается. Сам трансформер это 64-слойный sparse transformer от тех же OpenAI (https://arxiv.org/abs/1904.10509). Он хитрый, в нём три типа шаблонов внимания: 1) text-to-text классический masked механизм как в авторегрессионных языковых моделях по типу GPT, где текущий токен не имеет права заглядывать в будущие токены; 2) image-to-text, где каждый токен изображения смотрит на все токены текста; и 3) image-to-image, где используются паттерны из sparse transformer с вниманием по строкам, столбцам и более хитрыми свёрточными шаблонами, которые применяются только в последнем self-attention слое. При этом все три типа заведены в одну единственную операцию внимания, потому что это работало лучше, чем три отдельные операции.
Авторы сначала экспериментировали на маленькой модели в 1.2B параметров и датасете в 3.3M пар картинка-текст, а потом отскейлили это на 12B модель и датасет в 250M пар (который пришлось собрать). Собственно этот скейлинг и составляет главные идейную и техническую часть работы. Идейно — показать, что обученная на большом датасете модель большого размера демонстрирует интересное поведение, а технически — заставить всё это работать, потому что вылезает много инженерных челленджей, не проявляющихся на меньших масштабах.
По признанию авторов, самая сложная часть проекта была в том, чтобы обучить большую модель на 16-битных числах (вместо обычных 32-битных). Было много всяких нестабильностей, поэтому авторы придумали хитрые методы масштабирования градиентов для защиты от underflow. Другой челлендж — распределённое обучение, где использовался тонко настроенный вариант PowerSGD. За этими (на самом деле важными, если хотите повторить) техническими деталями обращайтесь в Appendix.
Openai
DALL·E: Creating images from text
We’ve trained a neural network called DALL·E that creates images from text captions for a wide range of concepts expressible in natural language.
Сэмплы генерились хитро, генерилось несколько кандидатов (например 32, но иногда и вплоть до 512!), которые далее отправлялись в специальную ранжирующую контрастивную модель, дающую характеризующий качество матчинга скор каждой паре текст+сгенерённое изображение. Эта модель была специально обучена под данную задачу и является важным компонентом для получения хороших результатов. Такой автоматизированный cherry-picking. Эта хитрая модель, собственно, CLIP (https://arxiv.org/abs/2103.00020), про который расскажем отдельно.
Результаты красивы. Модель неплохо генерализует и выдаёт довольно экзотические картинки, которые вряд ли могли быть в исходных датасетах. Типа “маленького ёжика в рождественском свитере, выгуливающего собаку”. Косячит она тоже забавно. Тут лучше смотреть, чем описывать, так что велкам внутрь статьи и ещё более велкам в пост, где картинок много и можно попробовать свои варианты изменений (из заранее заданных). Впрочем, эту часть многие скорее всего в январе как раз и посмотрели.
Код для репликации совершенно недостаточен потому что 1) не выложен полностью даже код моделей, есть только dVAE; 2) напрочь отсутствует часть про обучение, в которой миллион тонкостей (и не факт, кстати, что прям все они отражены в статье). Попытка репликации в репозитории lucidrains выглядит более полной.
Есть ещё попытка собрать что-то похожее от энтузиастов FLAX/JAX (https://moocaholic.medium.com/jax-a13e83f49897), но модель там маленькая (а именно в скейлинге и был смысл) и немного иной архитектуры (seq2seq часть там другая, вместо декодера sparse transformer вставили полный encoder-decoder BART, но он не sparse): https://wandb.ai/dalle-mini/dalle-mini/reports/DALL-E-mini--Vmlldzo4NjIxODA
UPD: Сбер обучил русскоязычные модели DALLE на 1.3B (XL) и 12B (XXL) параметров. Модель XL выложена на гитхабе: https://github.com/sberbank-ai/ru-dalle и доступна в Huggingface Transformers: https://huggingface.co/sberbank-ai/rudalle-Malevich, демо доступно на сайте https://rudalle.ru/
Результаты красивы. Модель неплохо генерализует и выдаёт довольно экзотические картинки, которые вряд ли могли быть в исходных датасетах. Типа “маленького ёжика в рождественском свитере, выгуливающего собаку”. Косячит она тоже забавно. Тут лучше смотреть, чем описывать, так что велкам внутрь статьи и ещё более велкам в пост, где картинок много и можно попробовать свои варианты изменений (из заранее заданных). Впрочем, эту часть многие скорее всего в январе как раз и посмотрели.
Код для репликации совершенно недостаточен потому что 1) не выложен полностью даже код моделей, есть только dVAE; 2) напрочь отсутствует часть про обучение, в которой миллион тонкостей (и не факт, кстати, что прям все они отражены в статье). Попытка репликации в репозитории lucidrains выглядит более полной.
Есть ещё попытка собрать что-то похожее от энтузиастов FLAX/JAX (https://moocaholic.medium.com/jax-a13e83f49897), но модель там маленькая (а именно в скейлинге и был смысл) и немного иной архитектуры (seq2seq часть там другая, вместо декодера sparse transformer вставили полный encoder-decoder BART, но он не sparse): https://wandb.ai/dalle-mini/dalle-mini/reports/DALL-E-mini--Vmlldzo4NjIxODA
UPD: Сбер обучил русскоязычные модели DALLE на 1.3B (XL) и 12B (XXL) параметров. Модель XL выложена на гитхабе: https://github.com/sberbank-ai/ru-dalle и доступна в Huggingface Transformers: https://huggingface.co/sberbank-ai/rudalle-Malevich, демо доступно на сайте https://rudalle.ru/
Medium
JAX
JAX by Google Research is getting more and more popular. Deepmind recently announced they are using JAX to accelerate their research and…
Всем привет! Миша Бурцев проводит опрос, как кому видятся пути к Human Level AI. Если у кого есть мысли по теме, заполните, пожалуйста, анкету по ссылке: https://form.jotform.com/211134165349350
Миша обещает сделать краткий отчёт по результатам.
Миша обещает сделать краткий отчёт по результатам.
Jotform
Unsolved problems and possible paths on the road to human level intelligence v. 1
Please click the link to complete this form.
Давно от нас не было новостей, но по секрету скажу, что мы готовим обзор очень прикольной темы, подробности скоро!
А пока пара новостей про другие события от Grigory Sapunov:
1. Недавно сходил на подкаст к Марку Девельману, поговорили про AI, а больше даже про смысл жизни :)
https://www.uhnwidata.com/den-of-rich/grigory-sapunov
2. 10 сентября выступаю на DataFest Yerevan 2021 в 10:00 (Yerevan time, UTC+4). Расскажу про трансформеры в 2021 году, что интересного произошло и какие тренды.
https://datafest.am/#/agenda
Буду рад поболтать живьём со всеми, кто вдруг в это время будет в Ереване!
А пока пара новостей про другие события от Grigory Sapunov:
1. Недавно сходил на подкаст к Марку Девельману, поговорили про AI, а больше даже про смысл жизни :)
https://www.uhnwidata.com/den-of-rich/grigory-sapunov
2. 10 сентября выступаю на DataFest Yerevan 2021 в 10:00 (Yerevan time, UTC+4). Расскажу про трансформеры в 2021 году, что интересного произошло и какие тренды.
https://datafest.am/#/agenda
Буду рад поболтать живьём со всеми, кто вдруг в это время будет в Ереване!
[OpenAI CLIP] Learning Transferable Visual Models From Natural Language Supervision
Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, Ilya Sutskever
Статья: https://arxiv.org/abs/2103.00020
Пост в блоге: https://openai.com/blog/clip/
Код (официальный, но неполный): https://github.com/openai/CLIP
Код (неофициальный, но с обучением): https://github.com/mlfoundations/open_clip
Мультиязычный CLIP: https://github.com/FreddeFrallan/Multilingual-CLIP
Русский CLIP от Сбера: https://github.com/sberbank-ai/ru-clip
В предыдущем посте про DALL·E мы упомянули, что частью системы является CLIP, использующийся для ранжирования пар <картинка, текст>. Собственно, надо и про CLIP рассказать.
Глобальная идея CLIP в том, что традиционный подход к обучению в компьютерном зрении заключался в обучении по заранее заданным категориям (предопределённые классы), в то время как в природе есть гораздо более богатый (и потенциально более “дешёвый”, потому что классическая разметка по классам довольно дорога) тип данных — обычные тексты, которые и можно использовать в качестве supervised сигнала. Это идейно похоже на подход из области NLP принятый в трансформере T5, когда все задачи оформляются как seq2seq и для всех задач, включая классификацию, выходы являются текстовыми (а не категориальными в случае той же классификации). Дополнительным бонусом такого подхода является то, что мы не только выучиваем хорошее представление для задачи, но и ещё связываем представление текстов с представлением картинок, то есть получаем какое-то общее мультимодальное пространство.
CLIP расшифровывается как Contrastive Language-Image Pre-Training и технически его идея достаточно проста — возьмём огромный датасет пар <картинка, текстовое описание>, намайненный из интернета (таковых набралось 400М пар) и на этом датасете обучим контрастивную модель, которая для соответствующих друг другу элементов пары даст высокий скор, а для всех остальных — низкий. В этом смысле — классика contrastive learning (про который мы много писали ранее), только теперь он мультимодальный, тексты + картинки.
Про датасет на самом деле довольно мутная и почти неописанная часть. И он, конечно, не выложен. Вроде как искали пары <картинки, текст> по различным запросам (500К слов, которые встретились по крайней мере 100 раз в англоязычной википедии + информативные биграммы) и получая примерно 20К пар на каждый запрос. Датасет вышел аналогичный по числу слов датасету WebText, на котором обучалась GPT-2. Этот датасет назвали WIT (WebImageText). Я пока не уловил, что именно всё-таки в этих текстах, не сами запросы же? Какие-то прикартиночные тексты, или что-то ещё?
На таком датасете можно было бы обучить полноценный seq2seq в режиме похожем на image captioning, то есть генерить по картинке текст. Но авторы показали, что, например, если генерить по картинке описывающий её bag of words, то с точки зрения compute effieiency это получается в три раза эффективнее. А если потом предсказание заменить на контрастивное обучение, то эффективность ещё в четыре раза выше. Так пришли к контрастивному CLIP.
Собственно модель состоит из картиночного и текстового энкодеров, а дальше поверх нормализованных эмбеддингов считается косинусное расстояние, которое модель максимизирует для соответствующих элементов пары и минимизирует для несоответствующих.
В качестве картиночного энкодера попробовали 8 моделей: 5 свёрточных и 3 трансформера. В качестве свёрточных энкодеров взят базовый ResNet-50 с несколькими модификациями, более тяжёлый вариант ResNet-101, и EfficientNet-подобные RN50x4, RN50x16, RN50x64; а в качестве трансформеров используются ViT (https://news.1rj.ru/str/gonzo_ML/434): ViT-B/32, ViT-B/16 и ViT-L/14. Для ViT-L/14 в дальнейшем сделали версию дообученную одну эпоху на разрешении 336 пикселей (все предыдущие были 224), её называют ViT-L/14@336px и дальше собственно её и подразумевают под версией в CLIP, так как её перформанс лучший.
Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, Ilya Sutskever
Статья: https://arxiv.org/abs/2103.00020
Пост в блоге: https://openai.com/blog/clip/
Код (официальный, но неполный): https://github.com/openai/CLIP
Код (неофициальный, но с обучением): https://github.com/mlfoundations/open_clip
Мультиязычный CLIP: https://github.com/FreddeFrallan/Multilingual-CLIP
Русский CLIP от Сбера: https://github.com/sberbank-ai/ru-clip
В предыдущем посте про DALL·E мы упомянули, что частью системы является CLIP, использующийся для ранжирования пар <картинка, текст>. Собственно, надо и про CLIP рассказать.
Глобальная идея CLIP в том, что традиционный подход к обучению в компьютерном зрении заключался в обучении по заранее заданным категориям (предопределённые классы), в то время как в природе есть гораздо более богатый (и потенциально более “дешёвый”, потому что классическая разметка по классам довольно дорога) тип данных — обычные тексты, которые и можно использовать в качестве supervised сигнала. Это идейно похоже на подход из области NLP принятый в трансформере T5, когда все задачи оформляются как seq2seq и для всех задач, включая классификацию, выходы являются текстовыми (а не категориальными в случае той же классификации). Дополнительным бонусом такого подхода является то, что мы не только выучиваем хорошее представление для задачи, но и ещё связываем представление текстов с представлением картинок, то есть получаем какое-то общее мультимодальное пространство.
CLIP расшифровывается как Contrastive Language-Image Pre-Training и технически его идея достаточно проста — возьмём огромный датасет пар <картинка, текстовое описание>, намайненный из интернета (таковых набралось 400М пар) и на этом датасете обучим контрастивную модель, которая для соответствующих друг другу элементов пары даст высокий скор, а для всех остальных — низкий. В этом смысле — классика contrastive learning (про который мы много писали ранее), только теперь он мультимодальный, тексты + картинки.
Про датасет на самом деле довольно мутная и почти неописанная часть. И он, конечно, не выложен. Вроде как искали пары <картинки, текст> по различным запросам (500К слов, которые встретились по крайней мере 100 раз в англоязычной википедии + информативные биграммы) и получая примерно 20К пар на каждый запрос. Датасет вышел аналогичный по числу слов датасету WebText, на котором обучалась GPT-2. Этот датасет назвали WIT (WebImageText). Я пока не уловил, что именно всё-таки в этих текстах, не сами запросы же? Какие-то прикартиночные тексты, или что-то ещё?
На таком датасете можно было бы обучить полноценный seq2seq в режиме похожем на image captioning, то есть генерить по картинке текст. Но авторы показали, что, например, если генерить по картинке описывающий её bag of words, то с точки зрения compute effieiency это получается в три раза эффективнее. А если потом предсказание заменить на контрастивное обучение, то эффективность ещё в четыре раза выше. Так пришли к контрастивному CLIP.
Собственно модель состоит из картиночного и текстового энкодеров, а дальше поверх нормализованных эмбеддингов считается косинусное расстояние, которое модель максимизирует для соответствующих элементов пары и минимизирует для несоответствующих.
В качестве картиночного энкодера попробовали 8 моделей: 5 свёрточных и 3 трансформера. В качестве свёрточных энкодеров взят базовый ResNet-50 с несколькими модификациями, более тяжёлый вариант ResNet-101, и EfficientNet-подобные RN50x4, RN50x16, RN50x64; а в качестве трансформеров используются ViT (https://news.1rj.ru/str/gonzo_ML/434): ViT-B/32, ViT-B/16 и ViT-L/14. Для ViT-L/14 в дальнейшем сделали версию дообученную одну эпоху на разрешении 336 пикселей (все предыдущие были 224), её называют ViT-L/14@336px и дальше собственно её и подразумевают под версией в CLIP, так как её перформанс лучший.
Openai
CLIP: Connecting text and images
We’re introducing a neural network called CLIP which efficiently learns visual concepts from natural language supervision. CLIP can be applied to any visual classification benchmark by simply providing the names of the visual categories to be recognized,…
❤5👍1
В качестве базового текстового энкодера взят обычный трансформер на 63М параметров с 12 слоями, 8 головами и эмбеддингами в 512 (для пар с более тяжёлыми картиночными энкодерами параметры побольше). Что важно, attention span этого трансформера всего 76 токенов, то есть он работает с сильно более короткими по сравнению с бертом текстами. При этом, что нехарактерно для энкодеров, “на будущее” используется masked attention, чтобы можно было инициализировать предобученной моделью или добавить дополнительный objective, если вдруг захочется.
Оба энкодера обучали с нуля, не загружая в них какие-либо претренированные веса. Нелинейных преобразований текстовых или картиночных эмбеддингов не было, трансформаций данных тоже, кроме случайных кропов для отмасштабированных картинок.
Самый толстый ViT обучался 12 дней на 256 V100, а RN50x64 — 18 дней на 592 V100.
Изначально были выложены версии CLIP с ViT-B/32 + RN50 (ResNet-50), затем в режиме постепенных выкладываний выложили RN101 и RN50x4, а в июле 2021 также выложили RN50x16 и ViT-B/16. Ну то есть более тяжёлой RN50x64 и самой нормальной ViT-L/14 и тем более ViT-L/14@336px нету (https://github.com/openai/CLIP/blob/main/clip/clip.py#L29).
OpenAI style.
Такое предобучение даёт неожиданно хорошие в плане zero-shot learning результаты и иногда сопоставимо с полностью supervised результатами. И собственно анализ этого и занимает большую часть работы.
При всей своей идейной и технической простоте модель получилась реально очень универсальная и с потенциально огромным количеством применений. Welcome to the age of Foundation Models (https://arxiv.org/abs/2108.07258).
Во-первых, модель можно использовать для классификации по заранее неопределённому числу классов. Заготоваливаете текстовые описания классов, а потом считаете близость эмбеддингов картинок к эмбеддингам этих классов и выбираете ближайший из всех. Или ещё лучше делаете промпт вида “A photo of a {label}” по нужным вам классам, и это даёт более высокое качество классификации. Или даже на “A photo of a {label}, a type of pet.” если релевантно, тогда ещё лучше. В общем здесь тоже как и в GPT-3 можно заниматься prompt engineering. Привет, Software 3.0. Или делаете разные промпты и ансамблируете, так тоже лучше.
Если сравнить с supervised бейзлайном на ResNet-50, то CLIP бьёт его на большом числе датасетов, а на STL10 вроде как даже получили новый SoTA без обучающих примеров. CLIP значительно превосходит бейзлайн на двух датасетах с разпознаванием действий. Авторы спекулируют, что supervision из тектовых описаний лучше работает для концепций с глаголами по сравнению с сигналом из объект-центричных датасетов типа ImageNet.
Можно также делать few-shot learning (обучаем логрегрессию на фичах CLIP), но тут неожиданно оказывается, что zero-shot performance CLIP соответствует 4-shot при таком подходе, то есть 1- и 2-shot learning дают худший результат, чем вообще без такого дообучения.
Качество zero-shot learning скейлится с увеличением сложности модели (речь про картиночную часть), и видимо есть куда продолжать.
Отдельно от zero-shot изучали качество фич с помощью linear probing (обучаем линейный классификатор на фичах). В целом по 27 датасетам, на которых сравнивались, фичи ViT бьют фичи резнетов, а также фичи EfficientNet (+NoisyStudent), SimCLRv2, BYOL, MoCo, BiT-M и не только. Хорошие фичи, короче :)
Среди датасетов в основном различные классификации, от общих (типа ImageNet или CIFAR) до специальных (марки машин, виды растений, объекты на спутниковых снимках) или даже не очень классификаций (номера домов в SVNH, подсчёт объектов в CLEVR).
Подробно изучают устойчивость к distribution shift, показывают, что хотя до идеала далеко, модель всё равно ощутимо лучше многих перечисленных выше. Причём если начинать файнтюнить, то преимущество теряется. Возможно, это связано с тем, что при обучении на конкретном датасете модель всё-таки ловит какие-то spurious штуки, связанные с этим датасетом. CLIP эту проблему обходит.
Оба энкодера обучали с нуля, не загружая в них какие-либо претренированные веса. Нелинейных преобразований текстовых или картиночных эмбеддингов не было, трансформаций данных тоже, кроме случайных кропов для отмасштабированных картинок.
Самый толстый ViT обучался 12 дней на 256 V100, а RN50x64 — 18 дней на 592 V100.
Изначально были выложены версии CLIP с ViT-B/32 + RN50 (ResNet-50), затем в режиме постепенных выкладываний выложили RN101 и RN50x4, а в июле 2021 также выложили RN50x16 и ViT-B/16. Ну то есть более тяжёлой RN50x64 и самой нормальной ViT-L/14 и тем более ViT-L/14@336px нету (https://github.com/openai/CLIP/blob/main/clip/clip.py#L29).
OpenAI style.
Такое предобучение даёт неожиданно хорошие в плане zero-shot learning результаты и иногда сопоставимо с полностью supervised результатами. И собственно анализ этого и занимает большую часть работы.
При всей своей идейной и технической простоте модель получилась реально очень универсальная и с потенциально огромным количеством применений. Welcome to the age of Foundation Models (https://arxiv.org/abs/2108.07258).
Во-первых, модель можно использовать для классификации по заранее неопределённому числу классов. Заготоваливаете текстовые описания классов, а потом считаете близость эмбеддингов картинок к эмбеддингам этих классов и выбираете ближайший из всех. Или ещё лучше делаете промпт вида “A photo of a {label}” по нужным вам классам, и это даёт более высокое качество классификации. Или даже на “A photo of a {label}, a type of pet.” если релевантно, тогда ещё лучше. В общем здесь тоже как и в GPT-3 можно заниматься prompt engineering. Привет, Software 3.0. Или делаете разные промпты и ансамблируете, так тоже лучше.
Если сравнить с supervised бейзлайном на ResNet-50, то CLIP бьёт его на большом числе датасетов, а на STL10 вроде как даже получили новый SoTA без обучающих примеров. CLIP значительно превосходит бейзлайн на двух датасетах с разпознаванием действий. Авторы спекулируют, что supervision из тектовых описаний лучше работает для концепций с глаголами по сравнению с сигналом из объект-центричных датасетов типа ImageNet.
Можно также делать few-shot learning (обучаем логрегрессию на фичах CLIP), но тут неожиданно оказывается, что zero-shot performance CLIP соответствует 4-shot при таком подходе, то есть 1- и 2-shot learning дают худший результат, чем вообще без такого дообучения.
Качество zero-shot learning скейлится с увеличением сложности модели (речь про картиночную часть), и видимо есть куда продолжать.
Отдельно от zero-shot изучали качество фич с помощью linear probing (обучаем линейный классификатор на фичах). В целом по 27 датасетам, на которых сравнивались, фичи ViT бьют фичи резнетов, а также фичи EfficientNet (+NoisyStudent), SimCLRv2, BYOL, MoCo, BiT-M и не только. Хорошие фичи, короче :)
Среди датасетов в основном различные классификации, от общих (типа ImageNet или CIFAR) до специальных (марки машин, виды растений, объекты на спутниковых снимках) или даже не очень классификаций (номера домов в SVNH, подсчёт объектов в CLEVR).
Подробно изучают устойчивость к distribution shift, показывают, что хотя до идеала далеко, модель всё равно ощутимо лучше многих перечисленных выше. Причём если начинать файнтюнить, то преимущество теряется. Возможно, это связано с тем, что при обучении на конкретном датасете модель всё-таки ловит какие-то spurious штуки, связанные с этим датасетом. CLIP эту проблему обходит.
GitHub
CLIP/clip/clip.py at main · openai/CLIP
CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image - openai/CLIP
🔥2
Сравнивают поведение модели в режиме zero-shot и few-shot learning с поведением человека и показывают, что они существенно разные.
Смотрели, нет ли просачивания в предобучающий датасет каких-либо кусков оценочных датасетов и утверждают, что даже если и есть, то эффект от этого крайне слабый.
У модели есть куча ограничений, например, она не очень хороша на fine-grained классификации (типа марок машин) или на специальных задачах типа определения расстояния до машины. Или там MNIST она распознаёт хуже, чем даже какая-нибудь SVM заточенная на этот датасет. Да и промпты подбирать надо уметь.
В общем с одной стороны у модели очень интересное поведение (многие аспекты которого ещё только предстоит раскрыть), с другой стороны есть ещё к чему стремиться и куда развивать.
Из примеров видно, что появляется zero-shot альтернатива построению кастомных картиночных классификаторов. Для каких-то задач теперь получается можно создавать классификаторы с помощью prompt engineering, возможно, вообще минуя этап сбора датасета. В конечном счёте, наверное, всё равно придётся, но для быстрого старта и проверки гипотез хорошая опция. Да и более сложные модели со временем тоже появятся.
Очевидно также модель можно использовать для мультимодального информационного поиска.
Менее очевидно, но многообещающе модель можно использовать для различных артистических целей (CLIPDraw и вот это вот всё, про что у Лёши есть много интересного материала), например, в режие похожем на DeepDream. И наверняка есть ещё уйма применений, про которые ещё никто не догадался. Будет как с бертом, ждём расцвета сотен новых цветов и продуктов!
Смотрели, нет ли просачивания в предобучающий датасет каких-либо кусков оценочных датасетов и утверждают, что даже если и есть, то эффект от этого крайне слабый.
У модели есть куча ограничений, например, она не очень хороша на fine-grained классификации (типа марок машин) или на специальных задачах типа определения расстояния до машины. Или там MNIST она распознаёт хуже, чем даже какая-нибудь SVM заточенная на этот датасет. Да и промпты подбирать надо уметь.
В общем с одной стороны у модели очень интересное поведение (многие аспекты которого ещё только предстоит раскрыть), с другой стороны есть ещё к чему стремиться и куда развивать.
Из примеров видно, что появляется zero-shot альтернатива построению кастомных картиночных классификаторов. Для каких-то задач теперь получается можно создавать классификаторы с помощью prompt engineering, возможно, вообще минуя этап сбора датасета. В конечном счёте, наверное, всё равно придётся, но для быстрого старта и проверки гипотез хорошая опция. Да и более сложные модели со временем тоже появятся.
Очевидно также модель можно использовать для мультимодального информационного поиска.
Менее очевидно, но многообещающе модель можно использовать для различных артистических целей (CLIPDraw и вот это вот всё, про что у Лёши есть много интересного материала), например, в режие похожем на DeepDream. И наверняка есть ещё уйма применений, про которые ещё никто не догадался. Будет как с бертом, ждём расцвета сотен новых цветов и продуктов!
🔥1