В этой статье мы попытаемся рассказать про трансформерную архитектуру VIT и предысторию его формирования. Сегодня не совсем понятно, почему этот "формат" нейронок настолько эффективен. Некоторые говорят механизм внимания, но некоторые практики делают больше ставок в области Computer Vision на MetaFormer. https://github.com/sail-sg/poolformer
Нейросети остаются для нас “теневым” процессом, подобным черному ящику. И изучение Deep Learning уже напоминает больше не математику, а биологию, где мы следим за поведением нашего детища.
Исторический экскурс в математический эксперимент
Почти месяц прошел с момента, когда мы выложили большой материал по трансформерной архитектуре. Она перевернула игру на 90 градусов, оставив рекуррентные нейронки позади области NLP и исследования данных. Трансформеры — это не просто архитектура работы с языком и принципом "перевода" слов в код, а система, построенная вокруг механизма "attention".
Мы освежим вашу память или освободим 10 минут от чтения другой нашей статьи, где подробно рассказали про технологию в ее первозданном виде со статьи "attention all is you need".
Какое преимущество у трансформеров перед рекуррентными нейронными сетями? Доступ ко всем последовательным данным при обработке одной единицы информации. Под информацией и данными мы просто имеем в виду слова. RNN действовала по принципу постепенного накопления данных после прогона сети — получался своеобразный формат "памяти". Эта память реализовывалась в отдельных "скрытых" слоях.
Но процесс накопления выглядел как подкидывание ингредиентов в салат. Сначала мы получаем внятные данные, которые нейросеть последовательно использует при обучении, но в какой-то момент "долгосрочные" зависимости терялись. Вместо зимнего салата, у нас вышла мешанина, в которой проглядывают лишь огурцы и горох, которые мы положили в последний момент. Мы утрируем. Переводя на технический язык — долгосрочные зависимости теряются, приходит эффект затухающего или "взрывающегося градиента".
Затухание градиента возникает, когда градиенты, передаваемые обратно через временные шаги RNN в процессе обратного распространения ошибки, ну уж больно малыми. Ограниченность диапазона значений функции активации (например, сигмоидальная функция активации), неподходящая инициализация весов тоже приводят к этой проблеме. Когда градиент совсем угасает — модель перестает обучаться. Наоборот, взрывание градиента возникает, когда он становится запредельным.
Для борьбы можно использовать "градиентное зажатие" (clipping) для предотвращения улета значений градиента в космос, выбор более подходящих функций активации (например, ReLU вместо сигмоиды или гиперболического тангенса), инициализация весов с учетом масштаба данных и использование архитектур с долгосрочной памятью, таких как LSTM (Long Short-Term Memory) или GRU (Gated Recurrent Unit), которые специально разработаны для решения проблемы затухания градиента путем внедрения механизмов управления потоком информации.
Но у GRU и LTSM много параметров, из-за чего объем вычислений значительно больше, чему у несовершенных RNN. Напоминаем, что рекуррентные нейросети не могут просчитываться параллельно в отличие от трансформеров.
Для этих архитектур нужна настройка гиперпараметров. Кстати, недавно мы писали про библиотеку Optuna и способы оптимизации "глобальных настроек" ИИ.
С другой стороны, рекуррентные сети стояли в топах нейронок для обработки последовательных данных, в том числе и звуков.
Благодаря "вниманию" трансформерная ИИ могла всматриваться в нужные слова и формировать зависимости между ними, выстраивая предложения точнее, работая со всеми последовательным данными. Пока рекуррентная нейросеть, накапливая дополнительные слои состояний, постепенно "забывала" первоначальные результаты работы первых слоев, преграждая путь к работе с длинными наборами данных — трансформер мог обращаться ко всем результатам в процессе обучения.
А это открывало путь к параллельным вычислениям и формированию псевдосемантических зависимостей между словами.
Сам трансформер состоит из кодировщика и декодировщика. Каждый из этих компонентов содержит несколько слоев, которые выполняют обработку данных. Каждый слой декодера и энкодера обычно состоит из двух основных подслоев: механизма внимания и полносвязной нейронной сети (Feed Forward Network).
Работа attention начинается с вычисления весов для каждого элемента входных данных. В процессе вычисления весов для каждого элемента входных данных в механизме внимания используется функция сходства (или функция внимания), которая оценивает степень сходства между текущим состоянием модели и каждым элементом входных данных.
Входные данные подаются на вход трансформера в виде последовательности токенов или элементов. Каждый токен сначала проходит через входную эмбеддинговую матрицу, которая преобразует его в векторное представление, что позволяет сети работать с данными в векторной форме. Позиционные эмбеддинги добавляются к входным эмбеддингам для передачи информации о позиции каждого элемента в последовательности. Это необходимо, поскольку трансформер не обладает встроенным пониманием о порядке элементов в последовательности.
Один из наиболее распространенных методов вычисления весов — механизм внимания скалярного произведения (dot-product attention).
Для каждого элемента входных данных вычисляется скалярное произведение его векторного представления (например, эмбеддинга) с текущим вектором скрытых состояний модели. Затем полученные значения нормализуются с использованием функции softmax для получения весов, которые суммируются до 1 и определяют значимость каждого элемента.
После вычисления весов происходит взвешенное суммирование всех элементов входных данных с учетом их важности.
Механизм внимания как раз позволяет трансформеру обращать внимание на разные части входных данных и находить важные аспекты, которые необходимы для решения конкретной задачи. Он позволяет моделировать долгосрочные зависимости между элементами последовательности, решая проблемы RNN. Полносвязная нейронная сеть обычно следует за механизмом внимания и выполняет дополнительную обработку данных, что позволяет трансформеру извлекать более сложные и абстрактные зависимости в данных.
Но особенностью трансформера остается "избыточная" векторизация данных, поэтому введение архитектуры трансформера и называют своеобразным математическим экспериментом, который по итогу удался. Выжать как можно больше данных.
Возможность формировать сложные зависимости между элементами данных быстро связывались в глазах ресерчеров с изображениями. Так и появился VIT.
Бунт на корабле или как СNN потеряли лидерство
Как работают СNN?
Эти сети применяют сверточные фильтры к входным изображениям, чтобы создать "future map", представляющую собой карту признаков, которая активируется в тех областях изображения, где обнаружены определенные шаблоны и структуры. Каждый сверточный слой в CNN имеет несколько таких фильтров, каждый из которых специализируется на обнаружении различных признаков, таких как грани, текстуры или формы.
После свертки следует применение функции активации, такой как ReLU, для введения нелинейности в модель и активации определенных признаков. Затем применяются слои пулинга для уменьшения пространственных размерностей карт признаков и повышения инвариантности к масштабу и трансляциям. Это помогает сети сосредотачиваться на наиболее важных признаках изображения, сокращает количество параметров модели.
После нескольких слоев свертки и пулинга признаки объединяются и передаются в полносвязные слои регрессоры/классификаторы, которые вычисляют окончательные предсказания.
CNN работают, анализируя изображение по частям. Они начинают с маленьких кусочков изображения и постепенно учатся распознавать разные формы и шаблоны.
Почему это недостаточно эффективно?
В CNN контекст анализируется только локально, внутри фиксированного окна, что может привести к потере глобальной информации об изображении.
Да, локальность преподносилась как преимущество, но подобные «рамки» приводили к проблеме масштабирования.
Архитектура нейронной сети Vision Transformer (VIT) была представлена в статье "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" (Dosovitskiy et al., 2020) Не Достоевский. И да. 16x16 отсылает к пиксельному отображению размера одного патча, так как применение внимания к отдельному пикселю приводит к высоким вычислительным затратам. Идея создания ViT возникла из стремления адаптировать успешно применяемую архитектуру трансформера.
Принцип работы ViT состоит в том, чтобы представить изображение в виде последовательности патчей (или "слов"), а затем обрабатывать эту последовательность при помощи механизмов трансформера.
Каждый патч изображения сначала проходит через обучаемый эмбеддинг, преобразующий “данные” в векторное представление. Как и в классическом трансформере. Патчи, вместе с позиционными эмбеддингами, которые кодируют информацию о позиции каждого патча в исходном изображении, затем подаются на вход трансформеру.
Трансформер состоит из нескольких слоев, в каждом из которых применяются механизмы внимания для выявления взаимосвязей между патчами и агрегации информации, определяя тот самый механизм внимания.
После того как каждый патч изображения преобразуется в векторное представление и проходит через несколько слоев трансформера, представления патчей агрегируются, чтобы получить окончательное представление всего изображения.
Агрегация может быть выполнена различными способами, в зависимости от конкретной задачи и архитектуры модели. Одним из наиболее распространенных методов агрегации является глобальный пулинг (например, средний пулинг или максимальный пулинг) по всем патчам изображения.
Это означает, что для каждого измерения вектора (функции) в представлении каждого патча берется среднее значение (или максимальное значение) по всем патчам. Это позволяет получить один вектор фиксированной длины, который представляет собой агрегированное представление всего изображения.
Другим методом агрегации может быть использование дополнительных слоев внутри трансформера, которые агрегируют информацию из различных частей изображения. Например, после слоев трансформера можно добавить дополнительные слои внимания или сверточные слои для обработки представлений патчей и получения итогового агрегированного представления.
Затем агрегированное представление подается на вход классификатору, который выдает предсказание для конкретной задачи, например, классификации изображений.
С тех пор придумали много расширений для преодоления некоторых проблем и улучшения производительности, несмотря на возможности распараллеливания вычислений. Например, классический VaiT требует много данных и зачастую переобучается.
С тех пор было предложено несколько модификаций и улучшений архитектуры VIT. Вот некоторые из них:
DeiT (Data-efficient Image Transformer). DeiT использует дистилляцию знаний для эффективного обучения. Знания от сложных моделей передаются простым. Архитектура использует предобученные модели, такие как большие CNN как учителей для определения трансформера.
Так как основной проблемой трансформеров в исходной постановке является подверженность переобучению, именно дистилляция оказалась наилучшим методом по аугментации нейронки.
ViT-Lite. Работает по принципу уменьшения размера и сложности модели трансформера применения, например, на “мобилках”. Уменьшается число параметров, упрощается архитектура и применяется квантизация к эмбендингам/векторным представлениям патчей.
T2T-ViT. Преобразует входное изображение в последовательность токенов и применяет операции трансформера для изучения внутренних зависимостей между токенами. Путем обработки каждого токена отдельно и взаимодействия между ними модель может захватывать глобальные и локальные зависимости в изображении.
VoVNet-ViT. Подход комбинирует архитектуру трансформера с архитектурой VoVNet, которая специализируется на извлечении признаков из изображений с использованием сверточных слоев. Механизм, при помощи которого получилось оптимизировать нейронку путем уменьшения длины токенов.
В любом случае, модификаций много. Все они решают проблемы с переобучаемостью, размером нейросети или приводят уровень ИИ к оптимизированному виду под конкретное ПО. Так что и у ViT есть свои недостатки в сравнении, например, с более оптимизированным, но менее точным YOLO.
Кажется, будто "внимание" – самый главный аспект трансформера. Ну как же. О нем только и говорят во всех лекциях, но дело обстоит не совсем так — эффективность последнего механизма опровергается некоторыми ресерчерами-практиками. Так что нам еще предстоит понять корень эффективности этого вида архитектуры.
Будем и дальше простым языком объяснять новейшие архитектуры ML-ресерча.