Нейронные сети с одним скрытым слоем способны к универсальной
аппроксимации. Теорема об универсальной аппроксимации утверждает, что сеть с прямой связью с одним скрытым слоем, содержащим конечное число нейронов, может аппроксимировать непрерывные функции с умеренными предположениями о функции активации. Первая версия этой теоремы была предложена Цыбенко (1989) для сигмовидных функций активации. Хорник (1991) расширил это, показав, что не конкретный выбор функции активации, а сама многоуровневая архитектура с прямой связью позволяет нейронным сетям выступать в качестве универсальных аппроксиматоров.
Благодаря этой теореме вы увидите значительное количество литературы, в которой предлагается использование одного скрытого слоя.
=====================
Все изменилось с появлением Hinton, Osindero, & Teh (2006). Если один скрытый слой может изучить любую проблему, то почему Hinton et. др. так много вкладывают в глубокое обучение? Зачем нам вообще нужно глубокое обучение? Хотя теорема об универсальной аппроксимации утверждает/доказывает, что однослойная нейронная сеть может научиться чему угодно, она не указывает, насколько легко этой нейронной сети действительно будет чему-то научиться. С момента появления многослойного персептрона у нас появилась возможность создавать глубокие нейронные сети. Просто у нас не получалось особенно хорошо обучать их до новаторского исследования Хинтона в 2006 году и последующих достижений, основанных на его фундаментальной работе.
====================
Традиционно нейронные сети имели только три типа слоев: скрытый, входной и выходной. Это все действительно один и тот же тип слоя, если вы просто учтете, что входные слои загружаются из внешних данных (а не предыдущего слоя) и выходные данные канала во внешнее место назначения (а не следующий слой). Эти три слоя теперь обычно называют плотными слоями. Это связано с тем, что каждый нейрон в этом слое полностью связан со следующим слоем. В случае выходного слоя нейроны являются просто держателями, прямых связей нет. Современные нейронные сети имеют много дополнительных типов слоев, с которыми приходится иметь дело. В дополнение к классическим плотным слоям теперь у нас также есть выпадающие, сверточные, объединяющие и повторяющиеся слои. Плотные слои часто смешиваются с другими типами слоев. Здесь пойдет о плотных слоях. При рассмотрении структуры плотных слоев необходимо принять два решения относительно этих скрытых слоев: сколько скрытых слоев на самом деле должно быть в нейронной сети и сколько нейронов будет в каждом из этих слоев. Сначала мы рассмотрим, как определить количество скрытых слоев для использования с нейронной сетью.
======================
Проблемы, требующие более двух скрытых слоев, были редкостью до глубокого обучения. Для простых наборов данных часто бывает достаточно двух или меньше слоев. Однако со сложными наборами данных, включающими временные ряды или компьютерное зрение, могут быть полезны дополнительные слои. В следующей таблице приведены возможности нескольких распространенных многоуровневых архитектур.
=============================================
Количество скрытых слоев Результат
=============================================
none Только способно представлять линейные разделимые функции или решения.
=============================================
1 Может аппроксимировать любую функцию, которая содержит непрерывное отображение из одного конечного пространства в другое.
=============================================
2 Может представлять произвольную границу решения с произвольной точностью с помощью рациональных функций активации и может аппроксимировать любое гладкое отображение с любой точностью.
=============================================
3 Дополнительные слои могут изучать сложные представления (что-то вроде автоматической разработки признаков) для слоев слоев.
=============================================
Определение количества скрытых слоев нейронов — лишь малая часть проблемы. Вы также должны определить, сколько нейронов будет в каждом из этих скрытых слоев. Этот процесс рассматривается в следующем разделе.
================================
Количество нейронов в скрытых слоях
Определение количества нейронов в скрытых слоях является очень важной частью определения общей архитектуры нейронной сети. Хотя эти слои не взаимодействуют напрямую с внешней средой, они оказывают огромное влияние на конечный результат. Необходимо тщательно учитывать как количество скрытых слоев, так и количество нейронов в каждом из этих скрытых слоев. Использование слишком малого количества нейронов в скрытых слоях приведет к так называемому недообучению. Недообучение происходит, когда в скрытых слоях слишком мало нейронов для адекватного обнаружения сигналов в сложном наборе данных.
================================
Использование слишком большого количества нейронов в скрытых слоях может привести к нескольким проблемам. Во-первых, слишком много нейронов в скрытых слоях может привести к переобучению. Переобучение происходит, когда нейронная сеть обладает настолько большими возможностями обработки информации, что ограниченного количества информации, содержащейся в обучающем наборе, недостаточно для обучения всех нейронов в скрытых слоях. Вторая проблема может возникнуть, даже если данных для обучения достаточно. Чрезмерно большое количество нейронов в скрытых слоях может увеличить время, необходимое для обучения сети. Количество времени обучения может увеличиться до такой степени, что невозможно адекватно обучить нейронную сеть. Очевидно, должен быть достигнут некоторый компромисс между слишком большим и слишком малым количеством нейронов в скрытых слоях.
==============================
Есть несколько практических правил, которые используются для выбора скрытых слоев. Существует множество эмпирических методов определения приемлемого количества нейронов для использования в скрытых слоях, например следующие:
Количество скрытых нейронов должно быть между размером входного слоя и размером выходного слоя.
Количество скрытых нейронов должно составлять 2/3 размера входного слоя плюс размер выходного слоя.
Количество скрытых нейронов должно быть менее чем в два раза больше размера входного слоя.
Эти три правила являются отправной точкой для вашего рассмотрения. В конечном счете, выбор архитектуры вашей нейронной сети сведется методом проб и ошибок. Но что именно подразумевается под пробами и ошибками? Вы же не хотите запускать в свою сеть случайное количество слоев и нейронов. Для этого потребовалось бы очень много времени.