Здесь я обобщаю последние работы, проделанные Facebook AI над Vision Transformers (ViT), чтобы держать вас в курсе. Трансформеры Vision становятся очень популярными в наши дни. Они используются во многих областях, включая обнаружение объектов, сегментацию и обучение представлению. Поэтому я считаю важным знать, что происходит в последнее время. Лично я считаю, что FAIR проделывает потрясающую работу в этой области. Поэтому резюмирую некоторые работы, найденные в Интернете. Однако я не могу включить все детали, например эксперименты, потому что пытаюсь объединить несколько связанных работ. Я надеюсь, что вы найдете это полезным.

Преобразователь зрения



Ранние свертки помогают трансформерам лучше видеть

Авторы утверждают, что ViTs чувствительны к выбору оптимизатора (AdamW против SGD), особенно к гиперпараметрам и продолжительности графика обучения, в отличие от современных сверточных нейронных сетей. Почему это так? Они говорят, что проблема связана с исправлением основы (имеется в виду получение неперекрывающихся исправлений) моделей ViT, реализованных как свертка шаг-p p×p (p = 16 по умолчанию) операция. Эта свертка с большим ядром и большим шагом противоречит типичному выбору конструкции сверточных слоев в нейронных сетях. Поэтому они предлагают заменить 1 блок Transformer Encoder на эквивалентную по # параметрам архитектуру CNN, имеющую традиционные ядра 3х3 (как видно на рисунке выше).

Сверточная конструкция ствола.

Как уже говорилось, сверточный (C) стержень (см. рисунок выше) поддерживается путем укладки сверток 3 × 3, за которыми следует одна свертка 1 × 1 в конце, чтобы соответствовать размерам для входа первого блока преобразователя энкодера. Таким образом, основа C понижает дискретизацию входного изображения 224×224 с помощью перекрывающихся (то есть шаг равен 1 или 2) шаговых сверток до 14×14, что соответствует количеству входных данных, созданных стандартной основой patchify. Выбор конструкции следующий:

  1. Все свертки 3 × 3 либо имеют шаг 2 и удваивают выходные каналы, либо шаг 1 и сохраняют выходные каналы неизменными.
  2. За свертками 3 × 3 следует норма партии (BN), а затем ReLU, а за последней сверткой 1 × 1 — нет.
  3. Ствол C представлен как альтернатива оригинальному стеблю Patchify; однако они также сбрасывают 1 блок трансформатора, чтобы флопы оставались одинаковыми.

Свертки в ViT

Мы помним, что есть также Hybrid ViT, в котором используется ResNet 50p с 40 сверточными слоями в качестве основы вместо P-стержня. Авторы подчеркивают, что цель состоит в том, чтобы исследовать легкие сверточные основы, которые состоят всего из 5-7 сверточных основ (минимальная сверточная основа) вместо 40, используемых гибридным ViT.

Авторы приходят к выводу, что тривиальное изменение замены этой основы patchify простой сверточной основой приводит к заметным изменениям в поведении оптимизации. Он сходится быстрее и не очень чувствителен к выбору оптимизации или некоторых гиперпараметров. Его легче оптимизировать, и он обеспечивает замечательную производительность.

Подробнее:



Обучение преобразованию изображений с эффективным использованием данных и дистилляции с помощью внимания (DeiT)

В данной работе авторы выпускают конкурентоспособные трансформаторы без свертывания. Они вводят стратегию «учитель-ученик», которая опирается на новый токен дистилляции. Этот токен гарантирует, что ученик учится у учителя посредством внимания. Сеть учителей обычно представляет собой консеть. Предлагаемый DeiT — это новая процедура дистилляции, основанная на токене дистилляции, который, по сути, играет ту же роль, что и токен класса. Оба признака, класс и дистилляция, взаимодействуют в преобразователе через внимание.

Что касается архитектуры, мы видим, что мы просто вводим новые токены, похожие на токен CLS, и передаем их вместе с токенами CLS и Patch. Токен дистилляции взаимодействует с другими встраиваниями через уровни самоконтроля так же, как токен CLS. Это позволяет учиться на выходе модели учителя, convnet. Они также заметили, что оба вектора CLS и дистилляция сходятся к разным векторам, но их задачи несколько схожи, если у нас есть хорошо обученная сеть учителей. Жетон дистилляции используется для минимизации потерь при дистилляции. Во-первых, давайте представим 2 стратегии дистилляции:

Мягкая перегонка

Мягкая дистилляция сводит к минимуму расхождение KL между softmax (phi) логитов учителя (Zt) и логитов ученика (Zs), а tau является гиперпараметром температуры. Мы также минимизируем потерю перекрестной энтропии с помощью основной метки истинности y.

Твердая перегонка

Здесь мы просто применяем argmax к логитам учителя (Zt), чтобы получить псевдометку yt. Таким образом, мы минимизируем перекрестную энтропию как с истинной меткой, так и с псевдометкой. Обратите внимание, что мы также можем применить сглаживание меток к yt.

Различия

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

Итак, есть 2 линейных классификатора (не MLP) для токенов CLS и дистилляции соответственно.

Сеть учителей

Авторы сообщают, что convnet лучше в качестве обучающей сети, чем в качестве преобразователя. Мы видим, что наибольший прирост дает RegNetY-16GF(гигафлоп). Ученик: DeiT-B (со знаком перегонного куба) относится к DeiT-B, обученному авторской стратегии дистилляции. DeiT-B 384 относится к этапу тонкой настройки с большим разрешением. Как заявили в ViT, авторы сочли полезным провести тонкую настройку на большее разрешение. DeiT точно настраивается с использованием как истинной метки, так и прогноза учителя (с более высоким разрешением), и сеть учителей использует то же целевое разрешение. Таким образом, как и в случае с ViT, они предварительно обучают модели DeiT с разрешением 224, а мы настраиваем их с разрешением 384.

Дистилляция

Здесь DeiT относится к DeiT-B, который имеет ту же архитектуру, что и ViT-B. DeiT-B (со знаком перегонного куба) относится к DeiT-B, обученному авторской стратегии дистилляции. Мы видим, что жесткая дистилляция дает лучшую производительность, чем мягкая дистилляция. Далее, DeiT-B (со знаком перегонного куба) [встраивание] означает, как метка предсказывается во время тестирования, поскольку оба вложения способны вывести метку изображения. Мы видим, что если мы добавим вывод softmax обоих классификаторов (для CLS и токенов дистилляции), мы получим немного лучшую точность.

Подробнее:



Углубление с Image Transformers

Углубление ViT с LayerScale

Целью авторов здесь является улучшение стабильности обучения преобразователей более глубокого зрения.

Здесь eta (странное n) относится к модулю нормализации уровня, тогда как FFN и SA — это сеть с прямой связью и модуль самоконтроля соответственно. Таким образом, некоторые работы, такие как Fixup, Rezero/Skipinit, вводят обучаемую скалярную альфу, которая применяется к выходу остаточных блоков (см., что этата нормализации уровня удалена на подрисунке b). ReZero инициализирует этот параметр значением 0, Fixup инициализирует его значением 1 и вносит некоторые другие небольшие изменения в инициализацию блоков. Я считаю, что эти подходы хорошо работают для традиционных трансформаторов, но не для ViT/DeiT. Напомним, что ViTs применяют eta перед FFN или SA (а не после, как в традиционной архитектуре). Итак, они вводят нормализацию слоев и прогрев обратно, чтобы DeiT/ViT могли сойтись. Кроме того, вместо использования одного скалярного параметра альфа они вводят набор обучаемых параметров и строят диагональную матрицу (diag(lambda0, lambda1 … lambdan)). Таким образом, он позволяет умножать на канал вектор, созданный каждым остаточным блоком (FFN/SA(вектор) + исходный вектор). Все диагональные значения инициализируются фиксированным небольшим значением: 0,1 до глубины 18, 0,00001 для 24 и 0,000001 для более глубоких сетей. Таким образом, первоначальный вклад остаточных блоков невелик. LayerScale позволяет больше разнообразия, чем просто настройка всего слоя с помощью одного скаляра, как в Fixup.

В целом, я считаю, что это уловка, помогающая преобразователям более глубокого видения сойтись.

Мы видим, что DeiT-S с большей глубиной (36) достигает лучшей производительности с LayerScale, чем другие предыдущие методы.

Внимание класса (CaiT)

Архитектура в самом левом углу — это ванильный ViT. Проблема здесь в том, что ViT как бы пытается изучить две разные цели: изучить представления и общее содержание изображения (через токен CLS). Поэтому они предлагают явно разделить эти две задачи. Средняя архитектура показывает, что мы можем добавить наш токен CLS позже на более глубоких уровнях. Тем не менее, они также предлагают CaiT, который состоит из самовнимания для изучения репрезентаций и внимания класса для изучения самого содержания, и обычно имеет 2 уровня. В частности, после самостоятельного внимания мы замораживаем встраивание патчей и добавляем обучаемое встраивание CLS. Затем мы применяем модуль Class-attention, который в основном делает то же самое, что и модуль SA. Наконец, мы применяем FFN только к нашему токену CLS, так как другие заморожены.

Обратите внимание, что здесь LayerScale не применяется. Кроме того, здесь a + b относится к #слоям для внимания к себе + #слои для внимания к классу. Мы видим, что если мы просто вставим токен CLS на более глубокие уровни, мы достигнем немного лучшей производительности. Кроме того, мы видим, что предложенный CaiT стабильно демонстрирует отличные результаты.

Подробнее:



Несколько последних слов

Я сожалею, что не смог включить все детали и эксперименты. Я постарался сделать его компактным и включить в него больше работ по ViT. Поэтому я призываю вас самостоятельно прочитать статьи и увидеть эксперименты и некоторые технические детали самостоятельно. Тем не менее, я надеюсь, что вы найдете этот материал полезным. Я просто пытаюсь сэкономить ваше время и познакомить вас с работами. Спасибо, что уделили время чтению этой статьи. Хорошего дня (: