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

[Этот вопрос теперь также задается на странице Перекрестная проверка]

Вкратце вопрос

Я изучаю сверточные нейронные сети и считаю, что эти сети не одинаково обрабатывают каждый входной нейрон (пиксель / параметр). Представьте, что у нас есть глубокая сеть (много слоев), которая применяет свертку к некоторому входному изображению. Нейроны в «середине» изображения имеют множество уникальных путей ко многим нейронам более глубокого слоя, что означает, что небольшое изменение в средних нейронах оказывает сильное влияние на результат. Однако нейроны на краю изображения имеют только 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 способов проецирования информации центральными нейронами). По мере увеличения количества слоев он неизбежно достигает предела, при котором веса не могут практически компенсировать этот эффект. А теперь представьте, что мы немного возмущаем все нейроны. Центральные нейроны вызовут более сильное изменение выходного сигнала на несколько порядков по сравнению с краевыми нейронами. Я считаю, что для общих приложений и для очень глубоких сетей нужно найти способы решения моей проблемы?


person Koen    schedule 06.10.2014    source источник
comment
На самом деле это не вопрос программирования, поэтому он лучше подходит для перекрестной проверки. (См. Также этот мета-сообщение для некоторых обсуждение.)   -  person lmjohns3    schedule 07.10.2014
comment
Спасибо за совет! Я решил подождать неделю и просто задал вопрос о перекрестной проверке.   -  person Koen    schedule 13.10.2014
comment
ПРИВЕТ ! Кто-нибудь думает, что это может быть ответ на мой вопрос ?? МОЙ ВОПРОС: stackoverflow.com/questions/52206265/   -  person Tbertin    schedule 06.09.2018


Ответы (1)


Процитирую ваши предложения и ниже напишу свои ответы.

  • Я прав, что этот эффект имеет место в сетях с глубокой сверткой

    • I think you are wrong in general but right according to your 64 by 64 sized convolution filter example. While you are structuring your convolution layer filter sizes, they would never be bigger than what you are looking for in your images. In other words - if your images are 200by200 and you convolve for 64by64 patches, you say that these 64by64 patches will learn some parts or exactly that image patch that identifies your category. The idea in the first layer is to learn edge-like partial important images not the entire cat or car itself.
  • Есть ли теория по этому поводу, упоминалось ли об этом в литературе? и есть ли способы преодолеть этот эффект?

    • Я никогда не видел этого ни в одной газете, которую просматривал до сих пор. И я не думаю, что это будет проблемой даже для очень глубоких сетей.

    • Такого эффекта нет. Предположим, ваш первый уровень, который выучил патчи 64 на 64, работает. Если в верхнем левом углу есть патч, который сработает (станет активным), то он будет отображаться как 1 в крайнем верхнем левом углу следующих слоев, следовательно, информация будет распространяться по сети.

  • (не цитируется) Вы не должны думать, что «пиксель полезен большему количеству нейронов, когда он приближается к центру». Подумайте о фильтре 64x64 с шагом 4:

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

    • идея состоит в том, чтобы сохранить значимые части изображения живыми, подавляя бессмысленные, тусклые части и объединяя эти значимые части в следующих слоях. В случае изучения «заглавной буквы aA», пожалуйста, смотрите только изображения в очень старой статье о Фукусиме 1980 года (http://www.cs.princeton.edu/courses/archive/spr08/cos598B/Readings/Fukushima1980.pdf) рисунки 7 и 5. Следовательно, есть не важен пиксель, важен фрагмент изображения, который является размером вашего сверточного слоя.

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

    • Предположим, вы ищете автомобиль на изображении,

    • И предположим, что в вашем 1-м примере автомобиль определенно находится в самой левой верхней части изображения размером 200 на 200 64by64, во 2-м примере автомобиль определенно находится в самой правой нижней части изображения размером 200 на 200 64by64.

    • Во втором слое все ваши значения пикселей будут почти равны 0 для 1-го изображения, кроме самого верхнего левого угла, и для 2-го изображения, кроме самого нижнего правого угла.

    • Теперь центральная часть изображения ничего не будет значить для моего прямого и обратного распространения, потому что значения уже будут равны 0. Но значения углов никогда не будут отброшены и повлияют на мои обучающие веса.

person Doga Siyli    schedule 08.01.2015