Многослойные нейронные сети с прямым распространением

11 Некоторые специалисты называют сеть с одним скрытым слоем трехслойной сетью, а другие — двухслойной сетью (поскольку считают, что входные элементы не являются "настоящими" элементами). Чтобы избежать путаницы, авторы будут называть такую сеть "сетью с одним скрытым слоем".
Теперь рассмотрим сети со скрытыми элементами. Наиболее общий случай охватывает сети с одним скрытым слоем11, как показано на рис. 20.23. Преимущество введения скрытых слоев состоит в том, что они приводят к расширению пространства гипотез, которые могут быть представлены сетью. Каждый скрытый элемент можно рассматривать как персептрон, который представляет мягкую пороговую функцию в пространстве входов (см. рис. 20.19, б. В таком случае любой выходной элемент должен рассматриваться как средство создания линейной комбинации нескольких таких функций с мягким порогом. Например, путем сложения двух противоположно направленных мягких пороговых функций и определения порогового значения результата можно получить функцию с графиком в виде "хребта" (рис. 20.22, а). Соединение двух таких хребтов под прямыми углами друг к другу (например, комбинирование выходов четырех скрытых элементов) позволяет получить "выступ" (см. рис. 20.22, б).
При наличии большего количества скрытых элементов появляется возможность создавать еще больше выступов различных размеров, расположенных в разных местах. В действительности с помощью одного, достаточно большого скрытого слоя возможно представить любую непрерывную функцию от входных данных с произвольной точностью, а при наличии двух слоев можно представить даже функции с разрывами12. К сожалению, применительно к любой конкретной сетевой структуре сложно точно охарактеризовать, какие функции могут быть представлены с ее помощью, а какие — нет.
Предположим, что необходимо сконструировать сеть со скрытым слоем для задачи с рестораном. Имеется 10 атрибутов, описывающих каждый пример, поэтому требуется 10 входных элементов. А сколько нужно скрытых элементов? На рис. 20.23 показана сеть с четырьмя скрытыми элементами. Как оказалось, такое количество скрытых элементов почти полностью подходит для решения данной задачи. Но проблема заблаговременного выбора подходящего количества скрытых элементов все еще полностью не исследована (с. 990).
Алгоритмы обучения для многослойных сетей подобны алгоритму обучения для персептронов, приведенному в листинге 20.1. Одно небольшое различие состоит в том, что может быть предусмотрено несколько выходов, поэтому должен применяться вектор выходов hw(x), а не одно значение, и с каждым примером должен быть связан вектор выходов у. Между этими алгоритмами существует также важное различие, которое заключается в том, что ошибка y-hw в выходном слое является очевидной, а ошибка в скрытых слоях кажется неуловимой, поскольку в обучающих данных отсутствует информация о том, какие значения должны иметь скрытые узлы. Как оказалось, можно обеспечить обратное распространение ошибки из выходного слоя в скрытые слои. Процесс обратного распространения может быть организован непосредственно на основе исследования общего градиента ошибки. Вначале мы опишем этот процесс на основе интуитивных представлений, а затем приведем его обоснование.
Правило обновления весов, применяемое в выходном слое, идентично уравнению 20.12. Предусмотрено несколько выходных элементов, поэтому предположим, что Erri является i-м компонентом вектора ошибки y-hw. Авторы находят также удобным определить модифицированную ошибку АЕггхд' (irii), с помощью которой правило обновления весов можно преобразовать следующим образом:
Щл <- Щл + ос х aj х Ai (20.14)
Чтобы обновить веса связей между входными и скрытыми элементами, необходимо определить величину, аналогичную терму ошибки для выходных узлов. Именно в этом и заключается суть метода обратного распространения ошибки. Идея его состоит в том, что скрытый узел j "отвечает" за некоторую долю ошибки Ai в каждом из выходных узлов, с которыми он соединен. Таким образом, значения Ai разделяются в соответствии с весом связи между скрытым узлом и выходным узлом и распространяются обратно, обеспечивая получение значений Aj для скрытого слоя. Правило распространения для значений А состоит в следующем:
Теперь правило обновления весов между входными элементами и элементами скрытого слоя становится почти идентичным правилу обновления для выходного слоя:
Wkij <г- wkij + а х ак х Aj
Таким образом, процесс обратного распространения можно кратко описать, как показано ниже.
• Вычислить значения А для выходных элементов с использованием наблюдаемой ошибки.
• Начиная с выходного слоя, повторять следующие действия для каждого слоя в сети до тех пор, пока не будет достигнут самый первый скрытый слой:
• распространять значения А обратно к предыдущему слою;
• обновлять веса между этими двумя слоями.
Подробный алгоритм приведен в листинге 20.2. Листинг 20.2. Алгоритм обратного распространения для обучения в многослойных сетях
function Back-Prop-Learning{examples, network) returns нейронная сеть inputs: examples, множество примеров, для каждого из которых заданы входной вектор х и выходной вектор у network, многослойная сеть с L слоями, весами Wj,i и функцией активации д
repeat
for each е in examples do
for each узел j in выходной слой do aj <— XJ [ e] for ? = 2 to L do
for each узел i in слой ?+1 do
Щ, i <— Щ, i + OL x a j x Ai until не достигается некоторый критерий останова return Neural-Net-Hypothesis{network)
Теперь исходя из основных принципов выведем уравнения обратного распространения к радости читателей, интересующихся математикой. Квадратичная ошибка на одном примере определяется следующим образом:
Е = \ X-i
где сумма вычисляется по всем узлам выходного слоя. Чтобы определить градиент по отношению к конкретному весу Щлъ выходном слое, достаточно развернуть только выражение для активации ai9 поскольку все другие термы в этой операции суммирования не зависят от Wj,
ЭД 3ai dg{inj)
= -(yi - ai) д'{т,)—= - (yi - а,) Я' ШЛ Щл *j
V j J
= -(У1 - ai) g1 (im) aj = -aj Ai
где Ai определено, как указано выше. Чтобы получить градиент по отношению к весам wktj связей, соединяющих входной слой со скрытым слоем, необходимо по-прежнему вычислять всю сумму по 1, поскольку изменение в значениях Wkij могут повлиять на каждое выходное значение а±. При этом придется также развертывать выражение для активаций aj. Ниже показан ход вывода формулы во всех подробностях, поскольку любопытно понаблюдать за тем, как оператор производной распространяется в обратном направлении через сеть:
где Aj определено, как показано выше. Таким образом, получено то же правило обновления, которое было сформулировано выше на основании интуитивных соображений. Очевидно также, что этот процесс может быть продолжен применительно к сетям, имеющим больше одного скрытого слоя, и это соображение является обоснованием для общего алгоритма, приведенного в листинге 20.2.
Внимательно ознакомившись со всеми этими математическими выкладками (или пропустив их), рассмотрим, какую производительность показывает сеть с одним скрытым слоем при решении задачи с рестораном. На рис. 20.24 показаны две кривые. Первая из них представляет собой кривую обучения, которая характеризует изменение среднеквадратичной ошибки на заданном обучающем множестве из 100 примеров для задачи с рестораном в процессе обновления весов. Эта кривая демонстрирует, что параметры сети действительно сходятся, позволяя достичь идеального согласования с обучающими данными. Вторая кривая представляет собой стандартную кривую обучения для данных о ресторане. Нейронная сеть позволяет достичь в процессе обучения хороших результатов, хотя и не совсем с такой скоростью, как при обучении дерева решений; по-видимому, в этом нет ничего удивительного, хотя бы потому, что сами эти данные были сформированы с помощью простого дерева решений.
Безусловно, нейронные сети способны решать гораздо более сложные задачи обучения, хотя и следует отметить, что для создания подходящей сетевой структуры и достижения сходимости к величине, достаточно близкой к глобальному оптимуму в пространстве весов, необходимо приложить определенные усилия. Количество приложений нейронных сетей, описанных в опубликованной литературе, исчисляется буквально десятками тысяч. В разделе 20.7 одно из таких приложений рассматривается более подробно.
Если же решено прибегнуть к использованию сетей, которые не являются полносвязными, то необходимо найти какой-то эффективный метод поиска в очень большом пространстве возможных топологий связей. Алгоритм оптимального повреждения мозга (optimal brain damage) начинает свою работу с полносвязной сети и удаляет из нее связи. После обучения сети в первый раз с помощью подхода на основе теории информации определяется оптимальный выбор связей, которые могут быть удалены. После этого осуществляется повторное обучение сети, и если ее производительность не уменьшается, то этот процесс повторяется. Кроме удаления связей, возможно также удаление элементов, которые не вносят большого вклада в результат.
Было также предложено несколько алгоритмов для формирования большой сети из малой. Один из таких алгоритмов, называемый алгоритмом заполнения мозаики (tiling), напоминает алгоритм обучения списков решений. Его идея состоит в том, что процесс начинается с одного элемента, который настраивается наилучшим образом для выработки правильных выходных данных для максимально возможного количества обучающих примеров. Для обработки примеров, которые не могли быть правильно обработаны первым элементом, вводятся дополнительные элементы. Этот алгоритм предусматривает введение только такого количества элементов, которое требуется для охвата всех примеров.







Материалы

Яндекс.Метрика