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). Если вам интересно участвовать в этой активности в качестве слушателя или докладчика (или ещё как), ответьте, пожалуйта…