Size: a a a

gonzo-обзоры ML статей

2021 December 25
gonzo-обзоры ML статей
От свёрток MLP ощутимо отличается по локальности рецептивного поля. Полносвязные слои в итоге всё равно выучивают какие-то локальные фичи, это было видно и по MLP-Mixer, и по ResMLP, и по gMLP. Правда на более глубоких слоях MLP это обычно теряется (но может просто не хватает данных?). Также любопытно, что у двух очень похожих архитектур (MLP-Mixer и ResMLP) фичи получаются ощутимо разные, то есть это не какие-то универсальные визуальные фичи? Требует разбирательства.

От трансформеров с весами, определяемыми данными, все остальные заметно отличаются тем, что у остальных веса выучиваются в процессе обучения и далее от данных не зависят (хотя, конечно, есть более продвинутые динамические свёртки, например, в знаковой работе “Pay Less Attention with Lightweight and Dynamic Convolutions” https://arxiv.org/abs/1901.10430).

При этом у MLP есть несколько боттлнеков.

Первый очевидный — это переобучение, когда данных мало, так что надо готовить датасеты размера JFT-300M и больше. Второй — это вычислительная сложность, которая как и у стандартных трансформеров обычно квадратичная от размера входа (хотя MLP-Mixer вроде как военной смекалкой обходил это и был линейным). Третья проблема — заточенность MLP на конкретные входные разрешения, ибо размеры матриц весов полносвязных слоёв прошиты внутри и размерность входа в них обычно фигурирует. Ну и ещё одна потенциальная проблема в том, что в дефолтной композиции в виде пачки однотипных блоков, модель заточена на одно конкретное разрешение, а для некоторых задач хорошо бы иметь пирамиды фич (та же проблема есть и в дефолтном трансформере, поэтому там появились и рулят Swin Transformers и т.п.).

После MLP-Mixer и ко пошёл вал работ, устраняющих то или иное ограничение. Если посмотреть на Fig.6 из работы, то видно, что всё это так или иначе вариации на тему со сходной структурой и все кроме gMLP содержат тандем spatial MLP и channel MLP. Значимая часть улучшений при этом фокусируется на spatial MLP, чтобы сделать его нечувствительным к разрешению. Прям генеалогию можно простраивать, а если мы ещё придём к кодированию структуры всех сетей через какой-то универсальный язык (aka геном), то прям и биоинформатические методы можно было бы сюда применить.

Авторы поделили все варианты на три большие группы. Группа 1 содержит полные пространственные и канальные маппинги, группа 2 содержит аксиальные маппинги по пространственным измерениям плюс канальные, и группа 3 только канальные маппинги.

Аксиальные маппинги — это оптимизация обычных полных, чтобы иметь меньше параметров, но при этом всё равно захватывать осмысленные дальние взаимодействия, только теперь они должны быть строго по вертикальной и горизонтальной осям, что конечно уменьшает выразительность (в работе есть пример картинки со вратарём в прыжке за мячом, где мяч в стороне по диагонали и такое бы не поймалось), но возможно всё равно good enough. Vision Permutator (ViP) — пример такой модели, в его Permute-MLP три параллельные ветви: для горизонтальных, вертикальных и канальных проекций. В Sparse MLP аналогично. В RaftMLP горизонтальная и вертикальная ветви работают последовательно.

Модели на основе только проекций каналов заменяют пространственные полносвязные слои на канальные проекции (или свёртки 1x1), что приводит к тому, что патчи более не взаимодействуют между собой и они для восстановления рецептивного поля прибегают к различным сдвигам или перемещениям карт фич, чтобы у разных позиций была возможность взаимодействовать через канальное измерение. Выглядит, честно говоря, как “купи козу” - “продай козу”. Среди таких моделей S2MLP, S2MLPv2, AS-MLP (Axial Shifted) или Cycle MLP (эти прибегают к deformable convolution). Только HireMLP предлагает что-то ощутимо новое по сравнению с соседями, используя inner-region rearrangements  (разбивают карты фич на группы и группируют вдоль пространственных измерений, это даёт локальные взаимодействия) и cross-region rearrangements (сдвигают токены в каком-то направлении на заданный шаг, это даёт более глобальные взаимодействия). Ещё есть ConvMLP, но он так вообще скорее CNN.
источник
gonzo-обзоры ML статей
Модели с полными пространственными проекциями скорее пытаются улучшить результативность базовых вариантов. Уже описанный gMLP (https://t.me/gonzo_ML/787) как раз отсюда. Также в группе Sparse-MLP (который не то же самое, что упомянутый выше Sparse MLP, а модель на основе MoE, Mixture-of-Experts, https://t.me/gonzo_ML/472) или CCS (Circulant Channel-Specific Token Mixing MLP, решивший проблему чувствительности MLP к переносу фичи в пространстве через хитрую структуру весов).

Ну и кроме модификаций самих блоков внутри MLP есть ещё направление про общую структуру сети. Разные авторы пытаются отойти от изотропного дизайна MLP-Mixer/ViT, когда все уровни модели работают со входами одинакового размера и дают single-stage структуру. Здесь появляются так называемые two-stage альтернативы, когда начальная часть сети работает на более мелких патчах (7x7), а затем сливает их в более крупные (14x14). Это делают ViP и S2MLPv2. А другие (Sparse MLP, HireMLP, AS-MLP, CycleMLP) применяют пирамидальную структуры, где последовательно патчи укрупняются (в этих конкретных получается four-stage). И пирамидальные модели обычно дают лучший перформанс.

В целом качество современных моделей достойное, MLP сравнимы с современными трансформерами и CNN, причём и по объёмам вычислений тоже. Особенно те MLP, что всё-таки включают в себя что-то близкое к CNN. Отсюда авторы делают вывод, что текущие объёмы данных недостаточны для того, чтобы чистая MLP модель выучила фичи с нуля, и подходящий inductive bias рулит. Я в целом согласен, что разумен скорее срединный путь, чем полный отказ от inductive biases. Фундаментально это конечно интересное направление и его стоит копать дальше, и для новых типов данных оно нужно, и для старых вдруг мы найдём что-то интересное, или выяснится, что наши biases таки suboptimal (что в общем запросто, но опять же для наших целей оно может быть good enough). Эволюция на Земле тоже вон миллиарды лет крутилась прежде чем сформировала всё то, что у нас сейчас есть, и все имеющиеся у нас inductive biases дорогого стоят (в том числе и в терминах вычислений, коих за это время было проведено немеряно).

Из другого интересного, разные CNN были неплохо подвержены adversarial attacks. По имеющимся данным Vision трансформеры (ViT) вроде как более устойчивы к ним, а MLP где-то посередине. И с corruption robustness (https://arxiv.org/abs/2106.13122) тоже так. Но тут ещё есть что исследовать.

Ну и с тем, чтобы быть бэкбоном для других задач (детекция, сегментация и т.п.) мы пока с MLP тоже лишь в начале пути.

В общем, итоговые выводы авторов в том, что пока ещё слишком много компромиссов, чтобы считать приход MLP сменой парадигмы. Они пока ещё работают с патчами, а не пикселями (как правило вычислительной эффективности ради). Также довольно много движения к CNN и ради той же вычислительной эффективности, и ради независимости от разрешения входа. И как уже упоминалось, inductive biases ещё не хватает для независимого полёта.

Но зато фронт работ ого-го! Тут же до кучи и интерпретация этих моделей, и возможно более специальные оптимизаторы, и железо, и более продвинутые дизайны архитектур, и более подходящие варианты self-supervised learning.

Следующий год будет весёлым!
Telegram
gonzo-обзоры ML статей
Pay Attention to MLPs
Hanxiao Liu, Zihang Dai, David R. So, Quoc V. Le
Статья: https://arxiv.org/abs/2105.08050
Код (неофициальный): https://github.com/lucidrains/g-mlp-pytorch  

В области в последние полгода происходит большое бурление. По инерции всё ещё кажется, что фронтир многих исследований в computer vision и nlp уже (или соответственно всё ещё) находится в трансформерах. И там действительно много всего происходит, так что следить за всем потоком публикаций уже просто нереально и надо держать небольшой НИИ (а лучше автоматического агента), чтобы разбирать только свежие работы. Но это всё же не совсем уже фронтир. А вот старые добрые многослойные персептроны таки фронтир!

Буквально через пару недель после MLP-Mixer (https://t.me/gonzo_ML/776) и кучки других практически одновременно вышедших похожих работ появилась новая интересная работа на аналогичную тему.

Авторы снова подходят со стороны замены трансформера на варианты полносвязных сетей, экспериментируют с разными вариантами MLP и выбирают одну…
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
2022 January 14
gonzo-обзоры ML статей
[ConvNeXt] A ConvNet for the 2020s
Zhuang Liu, Hanzi Mao, Chao-Yuan Wu, Christoph Feichtenhofer, Trevor Darrell, Saining Xie
Статья: https://arxiv.org/abs/2201.03545  
Код: https://github.com/facebookresearch/ConvNeXt (нормально так, что у несколькодневной репы уже 1.7К звёзд)

Империя наносит алаверды.

После всех этих историй с заменой свёрточных сетей на трансформеры (ViT, https://t.me/gonzo_ML/434), а затем на старые добрые полносвязные сети (https://t.me/gonzo_ML/800), явно должно было быть что-то ответное от свёрточных сетей в духе, что вы их готовить не умеете. И вот, пожалуйста :)

Свежая работа от 10 января 2022 из главного центра экспертизы по свёрточным сетям им. Яна Лекуна (FAIR) + Беркли.

Это снова история и про то, нужны все эти inductive biases или нет, в них соль или нет. Польза от inductive biases свёрточных сетей, особенно translation equivariance, очевидно, есть, раз значительная доля продвинутых модификаций трансформеров и MLP ушла в сторону гибридизации и привнесения свойств свёрток в эти модели. А если так, то может достаточно и свёрточных моделей, раз в них уже всё нужное есть?

Авторы поступили просто — взяли стандартный ResNet и постепенно прошли путь, добавляя в него разные вещи, показавшие себя хорошо в трансформерах (сохраняя при этом количество вычислений на примерно одинаковом уровне, чтобы было честно). И добились таки чисто свёрточной архитектуры (ConvNeXt), бьющей лучшие имеющиеся трансформеры аналогичных размеров (имеется в виду Swin Transformer, https://github.com/microsoft/Swin-Transformer).

В качестве объектов берут сети двух размеров ResNet-50/Swin-T и ResNet-200/Swin-B, также оценивают скейлинг на модели размера XL, но дальше не идут, так что сравниться напрямую со Swin V2 (https://arxiv.org/abs/2111.09883) размеров H и G не получится.

Во-первых, начальные резнеты обучают аналогичными ViT процедурами, и это само по себе уже даёт повышение качества (Top-1 accuracy на ImageNet) с 76.1% до 78.8% для ResNet-50. Сюда входит много всяких изменений и улучшений: 300 эпох вместо 90, оптимизатор AdamW, аугментации через Mixup, Cutmix, RandAugment, Random Erasing, регуляризации включая stochastic depth и label smoothing. Если вы с чем-то из этого ещё не знакомы и всё ещё кипятите, то это хороший повод набраться актуальных рецептов. В статье все ссылки есть.

Дальше изменения бьются на несколько блоков.

1. Макро дизайн.

Тут изменяют соотношение compute ratio между разными уровнями сети от типичных для резнетов к практикующимся в трансформерах. На уровне количества блоков в резнете это переход от (3,4,6,3) блоков на каждом этапе (stage) резнета к (3,3,9,3). Это повышает качество бейзлайна с 78.8% до 79.4%.

Также ствол сети делают более похожим на трансформерный и вместо агрессивного даунсемплинга резнетов делают что-то больше похожее на “патчификацию” трансформеров (свёртки 4x4 с шагом 4, то есть изображение распадается на непересекающиеся патчи). Это даёт буст с 79.4% до 79.5%.

2. ResNeXt-ификация.

В свёрточных моделях ResNeXt (https://arxiv.org/abs/1611.05431) использовались групповые свёртки (grouped convolution) и увеличенная ширина сети. Предельный случай групповых свёрток это depthwise свёртки, где число групп равно числу каналов (кажется, стали популярны после модели Xception (https://arxiv.org/abs/1610.02357) от, неожиданно, широко известного Франсуа Шолле, автора Кераса и нашумевшей статьи про измерение интеллекта). В данной работе берут depthwise свёртки и увеличивают ширину сети, это даёт буст до 80.5%.

3. Инвертированный боттлнек.

В резнетах классика жанра это уменьшение размерности каналов через 1x1 свёртку, вычисление более тяжёлой свёртки (обычно 3x3) на том что получилось, и снова восстановление размерности. В трансформерах же всё наоборот, внутри FFN слоя происходит расширение размерности вместо сжатия, это и есть inverted bottleneck. Здесь это тоже делают, получают 80.6%.

4. Большие ядра свёрток.
источник
gonzo-обзоры ML статей
В своё время в районе VGG произошёл массовый переход от свёрток разного размера к сильно заоптимизированным мелким свёрткам 3x3. В Swin трансформерах при этом окно больше, по крайней мере 7x7, поэтому здесь тоже попробовали более крупные свёртки и остановились на 7x7, в районе которых случается насыщение. Заодно также вынесли блок этой большой depthwise свёртки до расширения размерности — это чуть ухудшило качество, зато уменьшило количество вычислений (качество наверстали большими свёртками). Итог — снова 80.6%.


5. Микро дизайн.

Внутренние микроизменения в слоях: заменили ReLU на популярный в трансформерах GELU (который Gaussian Error Linear Unit, не путать с GLU, который с гейтами) — 80.6%; оставили меньше мест, где вообще применяется активация (в свёрточных сетях было принято вообще на каждый слой их вешать, а в трансформерах только на одном слое MLP блока обычно висит) — 81.3%; меньше слоёв нормализации — 81.4%, а также заменили BatchNorm на более простой и популярный в трансформерах LayerNorm (интересно, что попытки заменять BN на LN уже были, но втупую оно не работало, сработало сейчас в комплексе с другими изменениями) — 81.5%. Также добавили отдельные слои даунсемплинга (а не начальными блоками свёрток 3x3 со stride=2) — 82%.

Собственно итоговые 82% выше, чем 81.3% аналогичного по размеру и вычислениям Swin-T.

Интересно во всей этой истории то, что ничего нового в этих компонентах нет, просто в такой конфигурации их раньше не собирали, пробовали по-отдельности. Что наводит на мысли про возможный тюнинг почти любой работы, если бы было время, ресурсы и желание перебирать варианты. Для этого точно должна быть другая нейросеть, а-ля AlphaGo для сборки и улучшения архитектур.

Обучали всё на ImageNet-1K. Как вариант, на более богатом ImageNet-22K с последующим файнтюнингом на 1K. Что интересно, в первом варианте использовали EMA, то самое Polyak averaging через экспоненциальное скользящее среднее, которое как-то стало популярно в разных местах. Авторам оно помогло против оверфиттинга больших моделей.

Как итог, ConvNeXt бьёт Swin Transformer, а также сильные свёрточные бейзлайны RegNet и EfficientNet, если рассматривать трейдофф точность/количество вычислений.

Отдельно попробовали изотропный дизайн по типу трансформерного, когда размерность остаётся постоянной на протяжении всей сети, получается не хуже ViT.

В разговорах про трансформеры всегда был месседж, что они эффективнее на большом масштабе, когда могут выучить что надо без заданных заранее inductive biases. Но более тяжёлая ConvNeXt-XL по-прежнему перформит наравне или лучше соответствующего по размеру Swin трансформера, при этом имея более высокий throughput. И также XL ощутимо лучше L, так что архитектура скейлится.

Также проверили на downstream задачах детекции и сегментации в COCO. Здесь ConvNeXt наравне или лучше Swin. И на семантической сегментации в ADE20K тоже лучше.

Что интересно, в тестах на устойчивость ConvNeXt оказался лучше SoTA трансформерных моделей.

В общем хорошая получилась модель, и inductive bias свёрок тоже хорош.

Также из любопытного то, что изначально всё делали на GPU V100, а потом проверили на более новом A100. Здесь преимущество ConvNeXt над Swin по части througput оказалось ещё выше.

И ещё из интересных мелочей, это то место, где формат тензоров NHWC с канальным измерением на последнем месте работает существенно быстрее NCHW за счёт поддержки в Нвидиевских тензорных ядрах (https://docs.nvidia.com/deeplearning/performance/dl-performance-convolutional/index.html#tensor-layout). И авторы специально использовали свежий PyTorch, чтобы это поправить (https://pytorch.org/tutorials/intermediate/memory_format_tutorial.html), потому что по дефолту в PyTorch всегда было NCHW (а в TensorFlow, кстати, NHWC).
источник