Сверточные нейронные сети: разве центральные нейроны не представлены чрезмерно в выходных данных?

30

[Этот вопрос также был задан при переполнении стека]

Короче вопрос

Я изучаю сверточные нейронные сети и считаю, что эти сети не обрабатывают каждый входной нейрон (пиксель / параметр) одинаково. Представьте, что у нас есть глубокая сеть (много слоев), которая применяет свертку к некоторому входному изображению. Нейроны в «середине» изображения имеют множество уникальных путей ко многим нейронам более глубокого слоя, что означает, что небольшое изменение в средних нейронах оказывает сильное влияние на выход. Однако нейроны на краю изображения имеют только путь (или, в зависимости от точной реализации, порядка 1 ) пути, по которым их информация течет через граф. Кажется, что они "недостаточно представлены".11

Я обеспокоен этим, поскольку эта дискриминация краевых нейронов масштабируется экспоненциально с глубиной (числом слоев) сети. Даже добавление слоя с максимальным пулом не остановит экспоненциальное увеличение, только полное соединение приводит все нейроны в равное положение. Я не уверен, что мои рассуждения верны, поэтому мои вопросы таковы:

  • Прав ли я, что этот эффект имеет место в глубоких сверточных сетях?
  • Есть ли какая-либо теория по этому поводу, упоминалась ли она когда-либо в литературе?
  • Есть ли способы преодолеть этот эффект?

Поскольку я не уверен, что это дает достаточную информацию, я подробнее расскажу о постановке проблемы и о том, почему я считаю это проблемой.

Более подробное объяснение

Представьте, что у нас есть глубокая нейронная сеть, которая принимает изображение в качестве входных данных. Предположим, мы применяем сверточный фильтр пикселя к изображению, где мы каждый раз смещаем окно свертки на 4 пикселя. Это означает, что каждый нейрон на входе посылает свою активацию в 16 × 16 = 265 нейронов в слое 2 . Каждый из этих нейронов может отправить свою активацию другому 265 , так что наш самый верхний нейрон представлен в 265 2 выходных нейронах и так далее.64×64416×16=26522652652

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

Я создал изображение для визуализации проблемы, которое можно найти здесь (мне не разрешено включать изображения в сам пост). Эта сеть имеет окно свертки размером . Числа рядом с нейронами указывают количество путей до самого глубокого нейрона. Изображение напоминает треугольник Паскаля .3

https://www.dropbox.com/s/7rbwv7z14j4h0jr/deep_conv_problem_stackxchange.png?dl=0

Почему это проблема?

На первый взгляд, этот эффект не является проблемой: в принципе, веса должны автоматически корректироваться таким образом, чтобы сеть выполняла свою работу. Более того, края изображения не так важны для распознавания изображений. Этот эффект может быть незаметным в повседневных тестах распознавания изображений, но он все еще беспокоит меня по двум причинам: 1. обобщение для других приложений и 2. проблемы, возникающие в случае очень глубоких сетей.

1. Могут быть и другие приложения, такие как распознавание речи или звука, где неверно, что средние нейроны являются наиболее важными. Применение свертки часто делается в этой области, но я не смог найти никаких работ, в которых упоминается эффект, который меня интересует.

1026510

Теперь представьте, что мы возмущаем все нейроны небольшим количеством. Центральные нейроны будут вызывать более сильное изменение выходного сигнала на несколько порядков по сравнению с краевыми нейронами. Я считаю, что для общих приложений и для очень глубоких сетей пути решения моей проблемы должны быть найдены?

Koen
источник
8
Я не могу полностью ответить на ваш вопрос, но я нашел этот документ: cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf, который решает вашу проблему. Они говорят о различных решениях: 1) заполнение краев входов нулями, 2) добавление случайно глобально связанных компонентов, или 3) фиксирование и распространение краев вперед, чтобы информация о краях не терялась. Недавно мне было любопытно узнать об этой же проблеме, и я нашел ваш вопрос. Я все еще разбираюсь в деталях этой газеты. Надеюсь, это поможет.
nfmcclure
Спасибо, это именно то, что я искал! Впечатляет, что это заметно всего с 2 слоями. Для тех TL; DR'ing весь документ: было найдено, что наилучшим выходом было использование комбинации 1) (заполнение нулями) и 2) (случайные глобальные соединения).
Коен
Мне любопытно, не достаточно ли использовать неперекрывающееся смещение? Таким образом, в вашем примере у вас есть патчи 64x64, и вы перемещаете ввод 64 пикселя каждый раз при применении свертки. (твой «сдвиг» - это мое «смещение»). Что, я думаю, точно так же, как заполнение нулями?
Ренталь
1
Извините, что не отвечаю некоторое время, я больше не работаю над NN. Тем не менее, я думаю, что мог бы ответить на вопросы, хотя я понимаю, что моей большей целью было лучше понять, что происходит (что я до сих пор не понимаю). 1) Кажется, этот эффект действительно имеет место. 2) В статье, приведенной выше, описывается это и 3) также рассматриваются способы преодоления этого. Для Renthal: Неперекрывающиеся патчи (выбор offset = conv. Size) действительно должны решить мою проблему, но люди часто находят, что перекрывающиеся патчи работают лучше. Извините, я не знаком с Bootstrap Resampling.
Коен

Ответы:

4

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

Я думаю, что вам было бы полезно прочитать о «рецепторных полях» в зрительной коре. В мозге млекопитающих присутствуют не только клетки ВКЛ и ВЫКЛ, но и РЧ-клетки, которые срабатывают как во время ВКЛ, так и ВЫКЛ. Возможно, проблему края / разреженности можно обойти, обновив модель, чтобы отразить текущую неврологию на зрении, особенно в моделях на животных.

ноуменальное
источник
3

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

jon_simon
источник
1
Я еще не убежден. Нулевое заполнение создаст только больше выходных пикселей вокруг «центральных» пикселей, которые можно найти без заполнения. Значения «центральных» пикселей абсолютно одинаковы, независимо от того, какое заполнение нулями используется.
Коен
1
N×NN-1
Визуализация свертки на полпути вниз по этой странице может помочь передать интуицию: cs231n.github.io/convolutional-networks
jon_simon