Часть серии статей о капсульных сетях Хинтона:

Часть I: Интуиция
Часть II: Как работают капсулы
Часть III: Динамическая маршрутизация между капсулами (вы ее сейчас читаете)
Часть IV: Архитектура CapsNet

Быстрое объявление о нашем новом издании AI³. Мы собираем лучших писателей, чтобы они рассказали о теории, практике и бизнесе искусственного интеллекта и машинного обучения. Следите за ним, чтобы быть в курсе последних тенденций.

Вступление

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

Как я показал во второй части, капсула i на нижнем уровне должна решить, как отправить свой выходной вектор в капсулы более высокого уровня j. Он принимает это решение, изменяя скалярный вес c_ij, который умножает его выходной вектор и затем обрабатывается как вход для капсулы более высокого уровня. С точки зрения нотации, c_ij представляет собой вес, который умножает выходной вектор из капсулы нижнего уровня i и переходит в качестве входных данных в капсулу более высокого уровня j.

Что нужно знать о весах c_ij:

  1. Каждый вес - неотрицательный скаляр.
  2. Для каждой капсулы нижнего уровня i сумма всех весов c_ij равна 1
  3. Для каждой капсулы более низкого уровня i количество гирь равно количеству капсул более высокого уровня.
  4. Эти веса определяются итеративным алгоритмом динамической маршрутизации.

Первые два факта позволяют нам интерпретировать веса в вероятностных терминах. Напомним, что длина выходного вектора капсулы интерпретируется как вероятность существования признака, который эта капсула была обучена обнаруживать. Ориентация выходного вектора - это параметризованное состояние объекта. Таким образом, в некотором смысле для каждой капсулы более низкого уровня i ее веса c_ij определяют распределение вероятности того, что ее выход принадлежит каждой капсуле более высокого уровня j .

Динамическая маршрутизация между капсулами

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

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

Теперь, когда у нас есть это в виду, давайте рассмотрим алгоритм построчно.

В первой строке указано, что эта процедура берет все капсулы нижнего уровня l и их выходы u_hat, а также количество итераций маршрутизации r . Самая последняя строка сообщает вам, что алгоритм произведет вывод капсулы более высокого уровня v_j. По сути, этот алгоритм говорит нам, как рассчитать прямой проход сети.

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

Строка 3 говорит, что шаги 4–7 будут повторяться r раз (количество итераций маршрутизации).

Шаг в строке 4 вычисляет значение вектора c_i, которое представляет собой все веса маршрутизации для капсулы нижнего уровня i. Это сделано для всех капсул более низкого уровня. Почему softmax? Softmax позаботится о том, чтобы каждый вес c_ij был неотрицательным числом и их сумма была равна единице. По сути, softmax обеспечивает вероятностный характер коэффициентов c_ij, которые я описал выше.

На первой итерации значения всех коэффициентов c_ij будут равны, потому что во второй строке все b_ij установлены в ноль. Например, если у нас есть 3 капсулы более низкого уровня и 2 капсулы более высокого уровня, то все c_ij будут равны 0,5. Состояние всех c_ij, равных при инициализации алгоритма, представляет состояние максимальной путаницы и неопределенности: капсулы нижнего уровня не знают, какие капсулы более высокого уровня лучше всего подходят для их вывода. Конечно, по мере повторения процесса эти равномерные распределения будут меняться.

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

Затем в строке 6 векторы с последнего шага пропускаются через нелинейность сжатия, что гарантирует сохранение направления вектора, но его длина не должна превышать 1. На этом шаге создается выходной вектор v_j для всех капсул более высокого уровня.

Подводя итог тому, что у нас есть на данный момент: шаги 4–6 просто рассчитывают выход капсул более высокого уровня. Шаг в строке 7 - это место, где происходит обновление веса. Этот шаг отражает суть алгоритма маршрутизации. На этом шаге просматривается каждая капсула более высокого уровня j, а затем исследуется каждый вход и обновляется соответствующий вес b_ij в соответствии с формулой. Формула говорит, что новое значение веса равно старому значению плюс скалярное произведение текущего выхода капсулы j и входа в эту капсулу из капсулы более низкого уровня i. Скалярное произведение смотрит на сходство между входом в капсулу и выходом из капсулы. Кроме того, помните, что из вышесказанного, капсула более низкого уровня отправит свой выходной сигнал в капсулу более высокого уровня, выход которой аналогичен. Это сходство фиксируется скалярным произведением. После этого шага алгоритм начинается с шага 3 и повторяет процесс r раз.

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

Интуитивно понятный пример этапа обновления веса

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

Мы видим, что в левой части фиолетовый выход v1 и оранжевый вход u_hat указывают в противоположных направлениях. Другими словами, они не похожи. Это означает, что их скалярное произведение будет отрицательным числом, и в результате коэффициент маршрутизации c_11 уменьшится. В правой части фиолетовый выход v2 и оранжевый вход v_hat указывают в одном направлении. Они подобны. Следовательно, коэффициент маршрутизации c_12 увеличится. Эта процедура повторяется для всех капсул более высокого уровня и для всех вводов каждой капсулы. Результатом этого является набор коэффициентов маршрутизации, который наилучшим образом соответствует выходам капсул более низкого уровня с выходами капсул более высокого уровня.

Сколько итераций маршрутизации использовать?

В документе исследован диапазон значений для наборов данных MNIST и CIFAR. Вывод автора двоякий:

  1. Чем больше итераций, тем больше данных
  2. На практике рекомендуется использовать 3 итерации маршрутизации.

Заключение

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

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

Спасибо за прочтение! Если вам понравилось, нажмите кнопку хлопка внизу и подпишитесь на обновления на моем сайте! Это будет много значить для меня и побудит меня писать больше подобных историй.

Вы можете подписаться на меня в Twitter. Давайте также подключимся к LinkedIn.