# Динамическая маршрутизация: Как CapsNet заменяет нейроны векторами

Источник: https://www.youtube.com/watch?v=nXGHJTtFYRU
Канал: Yannic Kilcher
Опубликовано: 04.09.2019

---

Янник Килчер разбирает одну из самых резонансных работ в области глубокого обучения — «Dynamic Routing Between Capsules» от команды Google Brain. Несмотря на сложность и некоторую «туманность» изложения, статья Сары Сабур, Николаса Фроста и Джеффри Хинтона предложила радикально новый подход к архитектуре нейросетей, заменяющий традиционные скалярные активации векторными структурами.

## 💊 Что такое капсулы: переход от скаляров к векторам
[[JUMP:00:00]]

Традиционные нейронные сети оперируют скалярными значениями активации нейронов. В отличие от них, капсульная сеть (CapsNet) состоит из «капсул» — групп нейронов, активность которых представлена в виде вектора [0:42]. По определению авторов, этот вектор представляет параметры экземпляра (instantiation parameters) конкретного типа сущности: объекта или его части.

Янник Килчер поясняет работу капсул на примере визуального распознавания:

*   **Длина вектора** (норма) представляет вероятность того, что объект присутствует в данной области изображения [3:43].
*   **Направление вектора** кодирует конкретные свойства (атрибуты) объекта, такие как цвет, размер, угол наклона или положение [4:10].

Ведущий приводит наглядную аналогию с капсулой «Крыша». Если сеть видит крышу, она выдает длинный вектор. Если этот вектор направлен в одну сторону, это может означать пологую крышу красного цвета; если в другую — крутую крышу зеленого цвета [5:05]. При этом, если вероятность присутствия объекта мала, вектор будет коротким, даже если он сохраняет правильное направление для данных характеристик [5:42].

## 🏗️ Иерархия сущностей: от частей к целому
[[JUMP:06:09]]

Капсулы организованы в слои, где высшие слои отвечают за более сложные, композитные сущности. Нижний слой может обнаруживать простые части (двери, стены, окна), а верхний — объединять их в целые объекты (дом, национальный парк) [7:00]. 

Процесс передачи информации выглядит следующим образом:

1.  Капсула нижнего слоя (например, «Дверь») передает данные всем капсулам верхнего слоя [6:33].
2.  Каждая капсула верхнего слоя интегрирует входящие векторы.
3.  На последнем слое количество капсул соответствует количеству классов (например, в задаче MNIST — десять капсул для цифр от 0 до 9) [8:21].

По мнению Килчера, это имитирует человеческую зрительную систему, где мы воспринимаем мир как иерархию объектов и их составляющих [8:49].

## 🔄 Динамическая маршрутизация: «Голосование» за правильный объект
[[JUMP:15:06]]

Главная инновация статьи — механизм динамической маршрутизации (Dynamic Routing). В классических сетях данные передаются на следующий слой через фиксированные веса. В CapsNet капсулы нижнего слоя сами «решают», в какую капсулу верхнего слоя отправить свой выход [15:19].

Этот процесс Килчер называет «маршрутизацией по согласию» (routing by agreement) [23:08]. Алгоритм работает итеративно:

*   Для каждой связи между капсулами нижнего и верхнего слоев существует обучаемая матрица весов $W_{ij}$ [18:13].
*   В процессе прямого прохода (forward pass) данные проходят через несколько внутренних итераций [26:05].
*   Если выход капсулы нижнего слоя после трансформации совпадает по направлению (высокое скалярное произведение) с выходом капсулы верхнего слоя, связь между ними усиливается [20:40].
*   В результате капсула «Дверь» будет направлять больше данных в капсулу «Дом» и меньше — в капсулу «Лодка», если её параметры лучше согласуются с контекстом дома [24:17].

## 📐 Архитектура CapsNet и функция потерь
[[JUMP:11:41]]

Для демонстрации концепции авторы использовали архитектуру на наборе данных MNIST:

1.  **Слой свертки (Convolutional layer):** 256 каналов, фильтры 9x9, извлекает базовые признаки [12:10].
2.  **Primary Capsules:** Слой «первичных» капсул, где каждая капсула выдает 8-мерный вектор [13:19].
3.  **Digit Capsules:** Итоговые 10 капсул (по одной на цифру) с 16-мерными векторами [13:58].

Янник Килчер выделяет два критических компонента обучения:

*   **Margin Loss:** Специальная функция потерь, которая заставляет длину вектора правильной капсулы быть выше 0.9, а неправильных — ниже 0.1 [28:30].
*   **Reconstruction Loss:** Сеть пытается восстановить исходное изображение цифры из 16-мерного вектора итоговой капсулы с помощью декодера [31:18]. 

Килчер полагает, что использование реконструкции — это способ заставить капсулы действительно кодировать физические свойства объекта (толщину линий, поворот), а не просто классифицировать их [32:37].

## 📊 Эксперименты: MNIST, MultiMNIST и провал на CIFAR-10
[[JUMP:33:23]]

В экспериментах CapsNet показала выдающиеся результаты в разделении перекрывающихся объектов. В тесте MultiMNIST две разные цифры накладывались друг на друга с сильным перекрытием [37:25].

Результаты экспериментов:

*   **Сегментация:** Капсульная сеть успешно определяла, какие пиксели принадлежат какой цифре, даже если они перекрывались [38:30].
*   **Интерпретируемость:** Изменяя отдельные измерения в 16-мерном векторе, авторы показали, что они отвечают за конкретные параметры: наклон, ширину штриха, размер петли в цифре «8» [36:18].
*   **Устойчивость:** Сеть лучше справляется с аффинными преобразованиями (сдвигами, поворотами), чем обычные CNN [36:59].

Однако на более сложном наборе данных CIFAR-10 результаты оказались разочаровывающими [39:42]. По мнению Килчера, это связано с тем, что капсульные сети «склонны объяснять всё» [40:50]. На зашумленных цветных изображениях с богатым фоном сеть пытается выделить капсулу под каждый элемент неба или травы, что перегружает систему и снижает точность классификации. Килчер считает, что для решения этой проблемы нужны более совершенные функции потерь, которые позволят сети игнорировать нерелевантные части изображения [41:15].