[Этот вопрос также был задан при переполнении стека]
Короче вопрос
Я изучаю сверточные нейронные сети и считаю, что эти сети не обрабатывают каждый входной нейрон (пиксель / параметр) одинаково. Представьте, что у нас есть глубокая сеть (много слоев), которая применяет свертку к некоторому входному изображению. Нейроны в «середине» изображения имеют множество уникальных путей ко многим нейронам более глубокого слоя, что означает, что небольшое изменение в средних нейронах оказывает сильное влияние на выход. Однако нейроны на краю изображения имеют только путь (или, в зависимости от точной реализации, порядка 1 ) пути, по которым их информация течет через граф. Кажется, что они "недостаточно представлены".
Я обеспокоен этим, поскольку эта дискриминация краевых нейронов масштабируется экспоненциально с глубиной (числом слоев) сети. Даже добавление слоя с максимальным пулом не остановит экспоненциальное увеличение, только полное соединение приводит все нейроны в равное положение. Я не уверен, что мои рассуждения верны, поэтому мои вопросы таковы:
- Прав ли я, что этот эффект имеет место в глубоких сверточных сетях?
- Есть ли какая-либо теория по этому поводу, упоминалась ли она когда-либо в литературе?
- Есть ли способы преодолеть этот эффект?
Поскольку я не уверен, что это дает достаточную информацию, я подробнее расскажу о постановке проблемы и о том, почему я считаю это проблемой.
Более подробное объяснение
Представьте, что у нас есть глубокая нейронная сеть, которая принимает изображение в качестве входных данных. Предположим, мы применяем сверточный фильтр пикселя к изображению, где мы каждый раз смещаем окно свертки на 4 пикселя. Это означает, что каждый нейрон на входе посылает свою активацию в 16 × 16 = 265 нейронов в слое 2 . Каждый из этих нейронов может отправить свою активацию другому 265 , так что наш самый верхний нейрон представлен в 265 2 выходных нейронах и так далее.
Это, однако, не верно для нейронов на краях: они могут быть представлены только в небольшом количестве окон свертки, таким образом заставляя их активировать (порядка) только нейрон в следующем слое. Использование таких хитростей, как зеркальное отображение по краям, не поможет: нейроны второго слоя, на которые будут проецироваться, все еще находятся на краях, а это означает, что нейроны второго слоя будут недопредставлены (таким образом, ограничивая важность наши краевые нейроны также). Как видно, это несоответствие масштабируется экспоненциально с количеством слоев.
Я создал изображение для визуализации проблемы, которое можно найти здесь (мне не разрешено включать изображения в сам пост). Эта сеть имеет окно свертки размером . Числа рядом с нейронами указывают количество путей до самого глубокого нейрона. Изображение напоминает треугольник Паскаля .
https://www.dropbox.com/s/7rbwv7z14j4h0jr/deep_conv_problem_stackxchange.png?dl=0
Почему это проблема?
На первый взгляд, этот эффект не является проблемой: в принципе, веса должны автоматически корректироваться таким образом, чтобы сеть выполняла свою работу. Более того, края изображения не так важны для распознавания изображений. Этот эффект может быть незаметным в повседневных тестах распознавания изображений, но он все еще беспокоит меня по двум причинам: 1. обобщение для других приложений и 2. проблемы, возникающие в случае очень глубоких сетей.
1. Могут быть и другие приложения, такие как распознавание речи или звука, где неверно, что средние нейроны являются наиболее важными. Применение свертки часто делается в этой области, но я не смог найти никаких работ, в которых упоминается эффект, который меня интересует.
Теперь представьте, что мы возмущаем все нейроны небольшим количеством. Центральные нейроны будут вызывать более сильное изменение выходного сигнала на несколько порядков по сравнению с краевыми нейронами. Я считаю, что для общих приложений и для очень глубоких сетей пути решения моей проблемы должны быть найдены?