Perceiver: General Perception with Iterative Attention
Andrew Jaegle, Felix Gimeno, Andrew Brock, Andrew Zisserman, Oriol Vinyals, Joao Carreira
Статья: https://arxiv.org/abs/2103.03206
Код (неавторский): https://github.com/lucidrains/perceiver-pytorch
Работа, нацеленная на мультимодальность, чтобы одна универсальная архитектура на основе трансформера могла работать с данными разной природы.
Сейчас работа с различными модальностями часто основана на выборе подходящих задаче inductive biases, учитывающих знание о том, как соотносятся между собой элементы входа. Например, свёрточные сетки полагаются на локальность фич в изображениях и имеют подходящий для этого bias. С текстами хорошо работает трансформер. Ну и так далее. Смешивать разные модальности в одной модели в целом непросто.
Хочется заменить это на одну универсальную архитектуру, делающую по возможности меньше таких предположений о структуре входа. Ну то есть давайте заложим поменьше biases, сделаем универсальную архитектуру, и позволим ей выучить всё из данных. Если получится, не придётся затачиваться на отдельные модальности и можно будет использовать одну общую архитектуру для смешанных модальностей.
Собственно, Perceiver — это архитектура, основанная на трансформере и использующая асимметричный механизм внимания (кросс-внимание), могущий итеративно выхватывать из входа релевантные данные и агрегировать их внутри себя, и способный скейлиться на очень большие размеры входа (как раз чего не могут обычные трансформеры, хотя за последнее время появилось много эффективных их реализаций).
Как оно работает?
Основная идея подхода — завести маленький набор латентных переменных (latent array). Эти юниты будут через механизм внимания обращаться ко входу (потенциально большому) и таким образом окажутся боттлнеком, который должен отсеять важные части входа. И делать это perceiver может итеративно, потому что таких блоков в сети будет несколько. Каждый раз, соответственно, он может обращаться к разным частям входа, в зависимости от того, что он “узнал” на предыдущих шагах.
Авторы предлагают посмотреть на эту модель как на выполняющую кластеризацию входа end-to-end, где скрытые юниты являются центрами кластеров. Не знаю, мне сходу неочевидно, почему это так.
Поскольку временная/пространственная информация всё-таки важна, а модель на структуру входа напрямую не закладывается, авторы добавляют к каждому входному элементу позиционные энкодинги на основе Фурье (синусы и косинусы от логарифмического банка частот, а координата внутри измерения масштабируется в диапазон [-1,1]). Эмбеддинги не добавляются ко входу (как в оригинальном трансформере), а конкатенируются с ним.
Авторы считают, что эта история с позиционными эмбеддингами не дискредитирует их подход c уменьшением implicit biases. Типа, мы даём сети фичи, а как их использовать её дело, сама выучит и решит как лучше. К тому же их легче адаптировать к новым доменам, чем собирать новую архитектуру. Ну и вообще мультимодальные модели так легче собирать.
Внутри модели повторяются два основных блока: 1) кросс-внимание (cross-attention), где Q приходит из низкоразмерной латентной части, а K/V из входа (большого), и 2) обычное внимание (self-attention трансформера), трансформирующее эти latent’ы. Эти блоки могут повторяться много раз, и даже иметь расшаренные веса между этими повторениями. Тогда получается что-то типа развёрнутой по глубине RNN или универсального трансформера.
Стандартное внимание по-прежнему остаётся квадратичным, но оно здесь от низкоразмерного latent’а (<=1024), так что не так страшно. Можно заодно глубины добавить, чтобы модель посложнее была (на ImageNet сделали 48 таких блоков). У latent’ов есть обучаемые позиционные эмбеддинги. Сам этот latent array, так понимаю, выучивается, а не зависит от входа или какого-то рандома.
Andrew Jaegle, Felix Gimeno, Andrew Brock, Andrew Zisserman, Oriol Vinyals, Joao Carreira
Статья: https://arxiv.org/abs/2103.03206
Код (неавторский): https://github.com/lucidrains/perceiver-pytorch
Работа, нацеленная на мультимодальность, чтобы одна универсальная архитектура на основе трансформера могла работать с данными разной природы.
Сейчас работа с различными модальностями часто основана на выборе подходящих задаче inductive biases, учитывающих знание о том, как соотносятся между собой элементы входа. Например, свёрточные сетки полагаются на локальность фич в изображениях и имеют подходящий для этого bias. С текстами хорошо работает трансформер. Ну и так далее. Смешивать разные модальности в одной модели в целом непросто.
Хочется заменить это на одну универсальную архитектуру, делающую по возможности меньше таких предположений о структуре входа. Ну то есть давайте заложим поменьше biases, сделаем универсальную архитектуру, и позволим ей выучить всё из данных. Если получится, не придётся затачиваться на отдельные модальности и можно будет использовать одну общую архитектуру для смешанных модальностей.
Собственно, Perceiver — это архитектура, основанная на трансформере и использующая асимметричный механизм внимания (кросс-внимание), могущий итеративно выхватывать из входа релевантные данные и агрегировать их внутри себя, и способный скейлиться на очень большие размеры входа (как раз чего не могут обычные трансформеры, хотя за последнее время появилось много эффективных их реализаций).
Как оно работает?
Основная идея подхода — завести маленький набор латентных переменных (latent array). Эти юниты будут через механизм внимания обращаться ко входу (потенциально большому) и таким образом окажутся боттлнеком, который должен отсеять важные части входа. И делать это perceiver может итеративно, потому что таких блоков в сети будет несколько. Каждый раз, соответственно, он может обращаться к разным частям входа, в зависимости от того, что он “узнал” на предыдущих шагах.
Авторы предлагают посмотреть на эту модель как на выполняющую кластеризацию входа end-to-end, где скрытые юниты являются центрами кластеров. Не знаю, мне сходу неочевидно, почему это так.
Поскольку временная/пространственная информация всё-таки важна, а модель на структуру входа напрямую не закладывается, авторы добавляют к каждому входному элементу позиционные энкодинги на основе Фурье (синусы и косинусы от логарифмического банка частот, а координата внутри измерения масштабируется в диапазон [-1,1]). Эмбеддинги не добавляются ко входу (как в оригинальном трансформере), а конкатенируются с ним.
Авторы считают, что эта история с позиционными эмбеддингами не дискредитирует их подход c уменьшением implicit biases. Типа, мы даём сети фичи, а как их использовать её дело, сама выучит и решит как лучше. К тому же их легче адаптировать к новым доменам, чем собирать новую архитектуру. Ну и вообще мультимодальные модели так легче собирать.
Внутри модели повторяются два основных блока: 1) кросс-внимание (cross-attention), где Q приходит из низкоразмерной латентной части, а K/V из входа (большого), и 2) обычное внимание (self-attention трансформера), трансформирующее эти latent’ы. Эти блоки могут повторяться много раз, и даже иметь расшаренные веса между этими повторениями. Тогда получается что-то типа развёрнутой по глубине RNN или универсального трансформера.
Стандартное внимание по-прежнему остаётся квадратичным, но оно здесь от низкоразмерного latent’а (<=1024), так что не так страшно. Можно заодно глубины добавить, чтобы модель посложнее была (на ImageNet сделали 48 таких блоков). У latent’ов есть обучаемые позиционные эмбеддинги. Сам этот latent array, так понимаю, выучивается, а не зависит от входа или какого-то рандома.
GitHub
GitHub - lucidrains/perceiver-pytorch: Implementation of Perceiver, General Perception with Iterative Attention, in Pytorch
Implementation of Perceiver, General Perception with Iterative Attention, in Pytorch - lucidrains/perceiver-pytorch
👍2
Эксперименты показали, что на ImageNet персивер в ~44M параметров бьёт заточенный на это ResNet-50 (у него правда обычно ~25M), сильно бьёт обычный трансформер (но там пришлось уменьшать размер входа до 64x64 чтобы он смог работать) и в общем сравним с недавним ViT (https://t.me/gonzo_ML/434).
На датасете AudioSet, где надо классифицировать звуковые события в видео, моделька дала SoTA на чистой видео модальности, а также лучшая и на чистом аудио, и на audio+video, хоть там разница и поменьше.
На датасете с облаками точек ModelNet40 не SoTA, но весьма достойно, особенно учитывая, что SoTA весьма сложна.
В общем, модель работает. Что особенно прекрасно, она хорошо контрибьютит в большое свежее движение трансформеров от текстов к картинкам и к другим модальностям, а тут и к мультимодальности.
На датасете AudioSet, где надо классифицировать звуковые события в видео, моделька дала SoTA на чистой видео модальности, а также лучшая и на чистом аудио, и на audio+video, хоть там разница и поменьше.
На датасете с облаками точек ModelNet40 не SoTA, но весьма достойно, особенно учитывая, что SoTA весьма сложна.
В общем, модель работает. Что особенно прекрасно, она хорошо контрибьютит в большое свежее движение трансформеров от текстов к картинкам и к другим модальностям, а тут и к мультимодальности.
Telegram
gonzo-обзоры ML статей
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob…
Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob…
👍1
Bottleneck Transformers for Visual Recognition
Aravind Srinivas, Tsung-Yi Lin, Niki Parmar, Jonathon Shlens, Pieter Abbeel, Ashish Vaswani
Статья: https://arxiv.org/abs/2101.11605
Код (неавторский): https://github.com/lucidrains/bottleneck-transformer-pytorch
Ещё одна работа про трансформеры в работе с картинками, технически простая, но по-своему интересна. Ну и авторы знаковые.
Собственно, за последние полгода уже вышло множество работ, примеряющих трансформеры на обработку изображений. Про часть мы уже писали, например, ViT (https://t.me/gonzo_ML/434) или недавний Perceiver (https://t.me/gonzo_ML/545). Работ таких сильно больше, авторы дают классификацию разных подходов и показывают своё место в ней (см. картинку к посту).
В двух словах, текущая работа добавляет трансформерные блоки в бэкбон сети (не поверх него как VideoBERT и т.п.) и является гибридной моделью (свёртки + внимание), а не чисто моделью на внимании (как ViT и другие).
Идея очень простая. Давайте посмотрим на обычный ResNet. У него есть bottleneck блоки, сначала ужимающие входной тензор по глубине (через 1x1 свёртки), потом производящие вычисления нормальными свёртками, и снова увеличивающие размерность выходного тензора. В этом блоке можно заменить средний этап со свёртки 3x3 на полноценный multi-head self-attention. В работе авторы заменяют боттлнеки резнета в финальной группе (c5) на такие вот новые боттлнек-трансформеры (BoT блоки). И смотрят, что получается. А получается достойно.
В работе заходят со стороны сегментации и детекции. Для таких задач часто нужна глобальная информация и свёртки, эффективно ловящие локальную информацию, могут быть не лучшим вариантом. Можно, конечно, всегда добавить слоёв и “поле зрения” высоких свёрток будет большим, но что если взять вместо них self-attention, у которого сразу глобальное поле? Есть очевидный момент, что в силу квадратичной вычислительной сложности внимания это дорого делать на входе и/или на картинках высокого разрешения, так что вставим мы его только в верхние уровни сети, где тензоры уже достаточно низкого разрешения и это не будет проблемой. Так мы получим гибридную архитектуру (свёртки + внимание).
Замена технически очень простая: берём ResNet и заменяем только три последних боттлнек блока на новые. Более никаких изменений и плясок с бубном (на этой теме авторы акцентируются особо :) ).
Полученную сеть зовут ботнетом (BoTNet).
На задачах сегментации и детекции результаты становятся лучше.
В работе куча экспериментов, перечислять все не буду, отмечу что-то интересное.
Во-первых, на одинаковых настройках, на задаче instance segmentation BoT50 в качестве бэкбона для feature pyramid network всегда лучше ResNet-50. Аналогично и с другими резнетами (101, 152). И более того, BoTNet-50 лучше ResNet-101 и в целом сравним с ResNet-152. Неплохая альтернатива добавлению лишних 50-100 слоёв.
От обучения на большем разрешении ботнет выигрывает (таким образом получили новый рекорд для single model single scale instance segmentation с BoT200, побив ResNeSt).
Нельзя не сравнить на классификации на обычном ImageNet. Тут BoTNet-50 не даёт особенных преимуществ по качеству перед ResNet-50 (вероятно, потому что работают здесь с меньшими разрешениями, чем в сегментации, 224x224 против 1024x1024). Но зато параметров меньше (а вычислений в терминах умножений-сложений примерно столько же).
Интересно сравнение с EfficientNets, SENets и ResNets.
EfficientNets оказались стабильно хуже — почти всегда находится ResNet, SENet или BoTNet лучше. Парето-кривая выглядит убедительно.
На сравнительно небольших моделях в что называется lower accuracy regime (до 83% top-1 accuracy) ResNet/SENet рулят и бьют остальных. ViT-384 вообще оказывается хуже ResNet-50 (но правда для ViT ценность была именно в обучении на больших датасетах, а не на теперь уже мелк`ом ImageNet, и там, как мы помним, цифры были существенно выше и вообще SoTA), а улучшенный DeiT-384 хуже SENet. В любом случае это сильные свёрточные бейзлайны, которые надо иметь в виду.
BoTNet начинает рулить на больших моделях за пределами этого режима.
Aravind Srinivas, Tsung-Yi Lin, Niki Parmar, Jonathon Shlens, Pieter Abbeel, Ashish Vaswani
Статья: https://arxiv.org/abs/2101.11605
Код (неавторский): https://github.com/lucidrains/bottleneck-transformer-pytorch
Ещё одна работа про трансформеры в работе с картинками, технически простая, но по-своему интересна. Ну и авторы знаковые.
Собственно, за последние полгода уже вышло множество работ, примеряющих трансформеры на обработку изображений. Про часть мы уже писали, например, ViT (https://t.me/gonzo_ML/434) или недавний Perceiver (https://t.me/gonzo_ML/545). Работ таких сильно больше, авторы дают классификацию разных подходов и показывают своё место в ней (см. картинку к посту).
В двух словах, текущая работа добавляет трансформерные блоки в бэкбон сети (не поверх него как VideoBERT и т.п.) и является гибридной моделью (свёртки + внимание), а не чисто моделью на внимании (как ViT и другие).
Идея очень простая. Давайте посмотрим на обычный ResNet. У него есть bottleneck блоки, сначала ужимающие входной тензор по глубине (через 1x1 свёртки), потом производящие вычисления нормальными свёртками, и снова увеличивающие размерность выходного тензора. В этом блоке можно заменить средний этап со свёртки 3x3 на полноценный multi-head self-attention. В работе авторы заменяют боттлнеки резнета в финальной группе (c5) на такие вот новые боттлнек-трансформеры (BoT блоки). И смотрят, что получается. А получается достойно.
В работе заходят со стороны сегментации и детекции. Для таких задач часто нужна глобальная информация и свёртки, эффективно ловящие локальную информацию, могут быть не лучшим вариантом. Можно, конечно, всегда добавить слоёв и “поле зрения” высоких свёрток будет большим, но что если взять вместо них self-attention, у которого сразу глобальное поле? Есть очевидный момент, что в силу квадратичной вычислительной сложности внимания это дорого делать на входе и/или на картинках высокого разрешения, так что вставим мы его только в верхние уровни сети, где тензоры уже достаточно низкого разрешения и это не будет проблемой. Так мы получим гибридную архитектуру (свёртки + внимание).
Замена технически очень простая: берём ResNet и заменяем только три последних боттлнек блока на новые. Более никаких изменений и плясок с бубном (на этой теме авторы акцентируются особо :) ).
Полученную сеть зовут ботнетом (BoTNet).
На задачах сегментации и детекции результаты становятся лучше.
В работе куча экспериментов, перечислять все не буду, отмечу что-то интересное.
Во-первых, на одинаковых настройках, на задаче instance segmentation BoT50 в качестве бэкбона для feature pyramid network всегда лучше ResNet-50. Аналогично и с другими резнетами (101, 152). И более того, BoTNet-50 лучше ResNet-101 и в целом сравним с ResNet-152. Неплохая альтернатива добавлению лишних 50-100 слоёв.
От обучения на большем разрешении ботнет выигрывает (таким образом получили новый рекорд для single model single scale instance segmentation с BoT200, побив ResNeSt).
Нельзя не сравнить на классификации на обычном ImageNet. Тут BoTNet-50 не даёт особенных преимуществ по качеству перед ResNet-50 (вероятно, потому что работают здесь с меньшими разрешениями, чем в сегментации, 224x224 против 1024x1024). Но зато параметров меньше (а вычислений в терминах умножений-сложений примерно столько же).
Интересно сравнение с EfficientNets, SENets и ResNets.
EfficientNets оказались стабильно хуже — почти всегда находится ResNet, SENet или BoTNet лучше. Парето-кривая выглядит убедительно.
На сравнительно небольших моделях в что называется lower accuracy regime (до 83% top-1 accuracy) ResNet/SENet рулят и бьют остальных. ViT-384 вообще оказывается хуже ResNet-50 (но правда для ViT ценность была именно в обучении на больших датасетах, а не на теперь уже мелк`ом ImageNet, и там, как мы помним, цифры были существенно выше и вообще SoTA), а улучшенный DeiT-384 хуже SENet. В любом случае это сильные свёрточные бейзлайны, которые надо иметь в виду.
BoTNet начинает рулить на больших моделях за пределами этого режима.
GitHub
GitHub - lucidrains/bottleneck-transformer-pytorch: Implementation of Bottleneck Transformer in Pytorch
Implementation of Bottleneck Transformer in Pytorch - lucidrains/bottleneck-transformer-pytorch
По сравнению с EfficientNet для BoTNet размер входного изображения требуется меньший для достижения аналогичного качества, так что делается вывод, что self-attention оказывается более эффективной операцией для пулинга контекста по сравнению с depthwise separable свёртками.
В общем имеем интересный drop-in replacement для обычных резнетов, и имеем сильные бейзлайны для дальнейших копаний. И ждём проверки этих моделей на очень больших датасетах, как были у ViT.
В общем имеем интересный drop-in replacement для обычных резнетов, и имеем сильные бейзлайны для дальнейших копаний. И ждём проверки этих моделей на очень больших датасетах, как были у ViT.
Всем привет!
Мы продолжаем наши активности в журнальном клубе вокруг AGI (https://t.me/gonzo_ML/449).
В ближайшую субботу 24 апреля в 17:00 MSK мы соберёмся обсудить статью "Embodied Intelligence via Learning and Evolution" (https://arxiv.org/abs/2102.02202).
Мы продолжаем наши активности в журнальном клубе вокруг AGI (https://t.me/gonzo_ML/449).
В ближайшую субботу 24 апреля в 17:00 MSK мы соберёмся обсудить статью "Embodied Intelligence via Learning and Evolution" (https://arxiv.org/abs/2102.02202).
Telegram
gonzo-обзоры ML статей
И ещё одно объявление.
Мы планируем запустить онлайн семинар/журнальный клуб по разбору статей вокруг общего искусственного интеллекта (AGI). Если вам интересно участвовать в этой активности в качестве слушателя или докладчика (или ещё как), ответьте, пожалуйта…
Мы планируем запустить онлайн семинар/журнальный клуб по разбору статей вокруг общего искусственного интеллекта (AGI). Если вам интересно участвовать в этой активности в качестве слушателя или докладчика (или ещё как), ответьте, пожалуйта…
Вчера на AGI семинаре обсудили статью:
"Embodied Intelligence via Learning and Evolution"
Agrim Gupta, Silvio Savarese, Surya Ganguli, Li Fei-Fei
https://arxiv.org/abs/2102.02202
Материалы семинара:
- запись https://www.youtube.com/watch?v=M82hKVL0G2c
- слайды https://docs.google.com/presentation/d/1-KcUCx99iHLyUaA9Vmz7uTU5z9XUemOVjwxE-_8DQiU/edit?usp=sharing
- видео авторов https://www.youtube.com/watch?v=MMrIiNavkuY
"Embodied Intelligence via Learning and Evolution"
Agrim Gupta, Silvio Savarese, Surya Ganguli, Li Fei-Fei
https://arxiv.org/abs/2102.02202
Материалы семинара:
- запись https://www.youtube.com/watch?v=M82hKVL0G2c
- слайды https://docs.google.com/presentation/d/1-KcUCx99iHLyUaA9Vmz7uTU5z9XUemOVjwxE-_8DQiU/edit?usp=sharing
- видео авторов https://www.youtube.com/watch?v=MMrIiNavkuY
YouTube
AGI Seminar #5 (24.04.2021)
Обсуждаем статью "Embodied Intelligence via Learning and Evolution" (https://arxiv.org/abs/2102.02202) @Grigory Sapunov
[BYOL] Bootstrap your own latent: A new approach to self-supervised Learning
Jean-Bastien Grill, Florian Strub, Florent Altché, Corentin Tallec, Pierre H. Richemond, Elena Buchatskaya, Carl Doersch, Bernardo Avila Pires, Zhaohan Daniel Guo, Mohammad Gheshlaghi Azar, Bilal Piot, Koray Kavukcuoglu, Rémi Munos, Michal Valko
Статья: https://arxiv.org/abs/2006.07733
Код (на JAX и Haiku): https://github.com/deepmind/deepmind-research/tree/master/byol
Мы уже писали про разные интересные результаты в contrastive learning (CL), например, SimCLR (https://t.me/gonzo_ML/324), LoCo (https://t.me/gonzo_ML/342) или даже про применение этого подхода для работы с кодом (https://t.me/gonzo_ML/330). За последнее время появилось много новых интересных результатов, которые хочется разобрать. Но перед этим важно рассказать про некоторые вещи, ставшие уже классическими. BYOL от DeepMind и Imperial College как раз из таких.
Многие методы CL используют для обучения и позитивные и негативные примеры, и цель обучения — для позитивных примеров получить близкие репрезентации, а для пар позитивного и негативного — далёкие. BYOL интересен тем, что получает SoTA (на тот момент) без использования негативных пар. В этом смысле его, пожалуй, некорректно называть contrastive learning, а правильнее звать более широким термином self-supervised learning (SSL) .
Классические SSL методы часто строят фреймворк вокруг репрезентаций различных отображений одного и того же объекта (различные аугментированные представления [view] одной и той же картинки, например), и репрезентация одного представления должна быть способна предсказать репрезентацию другого представления того же самого изображения. Предсказание напрямую в пространстве репрезентаций может вести к коллапсу этих самых репрезентаций (например, к константе по всем представлениям), поэтому CL методы обходят это переформулированием проблемы предсказания проблемой разделения (discrimination) — по репрезентации аугментированного представления они учатся различать репрезентации других аугментированных представлений того же самого объекта от репрезентаций аугментированных представлений совсем других объектов (других картинок, например). Это спасает от коллапса репрезентаций.
В данной работе авторы задались вопросом, нужны ли эти негативные примеры для борьбы с коллапсом или можно обойтись без них.
BYOL использует две сети: онлайн (online) и целевую (target). Онлайн сеть состоит из трёх этапов: энкодер, проектор и предиктор. Целевая сеть имеет почти такую же архитектуру (нет предиктора), и свой набор весов. Между двумя сетями нет шаринга, но связь есть — веса целевой сети являются экспоненциальным скользящим средним весов онлайн сети.
Из интересного, авторы заметили, что целевая сеть может быть зафиксирована в рандомно инициализированном состоянии и онлайн сеть при обучении предсказывать её репрезентации даёт репрезентации сравнительно неплохого качества (18.8% top-1 acc на ImageNet, в то время как сама рандомная сеть лишь 1.4%, что кстати тоже многовато...). В этом в целом кроется суть метода: для некой целевой репрезентации мы можем, пытаясь её предсказать, выучить новую, потенциально улучшенную. А отсюда мы можем повторить процесс для новой репрезентации, итерируя процедуру и каждый раз делая целевой предыдущую онлайн репрезентацию. Такой вот собственно бутстрапинг.
BYOL генерирует два разных представления (v и v’) по исходной картинке (каждое со своими аугментациями, такими же как в SimCLR — случайный патч изображения + случайный горизонтальный флип + дисторсия цвета + гауссовское размытие + соляризация). Обе сети далее прогоняют это через свои энкодеры (ResNet-50 и больше/шире) и проекторы (MLP), онлайн сеть также прогоняет через предиктор (MLP), и здесь её цель — предсказать репрезентацию целевой сети.
Jean-Bastien Grill, Florian Strub, Florent Altché, Corentin Tallec, Pierre H. Richemond, Elena Buchatskaya, Carl Doersch, Bernardo Avila Pires, Zhaohan Daniel Guo, Mohammad Gheshlaghi Azar, Bilal Piot, Koray Kavukcuoglu, Rémi Munos, Michal Valko
Статья: https://arxiv.org/abs/2006.07733
Код (на JAX и Haiku): https://github.com/deepmind/deepmind-research/tree/master/byol
Мы уже писали про разные интересные результаты в contrastive learning (CL), например, SimCLR (https://t.me/gonzo_ML/324), LoCo (https://t.me/gonzo_ML/342) или даже про применение этого подхода для работы с кодом (https://t.me/gonzo_ML/330). За последнее время появилось много новых интересных результатов, которые хочется разобрать. Но перед этим важно рассказать про некоторые вещи, ставшие уже классическими. BYOL от DeepMind и Imperial College как раз из таких.
Многие методы CL используют для обучения и позитивные и негативные примеры, и цель обучения — для позитивных примеров получить близкие репрезентации, а для пар позитивного и негативного — далёкие. BYOL интересен тем, что получает SoTA (на тот момент) без использования негативных пар. В этом смысле его, пожалуй, некорректно называть contrastive learning, а правильнее звать более широким термином self-supervised learning (SSL) .
Классические SSL методы часто строят фреймворк вокруг репрезентаций различных отображений одного и того же объекта (различные аугментированные представления [view] одной и той же картинки, например), и репрезентация одного представления должна быть способна предсказать репрезентацию другого представления того же самого изображения. Предсказание напрямую в пространстве репрезентаций может вести к коллапсу этих самых репрезентаций (например, к константе по всем представлениям), поэтому CL методы обходят это переформулированием проблемы предсказания проблемой разделения (discrimination) — по репрезентации аугментированного представления они учатся различать репрезентации других аугментированных представлений того же самого объекта от репрезентаций аугментированных представлений совсем других объектов (других картинок, например). Это спасает от коллапса репрезентаций.
В данной работе авторы задались вопросом, нужны ли эти негативные примеры для борьбы с коллапсом или можно обойтись без них.
BYOL использует две сети: онлайн (online) и целевую (target). Онлайн сеть состоит из трёх этапов: энкодер, проектор и предиктор. Целевая сеть имеет почти такую же архитектуру (нет предиктора), и свой набор весов. Между двумя сетями нет шаринга, но связь есть — веса целевой сети являются экспоненциальным скользящим средним весов онлайн сети.
Из интересного, авторы заметили, что целевая сеть может быть зафиксирована в рандомно инициализированном состоянии и онлайн сеть при обучении предсказывать её репрезентации даёт репрезентации сравнительно неплохого качества (18.8% top-1 acc на ImageNet, в то время как сама рандомная сеть лишь 1.4%, что кстати тоже многовато...). В этом в целом кроется суть метода: для некой целевой репрезентации мы можем, пытаясь её предсказать, выучить новую, потенциально улучшенную. А отсюда мы можем повторить процесс для новой репрезентации, итерируя процедуру и каждый раз делая целевой предыдущую онлайн репрезентацию. Такой вот собственно бутстрапинг.
BYOL генерирует два разных представления (v и v’) по исходной картинке (каждое со своими аугментациями, такими же как в SimCLR — случайный патч изображения + случайный горизонтальный флип + дисторсия цвета + гауссовское размытие + соляризация). Обе сети далее прогоняют это через свои энкодеры (ResNet-50 и больше/шире) и проекторы (MLP), онлайн сеть также прогоняет через предиктор (MLP), и здесь её цель — предсказать репрезентацию целевой сети.
GitHub
deepmind-research/byol at master · google-deepmind/deepmind-research
This repository contains implementations and illustrative code to accompany DeepMind publications - google-deepmind/deepmind-research
👍1
Ошибка считается через MSE от нормализованных выхода предиктора онлайн сети и выхода проектора целевой сети. Лосс симметризуется путём прогона обоих представлений по обоим путям (v также прогоняется через целевую сеть, а v’ через онлайн сеть). Лосс минимизируется изменением параметров только онлайн сети. После обучения оставляют только энкодер онлайн сети.
Обучали на ImageNet с большим батчем (4096) на 512 TPU-v3, получалось примерно 8 часов для ResNet-50.
Результаты хорошие. При обучении линейного классификатора поверх получившихся репрезентаций на ImageNet метод побил SimCLR и MoCo v2 (SimCLRv2 появился параллельно BYOL и был лучше). При файнтюнинге на ImageNet тоже хорошо, и при переносе на другие датасеты неплохо работает. На другие задачи типа семантической сегментации, детектирования объектов и оценки глубины также переносится.
Отсутствие негативных примеров даёт некоторые преимущества. Например, традиционные методы используют в качестве негативных остальные сэмплы в батче и соответственно при маленьком батче репрезентации начинают деградировать. BYOL в целом ведёт себя лучше, хотя тоже начинает деградировать при уменьшении батча, но не так сильно.
Также контрастивные методы чувствительны к выбору аугментаций и этому есть разные причины, например, при некоторых аугментациях достаточно какой-нибудь побочной информации, чтобы определить принадлежность к одному изображению (например, гистограмма цветов решает эту задачу) и методу нет стимула оставлять в репрезентации что-либо кроме этой информации, соответственно репрезентация оказывается малополезной. У BYOL же есть стимулы сохранять в онлайн сети любую информацию, которую выхватывает целевая сеть, потому что это улучшает предсказания. Так что по идее метод должен быть более устойчивым к выбору аугментаций и эксперимент это подтверждает.
Это интересный метод, особенно для случаев, когда негативные примеры нелегко подобрать. Например, когда они оказываются не такие уж и негативные, типа кучи похожих или одинаковых объектов в датасете, что и на картинках может случиться, и тем более в более сложных областях типа биологии, где все повязаны эволюцией.
К работе были претензии в духе, что негативные примеры могут использоваться неявно через BatchNorm (коего внутре модели было немало) и что статистика батча даёт эффект контраста. Но авторы показали в отдельной работе (“BYOL works even without batch statistics“, https://arxiv.org/abs/2010.10241), что замена BN на независимую от батча нормализацию даёт сопоставимый с оригинальным BYOL перформанс, так что статистика батчей не является ключевой информацией для выучивания хороших репрезентаций.
Обучали на ImageNet с большим батчем (4096) на 512 TPU-v3, получалось примерно 8 часов для ResNet-50.
Результаты хорошие. При обучении линейного классификатора поверх получившихся репрезентаций на ImageNet метод побил SimCLR и MoCo v2 (SimCLRv2 появился параллельно BYOL и был лучше). При файнтюнинге на ImageNet тоже хорошо, и при переносе на другие датасеты неплохо работает. На другие задачи типа семантической сегментации, детектирования объектов и оценки глубины также переносится.
Отсутствие негативных примеров даёт некоторые преимущества. Например, традиционные методы используют в качестве негативных остальные сэмплы в батче и соответственно при маленьком батче репрезентации начинают деградировать. BYOL в целом ведёт себя лучше, хотя тоже начинает деградировать при уменьшении батча, но не так сильно.
Также контрастивные методы чувствительны к выбору аугментаций и этому есть разные причины, например, при некоторых аугментациях достаточно какой-нибудь побочной информации, чтобы определить принадлежность к одному изображению (например, гистограмма цветов решает эту задачу) и методу нет стимула оставлять в репрезентации что-либо кроме этой информации, соответственно репрезентация оказывается малополезной. У BYOL же есть стимулы сохранять в онлайн сети любую информацию, которую выхватывает целевая сеть, потому что это улучшает предсказания. Так что по идее метод должен быть более устойчивым к выбору аугментаций и эксперимент это подтверждает.
Это интересный метод, особенно для случаев, когда негативные примеры нелегко подобрать. Например, когда они оказываются не такие уж и негативные, типа кучи похожих или одинаковых объектов в датасете, что и на картинках может случиться, и тем более в более сложных областях типа биологии, где все повязаны эволюцией.
К работе были претензии в духе, что негативные примеры могут использоваться неявно через BatchNorm (коего внутре модели было немало) и что статистика батча даёт эффект контраста. Но авторы показали в отдельной работе (“BYOL works even without batch statistics“, https://arxiv.org/abs/2010.10241), что замена BN на независимую от батча нормализацию даёт сопоставимый с оригинальным BYOL перформанс, так что статистика батчей не является ключевой информацией для выучивания хороших репрезентаций.
👍1