И снова про MLP. Как мы уже писали, примерно полгода назад начался и до сих пор продолжается кембрийский взрыв разнообразия полносвязных сетей (или многослойных персептронов, MLP, как их часто называют), связанный с появлением работ, показавших, что и на MLP можно достигать качества трансформеров при работе с картинками и текстом. Главное, данных подгонять побольше, в объёмах существенно больших размера ImageNet, который сам когда-то казался гигантским. Либо добавлять новые inductive biases взамен утраченных (внимание или свёртки).
Началось это с MLP-Mixer (https://t.me/gonzo_ML/776) и нескольких других местами крайне похожих работ, вышедших практически одновременно с ним — явно из какой-то общей ноосферы все набирались.
Работ таких за полгода развелась уйма и неудивительно (и хорошо), что появились обзоры, пытающиеся это обобщать. Один из них представлен по ссылке.
Здесь авторы фокусируются только на задачах компзрения и задаются вопросом, станут ли MLP — наиболее простая архитектура с глобальным рецептивным полем, но без механизмов внимания — новой парадигмой в компьютерном зрении?
В целом про MLP уже давно известно, что оные являются универсальными аппроксиматорами, то есть по идее могут приблизить более-менее любые практически полезные непрерывные функции, так что и разные задачи компзрения и не только должны бы уметь решать. Но чего-то всё время для этого не хватало. То градиенты затухали (это, кстати, можно хорошо пронаблюдать даже в Tensorflow Playground, http://playground.tensorflow.org/, всего лишь на максимально доступных там шести слоях) и глубокие сети не обучались (и тут много всего придумали, от жадного послойного обучения ещё во времена Ивахненко, до residual connections и хитрых регуляризаций и нормализаций), то железо слабое и никто дождаться не может (тогда появились свёрточные сети с вычислительно более эффективными biases, а за ними после успеха и железо), то, как выяснилось, данных не хватало, чтобы вменяемые и полезные фичи выучить (как недавно выяснилось сначала для трансформеров на ViT, https://t.me/gonzo_ML/434, и затем и на MLP, https://t.me/gonzo_ML/776).
Переход к CNN, а затем и к трансформерам (ViT и последовавшими за ним), были как раз отдельными сменами парадигм в комп.зрении, и что важно, каждая была построена на базисе достаточно большого датасета (сначала ImageNet, потом более крупные коллекции типа JFT-300M), плюс производительного железа (сначала игровые GPU, теперь много всего, включая свежие продвинутые GPU и TPU, по этой теме я много писал тут https://blog.inten.to/hardware-for-deep-learning-part-4-asic-96a542fe6a81, пора дополнять и обновлять, особенно про GPU). В принципе, и то и другое на новом уровне есть и сейчас, осталось понять, не отсутствует ли что-то ещё? О чём и статья.
Для этого авторы пытаются разобраться и сравнить свойства разных вариантов свёрток/трансформеров/MLP, а также прослеживают, что произошло начиная с появления MLP-Mixer и куда ушли архитектуры за эти полгода.
Между разными архитектурами и моделями есть довольно большое пересечение и до некоторой степени эквивалентность в отдельных частях. Например, channel mixing в MLP-Mixer а также MLP в ViT это по сути то же, что и свёртки 1x1, и вопрос тогда, что считать свёрточной архитектурой? Да и механизмы внимания неоднократно пытались сводить к различным свёрткам. Но в целом всё равно есть несколько осей, по которым разные модели разделяются: обучаемые/необучаемые (как вариант — data driven) веса, рецептивное поле (глобальное/локальное), чувствительность к разрешению, чувствительность к позиции фичи, чувствительность к канальному измерению, а также следующие из архитектурных решений важные практические характеристики в виде числа параметров и количества вычислений (FLOPS).
От свёрток 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.
Модели с полными пространственными проекциями скорее пытаются улучшить результативность базовых вариантов. Уже описанный 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.