gonzo-обзоры ML статей
24.3K subscribers
2.95K photos
2 videos
3 files
1.46K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
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, так понимаю, выучивается, а не зависит от входа или какого-то рандома.
👍2
Эксперименты показали, что на ImageNet персивер в ~44M параметров бьёт заточенный на это ResNet-50 (у него правда обычно ~25M), сильно бьёт обычный трансформер (но там пришлось уменьшать размер входа до 64x64 чтобы он смог работать) и в общем сравним с недавним ViT (https://t.me/gonzo_ML/434).

На датасете AudioSet, где надо классифицировать звуковые события в видео, моделька дала SoTA на чистой видео модальности, а также лучшая и на чистом аудио, и на audio+video, хоть там разница и поменьше.

На датасете с облаками точек ModelNet40 не SoTA, но весьма достойно, особенно учитывая, что SoTA весьма сложна.

В общем, модель работает. Что особенно прекрасно, она хорошо контрибьютит в большое свежее движение трансформеров от текстов к картинкам и к другим модальностям, а тут и к мультимодальности.
👍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 начинает рулить на больших моделях за пределами этого режима.
По сравнению с EfficientNet для BoTNet размер входного изображения требуется меньший для достижения аналогичного качества, так что делается вывод, что self-attention оказывается более эффективной операцией для пулинга контекста по сравнению с depthwise separable свёртками.

В общем имеем интересный drop-in replacement для обычных резнетов, и имеем сильные бейзлайны для дальнейших копаний. И ждём проверки этих моделей на очень больших датасетах, как были у ViT.