В последние годы сверточные нейронные сети (или, возможно, глубокие нейронные сети в целом) стали глубже и глубже: современные сети переходят от 7 уровней ( AlexNet ) до 1000 слоев ( остаточных сетей) в пространстве 4 года. Причиной повышения производительности в более глубокой сети является то, что можно изучить более сложную нелинейную функцию. При наличии достаточных обучающих данных это позволяет сетям легче различать разные классы.
Тем не менее, тенденция, похоже, не соответствует количеству параметров в каждом слое. Например, число карт признаков в сверточных слоях или количество узлов в полностью связанных слоях осталось примерно таким же и все еще относительно небольшим по величине, несмотря на значительное увеличение количества слоев. Из моей интуиции, тем не менее, может показаться, что увеличение количества параметров на слой даст каждому слою более богатый источник данных для изучения его нелинейной функции; но эта идея, кажется, была упущена в пользу простого добавления большего количества слоев, каждый с небольшим количеством параметров.
Таким образом, хотя сети стали «глубже», они не стали «шире». Почему это?
Ответы:
Как заявление об отказе от ответственности, я работаю над нейронными сетями в своих исследованиях, но я обычно использую относительно маленькие, неглубокие нейронные сети, а не действительно глубокие сети на переднем крае исследований, которые вы приводите в своем вопросе. Я не эксперт по причудам и особенностям очень глубоких сетей, и я буду полагаться на кого-то, кто есть.
Во-первых, в принципе, нет причин, по которым вам вообще нужны глубокие нейронные сети. Достаточно широкая нейронная сеть с одним скрытым слоем может аппроксимировать любую (разумную) функцию с учетом достаточного количества обучающих данных. Однако есть несколько трудностей с использованием чрезвычайно широкой, неглубокой сети. Основная проблема заключается в том, что эти очень широкие, неглубокие сети очень хороши для запоминания, но не так хороши для обобщения . Таким образом, если вы тренируете сеть со всеми возможными входными значениями, сверхширокая сеть может в конечном итоге запомнить соответствующее выходное значение, которое вы хотите. Но это бесполезно, потому что для любого практического применения у вас не будет всех возможных входных значений для обучения.
Преимущество нескольких слоев заключается в том, что они могут изучать функции на различных уровнях абстракции . Например, если вы тренируете глубокую сверточную нейронную сеть для классификации изображений, вы обнаружите, что первый слой будет обучаться распознавать такие базовые вещи, как ребра, следующий слой будет обучаться распознавать наборы ребер, такие как фигуры, следующий Слой будет обучаться распознавать наборы форм, таких как глаза или носы, а следующий слой будет изучать даже элементы высшего порядка, такие как лица. Многократные слои намного лучше обобщают, потому что они изучают все промежуточные функции между необработанными данными и высокоуровневой классификацией.
Это объясняет, почему вы можете использовать глубокую сеть, а не очень широкую, но неглубокую сеть. Но почему не очень глубокая, очень широкая сеть? Я думаю, что ответ заключается в том, что вы хотите, чтобы ваша сеть была как можно меньше и приносила хорошие результаты. По мере того как вы увеличиваете размер сети, вы на самом деле просто вводите больше параметров, которые ваша сеть должна изучить, и, следовательно, увеличиваете шансы на переоснащение. Если вы строите очень широкую, очень глубокую сеть, вы используете шанс каждого слоя просто запомнить, какой вы хотите получить результат, и вы получите нейронную сеть, которая не может обобщить новые данные.
Помимо призрака переоснащения, чем шире ваша сеть, тем дольше будет тренироваться . Глубокие сети уже могут быть очень дорогими в вычислительном отношении для обучения, поэтому есть сильный стимул сделать их достаточно широкими, чтобы они работали хорошо, но не шире.
источник
Я не думаю, что есть определенный ответ на ваши вопросы. Но я думаю, что общепринятая мудрость заключается в следующем:
По сути, по мере того, как пространство гипотез алгоритма обучения растет, алгоритм может изучать все больше и больше структур. Но в то же время алгоритм становится более склонным к переобучению, и его ошибка обобщения может возрасти.
В конечном счете, для любого данного набора данных целесообразно работать с минимальной моделью, обладающей достаточной емкостью для изучения реальной структуры данных. Но это очень волнистый совет, поскольку обычно «реальная структура данных» неизвестна, и часто даже возможности моделей-кандидатов понимаются лишь смутно.
Когда дело доходит до нейронных сетей, размер пространства гипотез определяется количеством параметров. И кажется, что при фиксированном числе параметров (или фиксированном порядке величины) более глубокий подход позволяет моделям охватить более богатые структуры (например, эту статью ).
Это может частично объяснить успех более глубоких моделей с меньшим количеством параметров: VGGNet (с 2014 года) имеет 16 слоев с параметрами ~ 140M, а ResNet (с 2015 года) превосходит его с 152 слоями, но только с параметрами ~ 2M
(с другой стороны, модели меньшего размера могут быть проще в обучении в вычислительном отношении - но я не думаю, что это сам по себе главный фактор - поскольку глубина фактически усложняет обучение)
Обратите внимание, что эта тенденция (большая глубина, меньше параметров) в основном присутствует в задачах, связанных со зрением, и в сверточных сетях, и это требует объяснения для конкретного домена. Итак, вот еще одна перспектива:
Каждый «нейрон» в сверточном слое имеет «рецептивное поле», которое представляет собой размер и форму входов, которые влияют на каждый выход. Интуитивно понятно, что каждое ядро фиксирует какую-то связь между соседними входами. А маленькие ядра (которые являются общими и предпочтительными) имеют небольшое восприимчивое поле, поэтому они могут предоставлять информацию только о локальных отношениях.
Но по мере углубления восприимчивое поле каждого нейрона относительно более раннего слоя становится больше. Таким образом, глубокие слои могут предоставлять функции с глобальным семантическим смыслом и абстрактными деталями (отношения отношений ... отношений объектов), в то же время используя только маленькие ядра (которые упорядочивают отношения, которые изучает сеть, и помогают ей сходиться и обобщать).
Таким образом, полезность глубоких сверточных сетей в компьютерном зрении может быть частично объяснена пространственной структурой изображений и видео. Возможно, что время покажет, что для разных типов задач или для не сверточных архитектур глубина на самом деле не работает хорошо.
источник
Добавление дополнительных функций помогает, но преимущество быстро становится незначительным после добавления множества функций. Это одна из причин, по которой работают такие инструменты, как PCA : несколько компонентов отражают самые разные функции. Следовательно, добавление дополнительных функций после некоторого момента практически бесполезно.
С другой стороны, найти правильный функционал для этой функции всегда хорошая идея. Однако, если у вас нет хорошей теории, конечно, сложно придумать правильную функцию. Таким образом, добавление слоев полезно как форма подхода грубой силы.
Рассмотрим простой случай: воздушное сопротивление автомобиля. Скажем, мы не знали уравнения: 2/2, где - площадь поперечного сечения автомобиля, - плотность воздуха, а - скорость автомобиля. Можно предположить, что измерения автомобиля важны, и добавить их в качестве характеристик, скорость автомобиля тоже будет расти. Поэтому мы продолжаем добавлять функции и, возможно, добавлять давление воздуха, температуру, длину, ширину автомобиля, количество мест и т. Д.
В итоге мы получим модель, подобную Вы увидите, как эти функции не собираются объединяться в «истинное» уравнение, если мы не добавим все взаимодействия и полиномы. Однако, если бы истинное уравнение не было удобно полиномиальным, скажем, оно имело экспоненты или другие странные трансцендентные функции, то у нас не было бы возможности эмулировать его с расширением набора функций или расширением сети.
Однако, сделав сеть глубже, вы легко сможете получить приведенное выше уравнение всего с двумя слоями. Более сложным функциям потребуется больше слоев, поэтому увеличение количества слоев может помочь решить многие проблемы.
источник
Для плотно связанной нейронной сети глубины и ширины количество параметров (следовательно, ОЗУ, необходимое для запуска или обучения сети) равно . Таким образом, если у вас есть только ограниченное количество параметров, часто имеет смысл предпочесть большое увеличение глубины по сравнению с небольшим увеличением ширины.d w O(dw2)
Почему вы можете пытаться ограничить количество параметров? Ряд причин:
Откуда взялась ? Для двух соседних слоев шириной связи между ними описываются как . Поэтому, если у вас есть слоев шириной (плюс входной и выходной слои ), количество параметров будет Вместо ограничения ширины иногда используется альтернативная стратегия - использовать разреженные соединения. Например, при инициализации топологии сети вы можете допустить каждое соединение с вероятностью поэтому общее количество параметров равноO(dw2) w1,w2 w1×w2 (d−2) w
источник