Почему нейронные сети становятся глубже, а не шире?

73

В последние годы сверточные нейронные сети (или, возможно, глубокие нейронные сети в целом) стали глубже и глубже: современные сети переходят от 7 уровней ( AlexNet ) до 1000 слоев ( остаточных сетей) в пространстве 4 года. Причиной повышения производительности в более глубокой сети является то, что можно изучить более сложную нелинейную функцию. При наличии достаточных обучающих данных это позволяет сетям легче различать разные классы.

Тем не менее, тенденция, похоже, не соответствует количеству параметров в каждом слое. Например, число карт признаков в сверточных слоях или количество узлов в полностью связанных слоях осталось примерно таким же и все еще относительно небольшим по величине, несмотря на значительное увеличение количества слоев. Из моей интуиции, тем не менее, может показаться, что увеличение количества параметров на слой даст каждому слою более богатый источник данных для изучения его нелинейной функции; но эта идея, кажется, была упущена в пользу простого добавления большего количества слоев, каждый с небольшим количеством параметров.

Таким образом, хотя сети стали «глубже», они не стали «шире». Почему это?

Karnivaurus
источник
1
+1, но, честно говоря, дело не в том, что эти 1000+ многоуровневых сетей являются «современным» в смысле превосходства над другими. Бумага arxiv, которую вы связали, сообщает об остаточной сети с 152 слоями в качестве текущего победителя в ImageNet.
говорит амеба: восстанови монику
3
Вы читали широкие остаточные сети arxiv.org/abs/1605.07146 .... возможно, нет причин .. оптимизация невыпуклой функции с градиентным спуском не имеет теоретического обоснования ... есть только проба и много ошибок :-)
seanv507
@ seanv507 Очень интересно, спасибо за эту ссылку. Кстати, здесь очень похожая тема: stats.stackexchange.com/questions/214360, и там есть ссылка на эту ветку reddit .
говорит амеба: восстанови монику
Тот же вопрос был опубликован на Quora на следующий день после того, почему нейронные сети становятся глубже (больше слоев), но не шире (больше узлов на слой)?
Франк Дернонкур
Очень очень связано: stats.stackexchange.com/questions/182734 .
говорит амеба: восстанови Монику

Ответы:

87

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

Во-первых, в принципе, нет причин, по которым вам вообще нужны глубокие нейронные сети. Достаточно широкая нейронная сеть с одним скрытым слоем может аппроксимировать любую (разумную) функцию с учетом достаточного количества обучающих данных. Однако есть несколько трудностей с использованием чрезвычайно широкой, неглубокой сети. Основная проблема заключается в том, что эти очень широкие, неглубокие сети очень хороши для запоминания, но не так хороши для обобщения . Таким образом, если вы тренируете сеть со всеми возможными входными значениями, сверхширокая сеть может в конечном итоге запомнить соответствующее выходное значение, которое вы хотите. Но это бесполезно, потому что для любого практического применения у вас не будет всех возможных входных значений для обучения.

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

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

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

Дж. О'Брайен Антогнини
источник
+1. Любой комментарий на arxiv.org/abs/1605.07146 ?
говорит амеба: восстанови монику
2
Я только просмотрел его, поэтому не могу сказать ничего авторитетного, но похоже, что авторы обнаружили, что, по крайней мере, в случае остаточных сетей широкая (но все еще 16-слойная глубина!) Сеть превосходит узкую, чрезвычайно глубокую (1000 слоев). ) сеть. Я не знаю много об остаточных сетях, но согласно введению кажется, что трудность в их обучении заключается в том, что у слоев может быть тенденция вообще ничего не изучать и, таким образом, не вносить большой вклад в результат. Похоже, что этого избежать, имея меньше, но более мощных слоев. Относится ли это к другим видам NN, я не знаю.
Дж. О'Брайен Антогнини
Четкий и краткий ответ, молодец. @J
ctwardy
21

Я не думаю, что есть определенный ответ на ваши вопросы. Но я думаю, что общепринятая мудрость заключается в следующем:

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

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

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

Это может частично объяснить успех более глубоких моделей с меньшим количеством параметров: VGGNet (с 2014 года) имеет 16 слоев с параметрами ~ 140M, а ResNet (с 2015 года) превосходит его с 152 слоями, но только с параметрами ~ 2M

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

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

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

Но по мере углубления восприимчивое поле каждого нейрона относительно более раннего слоя становится больше. Таким образом, глубокие слои могут предоставлять функции с глобальным семантическим смыслом и абстрактными деталями (отношения отношений ... отношений объектов), в то же время используя только маленькие ядра (которые упорядочивают отношения, которые изучает сеть, и помогают ей сходиться и обобщать).

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

Borbei
источник
Ограниченная машина Больцмана для глубоких сетей является большим множителем времени сходимости. (afaict)
EngrStudent
4
УКР не являются неотъемлемой частью глубокого обучения. Многие (в настоящее время большинство?) Успешных глубоких сетей не используют RBM.
Борбей
3
Спасибо за ссылку на этот документ, я не видел его раньше, и это выглядит очень актуально.
Дж. О'Брайен Антогнини
@Borbei - Как они обеспечивают разделение функций без RBM?
EngrStudent
1
+1. Любой комментарий на arxiv.org/abs/1605.07146 ?
говорит амеба: восстанови монику
10

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

С другой стороны, найти правильный функционал для этой функции всегда хорошая идея. Однако, если у вас нет хорошей теории, конечно, сложно придумать правильную функцию. Таким образом, добавление слоев полезно как форма подхода грубой силы.

Рассмотрим простой случай: воздушное сопротивление автомобиля. Скажем, мы не знали уравнения: 2/2, где - площадь поперечного сечения автомобиля, - плотность воздуха, а - скорость автомобиля. Можно предположить, что измерения автомобиля важны, и добавить их в качестве характеристик, скорость автомобиля тоже будет расти. Поэтому мы продолжаем добавлять функции и, возможно, добавлять давление воздуха, температуру, длину, ширину автомобиля, количество мест и т. Д.

fCρAv2/2
Aρv

В итоге мы получим модель, подобную Вы увидите, как эти функции не собираются объединяться в «истинное» уравнение, если мы не добавим все взаимодействия и полиномы. Однако, если бы истинное уравнение не было удобно полиномиальным, скажем, оно имело экспоненты или другие странные трансцендентные функции, то у нас не было бы возможности эмулировать его с расширением набора функций или расширением сети.

fiβixi

Однако, сделав сеть глубже, вы легко сможете получить приведенное выше уравнение всего с двумя слоями. Более сложным функциям потребуется больше слоев, поэтому увеличение количества слоев может помочь решить многие проблемы.

Аксакал
источник
5
Вы принимаете линейные передаточные функции. Но есть много других (общих) вариантов, и согласно теореме универсального приближения ANN , даже один скрытый нелинейный слой (если он достаточно широкий) может аппроксимировать любую хорошую функцию. Таким образом, представительность не может объяснить успех глубоких сетей.
Борбей
2
Мой пример был линейным, но он применим к более широкому набору случаев. Вы предполагали "хорошую" функцию, но многие не так хороши. Например, когда я выбираю автомобиль для покупки, почему мой алгоритм принятия решения должен быть хорошей функцией?
Аксакал
2

Для плотно связанной нейронной сети глубины и ширины количество параметров (следовательно, ОЗУ, необходимое для запуска или обучения сети) равно . Таким образом, если у вас есть только ограниченное количество параметров, часто имеет смысл предпочесть большое увеличение глубины по сравнению с небольшим увеличением ширины.dwO(dw2)

Почему вы можете пытаться ограничить количество параметров? Ряд причин:

  • Вы пытаетесь избежать переобучения. (Хотя ограничение количества параметров является очень тупым инструментом для достижения этой цели.)
  • Ваше исследование будет более впечатляющим, если вы сможете превзойти чужую модель, используя то же количество параметров.
  • Тренировать вашу модель намного проще, если модель (плюс параметры момента, если вы используете Адама) может поместиться в памяти одного графического процессора.
  • В реальных приложениях ОЗУ часто обходится дорого при обслуживании моделей. Это особенно верно для запуска моделей, например, на сотовом телефоне, но иногда может применяться даже для обслуживания моделей из облака.

Откуда взялась ? Для двух соседних слоев шириной связи между ними описываются как . Поэтому, если у вас есть слоев шириной (плюс входной и выходной слои ), количество параметров будет Вместо ограничения ширины иногда используется альтернативная стратегия - использовать разреженные соединения. Например, при инициализации топологии сети вы можете допустить каждое соединение с вероятностью поэтому общее количество параметров равноO(dw2)w1,w2w1×w2(d2)w

(d2)w2+w(input layer width)+w(output layer width)=O(dw2).
1/wO(dw), Но если вы сделаете это, не ясно, что увеличение ширины обязательно увеличит способность модели к обучению.
Чарльз Стаатс
источник