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

В этой статье я попытаюсь проанализировать CapsNet до самого базового уровня, насколько это возможно, и прояснить мотивацию и обоснование его вклада. Я предполагаю, что читатель знаком с концепциями искусственных нейронных сетей (ИНС), включая сверточные нейронные сети (CNN).

Что не так с CNN?

Редко можно найти исследователя в ИНС или специалиста по глубокому обучению, который отрицает, что CNN является передовым достижением в области распознавания и классификации изображений с момента его создания и популяризации Янном ЛеКуном. Итак, зачем нам новая архитектура?

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

Итак, каковы ограничения такой установки? В стремлении к неизменности перевода объединение слоев приводит к потере информации о местоположении на более высоких уровнях. То есть сеть знает, что части целевого объекта присутствуют, но не зависит от их пространственного расположения. Это открывает дверь для некоторых враждебных атак, когда сети представляется изображение, которое имеет части изображения, но не в правильном порядке, и тем не менее сигнализирует о присутствии объекта. Некоторые методы пытаются обойти это, передавая координаты в качестве явных входных данных. Но у CapsNet другой ответ.

В идеологии CapsNet инвариантность - это не то, что нужно в первую очередь, нужна эквивариантность. Итак, в чем разница между инвариантностью и эквивариантностью? Возьмем пример. Предположим, у нас есть две целевые функции: максимальное значение входного I и расположение этого максимального значения. Назовем их f и h соответственно. Затем для некоторого перевода g мы говорим, что f инвариантен к g, если:

То есть, независимо от перевода, максимальное значение остается прежним. С другой стороны, эквивалентность связана с местоположением максимального значения, поэтому h эквивалентен g, если:

Это означает, что применение перевода с последующим поиском максимума дает то же значение, что и определение максимума с последующим применением перевода. Другими словами, расположение / вывод изменяется одинаково с вводом, поэтому перевод на 5 единиц во вводе сместит расположение максимального значения на 5 единиц. Интерпретация этого в нашей проблеме означает, что нам нужна не одна и та же активация для всех преобразований одного и того же объекта, вместо этого нам нужно, чтобы активации варьировались одинаково с изменением позы объекта (т. Е. Положения и ориентация). Обратите внимание, что сверточные фильтры в CNN эквивариантны, но уровни объединения переводят эту эквивариантность в инвариантность, так что аналогичные входные данные классифицируются одинаково.

Все идет нормально. Таким образом, предпочтительна эквивариантность. Как нам этого добиться? Дьявол кроется в деталях. Если объект представлен одним значением активации, то в предположении инвариантности изменение этого значения разрушает идентичность объекта. Решение CapsNet представляет каждый объект вектором, где скалярные значения этого вектора представляют различные параметры создания экземпляра объекта (например, текстура, освещение и т. Д.), А длина / норма вектора используется как индикатор наличия объекта. Итак, компоненты вектора эквивариантны, а его длина, переведенная в вероятность, инвариантна. Более того, механизм динамической маршрутизации используется для активации капсулы более высокого уровня (т.е. капсулы, представляющей более сложный объект), если капсулы более низкого уровня, представляющие ее части, активны.

CapsNet

Подобно обычным нейронным сетям, где слои состоят из нейронов, в CapsNet слои состоят из капсул. Подобно нейрону, который по сути является нелинейным отображением от скаляра к скаляру, капсула - это нелинейное отображение от вектора к вектору (то есть нелинейность с векторным значением). Поскольку входные данные капсулы также являются вектором, капсула вычисляет свои выходные данные, используя следующую нелинейность сжатия:

Где (s_j) - вход в капсулу j. Эта функция сжатия гарантирует, что для маленьких векторов норма уменьшается почти до нуля (то есть с низкой вероятностью присутствия объекта), а для больших векторов она нормализуется до значения, близкого к 1 (то есть с высокой вероятностью присутствия объекта). Теперь, учитывая, что предыдущий слой состоит из нескольких капсул, каждая из которых имеет векторный вывод, как эти векторы объединяются для создания единого векторного ввода. Во-первых, каждый выходной вектор из слоя ниже умножается на матрицу преобразования:

Затем эти преобразованные векторы (называемые векторами прогноза) объединяются с использованием коэффициента связи для создания входного вектора:

Коэффициенты связи определяют, какой вклад вносят разные выходные векторы нижележащего слоя. Коэффициенты связи связаны между капсулой в некотором слое и всеми капсулами, с которыми она соединена в следующем слое, и нормализуются с помощью routing softmax:

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

Как рассчитывается и обновляется сцепление? Коэффициенты связи инициализируются нулевыми значениями и настраиваются с помощью итеративного алгоритма маршрутизации по согласованию. Маршрутизация по согласованию осуществляется путем взятия скалярного произведения вектора прогноза некоторой капсулы на выходной вектор капсулы следующего слоя и использования результата в качестве значения обновления для логарифмической вероятности softmax:

Это похоже на нейробиологический принцип обучения в обучении по Хеббю, сформулированный следующим образом:

Нейроны, которые срабатывают вместе, соединяются вместе

Это означает, что CapsNet имеет два типа обучаемых параметров: матрицы весов преобразования и коэффициенты связи.

Обоснование и интерпретация

Как уже говорилось, CapsNet представляет объекты векторами. Это легко интерпретировать, как обсуждалось, разная размерность вектора соответствует разным параметрам создания экземпляра (свойствам объекта), а норма / длина соответствует вероятности его присутствия. Имеет смысл! Нелинейность сжатия также проста, она эффективно нормализует векторы, поэтому их норму можно рассматривать как вероятность. Что все еще немного загадочно, так это в основном входной вектор, маршрутизация по соглашению и связанные с ним вычисления, то есть почему мы умножаем на матрицу преобразования, чтобы получить вектор прогнозирования? Какова интерпретация скалярного произведения между векторами прогноза и выходными данными?

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

Архитектура

Предлагаемый CapsNet имеет три уровня. Первый слой - это обычный сверточный слой. Второй слой, называемый PrimaryCaps, представляет собой сверточный слой капсулы. Вскоре я объясню, как рассчитывается его выход. Последний слой, называемый DigitsCaps, является выходным слоем и аналогичен полносвязному слою в обычных ИНС. Давайте посмотрим, как эти слои работают вместе. Я буду использовать набор данных MNIST, где каждое изображение-образец имеет размер 28x28 пикселей.

Первый слой - это обычный сверточный слой, состоящий из 256 фильтров, каждый 9x9 с шагом 1 и без заполнения. Выход сверточного слоя рассчитывается как:

Это делает вывод одного фильтра этого слоя:

Что делает общий вывод слоя: 256 * 20 * 20

Между первым слоем и слоем PrimaryCaps нет маршрутизации, так как предыдущий слой является обычным сверточным слоем, который делает свой вывод одномерным вектором, видимым слоем PrimaryCaps. Не путайте между выводом сверточного слоя размером 256x20x20 и тем, что PrimaryCaps воспринимает его как одномерный (одномерный) вектор. Важен вывод отдельной единицы слоя, поэтому фильтр, примененный к одному месту, дает одно значение, что делает слой 1D. Слой PrimaryCaps состоит из 32 капсул, каждая из которых имеет выходной сигнал 8D. Выходной сигнал 8D достигается за счет того, что каждая капсула состоит из 8 обычных сверточных фильтров, каждый снова размером 9x9. Как уже упоминалось, каждый фильтр создает одно значение в месте ввода, поэтому 8 фильтров создают вектор 8D в каждом месте, к которому они применяются, который затем сжимается для получения вывода в этом месте. Таким же образом мы вычислили нормальный выходной сигнал сверточного слоя (уравнение 6), мы видим, что применение фильтра 9x9 к входу 20x20 дает карту характеристик 6x6. Так как у нас 32 капсулы в этом слое, то на выходе получим 8D векторов 32x6x6. Таким образом, PrimaryCaps, помимо вычислительной важности, также считается переходным слоем от нормального одномерного вывода к многомерному выводу.

Слой DigitsCaps, выходной слой, аналогичен слоям FC (полностью подключенным) в обычных нейронных сетях. Соединения между PrimaryCaps и DigitsCaps маршрутизируются. DigitsCaps состоит из 10 капсул по 16D каждая. Каждый выходной вектор капсулы будет использоваться позже как вероятность существования его цифры на изображении через его норму. Выход капсулы в DigitsCaps рассчитывается с помощью шагов, описанных ранее. Сначала каждый отдельный выходной сигнал капсулы PrimaryCaps умножается на его собственную матрицу преобразования, чтобы получить вектор прогнозирования (уравнение 2). Под одним выходом PrimaryCaps я не имею в виду 8x6x6, но я имею в виду каждый отдельный вектор размера 8 в сетке 6x6. Это связано с тем, что, как и при обычной свертке, хотя единицы имеют общий вес в разных местах, концептуально они являются разными единицами с разными выходами. Матрица преобразования имеет размер 8x16, как и ожидалось, что является входным измерением по выходному измерению. После вычисления прогнозных векторов они линейно суммируются, как в (уравнение 3), чтобы получить общий ввод капсулы, который затем сжимается как (уравнение 1) для расчета выхода этого капсула. Выходные данные затем используются для обновления коэффициентов связи посредством скалярного произведения с различными векторами прогнозирования, как в (уравнение 5). Это повторяется для каждой из 10 капсул.

Обучение и прогнозирование

Обучение CapsNet осуществляется путем минимизации следующих потерь:

Это потеря одной капсулы, где (T_k) равно 1 тогда и только тогда, когда цифра k, представленная капсулой, присутствует на изображении. Два фактора, m ^ + = .9 и m ^ - = .1, являются целевыми значениями нормы выхода капсулы в случае наличия и отсутствия целевой цифры. Другими словами, если цифра присутствует, первый член потерь увеличивает длину выходного вектора до (.9), а если цифра отсутствует, она сжимается до (.1). Я думаю, что такие граничные значения выбраны, чтобы избежать насыщения функции сжатия. Лямбда является понижающим фактором, то есть уменьшает эффект сокращения. Основная причина - избежать чрезмерного уменьшения длины векторов. Помните, что если набор данных сбалансирован, и для количества классов больше 2, то для каждого класса отрицательных примеров больше, чем положительных, поэтому эффект сжатия больше. Прогноз, сделанный сетью после сходимости, конечно же, относится к классу с наибольшей выходной векторной нормой.

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

CapsNet против CNN

CapsNet был разработан для устранения ограничений CNN, которые можно резюмировать в одномерном представлении объектов с упором на неизменность и потерю информации о местоположении. CapsNet использует многомерное представление объектов, что позволяет заменить узконаправленную инвариантность гораздо более широкой целью эквивариантности. Это означает, что представление объекта может плавно меняться при изменении его позы, вместо того, чтобы искать инвариантные активации с разными позами. Это должно сделать CapsNet более устойчивым к аффинным преобразованиям объектов. Более того, информация о пространственном местоположении сохраняется в CapsNet, где на нижних уровнях она кодируется местоположением (т. Е. Какая капсула активна), а на более высоких уровнях она кодируется по скорости ( т.е. в самих компонентах векторного представления).

Вывод

CNN, наша современная разработка в области компьютерного зрения, имеет некоторые неотъемлемые ограничения. CapsNet был построен на уроках, извлеченных из слабых мест CNN. Он использует многомерные представления объектов, что позволяет эквивариантное обучение. Однако он все еще недостаточно протестирован, и в будущем необходимо провести дополнительную работу, чтобы выявить его сильные стороны, а также его ограничения.