Дорогая альтернатива сверточной нейронной сети (CNN)

Сегодня, когда мы говорим о данных, мы больше не ограничиваемся традиционными столбцами или источниками данных типа CSV. Произошел рост данных всех форматов и типов, от звуковых до изображений, от поперечного сечения до формата временных рядов из-за большей доступности структур данных и методов для извлечения и хранения различных видов данных.

Эта статья скорее сосредоточена на одном из таких типов данных, а именно на визуальных данных, и на их контексте с машинным обучением. Раньше основным подходом к работе с данными изображения было преобразование данных в вектор и передача их в нейронную сеть или некоторые другие алгоритмы машинного обучения для различных целей. С развитием глубокого обучения все резко изменилось, и в конце 80-х Янн ЛеКун представил миру сверточные нейронные сети (CNN). CNN зарекомендовали себя как современная современная (SOTA) методология для работы с визуальными данными всех видов, от изображений до непрерывных данных, таких как видеоклипы.

В случае CNN мы просто загружаем данные и обучаем сеть идентифицировать функции в 2D-пространстве, которые запутываются при сглаживании. По мере того, как последовательные слои создают сеть, поле зрения более поздних слоев продолжает увеличиваться, что позволяет изучать более сложные функции. Янн ЛеКун продемонстрировал эту концепцию, обучив пятислойную модель на наборе данных MNIST и классифицировав цифры с точностью 98,49%.

Несмотря на то, что они изменили правила игры в области глубокого обучения, CNN имеют присущие им недостатки, о которых большинство людей не подозревают. Мы рассмотрим их сейчас, и это поможет нам создать основу для основной темы этого блога: CapsuleNets.

Недостаток 1

Из-за их характера сбора информации об объектах для задач более высокого уровня, таких как классификация, сегментация, местоположение объекта и т. д., они не зависят от положения и/или ориентации этих объектов. Когда мы надеемся, что они изучат распределение набора данных, они скорее сосредоточатся на предоставленных им обучающих изображениях.

Недостаток №2

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

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

Сосредоточьтесь на изображении ниже, чтобы лучше понять эти два недостатка:

Возьмите крайнее левое изображение в качестве эталонного изображения, на нем мы обучили нашу текущую ConvNet. Теперь, согласно 1-му недостатку, когда мы поворачиваем изображение, фильтры, извлекающие важную информацию, такую ​​как глаза, нос и рот, могут не совпадать с их положением на самом правом изображении. И поскольку сеть не видела ни одного подобного изображения при обучении, она плохо обобщила и сделала неверный прогноз.

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

Недостаток №3

Третий и последний недостаток снова связан с конструкцией этих ConvNet. То, как они направляют информацию на более высокие уровни, создает для них более широкое поле восприятия. Вместо маршрутизации всей информации через все уровни сети можно сделать выборочными, чтобы передавать требуемую информацию на соответствующий уровень.

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

CapsuleNets вдохновлены этим явлением, так как наш мозг работает с использованием концепции «обратной графики». Давайте разберемся с работой CapsuleNets на примере. Общая архитектура делится на три части:

  1. Первичные капсулы
  2. Капсулы более высокого уровня
  3. Расчет убытков

Мы увидим использование каждой из подчастей в примере.

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

Capsule делает похожие вещи, но главное отличие заключается в выводе обоих блоков. Capsule выводит вектор вместо скалярной величины, как нейроны. Этот вектор несет информацию об ориентации объекта внутри изображения. Если вы повернете объект и/или изображение, это векторное представление одновременно повлияет на него.

Основные капсулы

Рассмотрим изображение выше. Можно сказать, что приведенные выше изображения состоят из двух основных частей: треугольника и прямоугольника. Теперь предположим, что мы инициализируем слой Primary Capsule с 200 капсулами, 100 из которых представляют собой прямоугольник, а остальные 100 — треугольник.

Они распределяются таким образом, что покрывают все изображение. Выход каждой из этих капсул представлен стрелками на изображении ниже; черные стрелки представляют выход прямоугольника, а синие — треугольника. Чтобы решить, присутствует конкретный объект или нет, мы фокусируемся на длине этих стрелок, а их положение дает нам информацию об ориентации этого конкретного объекта (положение, масштаб, поворот и т. д.).

Эти капсулы также следуют свойству эквивариантности, т.е. при незначительном изменении положения/ориентации объекта мы увидим соответствующее изменение стрелок, представляющих эти объекты. Это помогает CapsuleNet найти объект на изображении и получить точную информацию о параметрах позы.

Для этого слой первичной капсулы проходит три разных этапа:

я) Свертка

ii) Изменить форму

iii) функция сквоша

Мы берем изображение и обрабатываем его слоями свертки, чтобы получить выходные карты объектов. Затем мы изменяем эти карты функций.

В нашем примере давайте рассмотрим, что мы получили 50 карт объектов в качестве выходных данных, мы преобразуем их в два вектора по 25 измерений (50 = 25 * 2) для каждого местоположения на изображении. Каждый вектор представляет одну из двух основных форм. Эти значения теперь могут быть выведены как вероятность того, что каждая из основных фигур присутствует или отсутствует в определенном месте изображения, но для этого они должны иметь длину от 0 до 1. Для этого мы применяем функция сквоша. По сути, он берет вектор и применяет к нему норму, а затем нелинейную функцию для поддержания его длины в диапазоне от 0 до 1.

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

Высшие слои

Следующим шагом является функция Высших слоев. Но прежде чем мы перейдем к ним, у основных слоев есть еще одна функция. После вывода сквоша первичные уровни также пытаются предсказать вывод каждого из более высоких слоев. У нас было 100 капсул для прямоугольников и 100 для треугольников, которые дадут некоторые предсказания, предполагая, что на верхнем уровне есть две капсулы, одна для дома и одна для лодки, эти предсказания сделаны относительно найденной ориентации фигур.

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

Теперь начинается работа более высокого уровня, хотя первичные уровни предсказали некоторые выходные данные для более высокого уровня, ему все еще необходимо предсказать свои собственные выходные данные и проверить их. Первоначально верхние уровни устанавливают веса ​​маршрутизации, которые используются нижними уровнями для маршрутизации сигнала изображения. Он делает это, вычисляя свои собственные выходные данные, а затем проверяя выходные данные более низкими уровнями. Веса обновляются на основе сходства обоих прогнозов.

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

Заворачивать!

В статье мы увидели работу CapsuleNet и интуицию, которая породила эту концепцию. Начав с недостатков CNN, мы разработали их решения и то, как CapsuleNets может стать для них жизнеспособной альтернативой.

Хотя интуиция и алгоритмы, кажется, работают хорошо, когда дело доходит до реальности, у них есть свои недостатки.

  • Из-за динамической маршрутизации и большого количества капсул вычисления усложняются и требуют большего вычислительного ресурса.
  • Он также страдает от проблемы скученности, когда два объекта одного типа размещаются близко друг к другу.

Несмотря на это, CapsuleNets служат многообещающим подходом для сообщества и, следовательно, могут быть улучшены.

Надеюсь, статья смогла пролить свет на общую концепцию и помогла вам глубже понять CapsuleNets. Оставайтесь с нами для большего количества таких частей в будущем. До свидания!