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