Процедура обратного распространения

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

Процедура обратного распространения - student2.ru

Рис. 13.7. Двухслойная сеть обратного распространения

 

Цель обучения сети состоит в такой подстройке весов, чтобы определенное множество входов X(x1,...,xn) приводило к требуемому множеству выходов Y(y1,...,yn). Предполагается, что для каждого вектора X существует парный ему целевой вектор Y и вместе они (X,Y) называются обучающей парой. Входная часть X этой пары состоит из нулей и единиц и может представлять, например, двоичный образ некоторой буквы алфавита. Так, букве алфавита, изображенной на странице в клетку, будет соответствовать двоичный образ, в котором xi=1, когда часть буквы располагается в клетке, и xi=0 - в противном случае. Таким образом, распознавание всех букв алфавита требует 32 обучающие пары.

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

1. Выбрать очередную обучающую пару (X,Y) из обучающего множества и подать входной вектор X на вход сети.

2. Вычислить выход сети.

3. Вычислить разность между реальным (вычисленным) выходом сети и требуемым выходом (целевым вектором обучающей пары).

4. Подкорректировать веса сети так, чтобы минимизировать ошибку.

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

Шаги 1 и 2 подобны тем, которые имеются в уже обученной сети.

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

Шаги 1 и 2 можно рассматривать как “проход вперед”, так как сигнал распространяется по сети от входа к выходу . Шаги 3 и 4 составляют “обратный проход”, здесь вычисляемый сигнал ошибки распространяется обратно по сети и используется для подстройки весов. Эти два прохода можно выразить в математической форме.

Проход вперед. На входе имеем вектор X, на основе которого вычисляется выходной вектор Y. Вектор Y вычитается из целевого вектора T с целью получения ошибки:

e=T-Y

Как мы видим, величина NET каждого нейрона первого слоя вычисляется как взвешенная сумма входов нейрона. Затем активационная функция F “сжимает” NET и дает величину OUT для каждого нейрона в этом слое. Полученное выходное множество OUT является входом для следующего слоя. Процесс повторяется слой за слоем, пока не будет получено заключительное множество сети.

Описанный процесс можно представить в векторной форме. Веса между нейронами соседних слоев можно представить с помощью матрицы W, где wij - вес от нейрона i (например, слоя 2) к нейрону j (слоя 3). Тогда NET-вектор слоя равен:

NET = XW.

Применение функции F к каждой компоненте вектора NET дает нам вектор OUT:

OUT = F(XW).

Последнее уравнение применяется к каждому слою сети от входа к выходу.

Обратный проход. Здесь происходит подстройка весов выходного слоя. Так как для каждого нейрона выходного слоя задано целевое значение, то подстройка весов легко осуществляется с помощью дельта-правила из п. 13.3. Внутренние слои не имеют целевых значений и их называют скрытыми слоями.

Рассмотрим процесс подстройки одного веса от нейрона p в скрытом слое j к нейрону q в выходном слое (рис.13.8). Выход OUT слоя k, вычитаясь из целевого значения T, дает ошибку, которая умножается на производную сжимающей функции [OUT (1-OUT)], вычисленную для этого нейрона слоя k, давая, таким образом, величину

d= OUT (1-OUT) (T-OUT)

Затем d умножается на величину OUT нейрона j, из которого выходит рассматриваемый вес.

Dwpq,k=hdq,k*OUTp,q

где dq,k - величина d для нейрона q в выходном слое k; OUTp,q - величина выхода для нейрона в скрытом слое j.

Это произведение в свою очередь умножается на коэффициент обучения h (0,01£h£1) и результат прибавляется к весу. Такая же процедура выполняется для каждого веса от нейрона скрытого слоя к нейрону в выходном слое:

wpq,k(n+1)=wpq,k(n)+Dwpq,k (13.17)

где wpq,k(n) - величина веса от нейрона в скрытом слое k нейрону q в выходном слое на шаге n (до коррекции); отметим, что индекс относится к слою, в котором заканчивается данный вес, с которым он объединен.

Процедура обратного распространения - student2.ru Рис. 13.8. Настройка веса в выходном слое

wpq,k(n+1) - величина веса на шаге n+1 после коррекции.

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

Величина d, необходимая для обучения нейрона скрытого слоя, равна сумме всех таких произведений, умноженной на производную сжимающей функции:

dp,j=OUTp,j(1-OUTp,j)(S dq,k×wpq,k) (13.18)

После получения величины d веса скрытого слоя корректируются c помощью формул (13.16) и (13.17) (рис 13.9).

Процедура обратного распространения - student2.ru Рис. 13.9. Настройка веса в скрытом слое

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

Запишем операцию обратного распространения ошибки в векторной форме. Пусть Dk - множество величин d выходного слоя и Wk, множество величин выходного слоя. Для получения d-вектора Dj выходного слоя достаточно следующих операций:

1. Умножить d-вектор выходного слоя Dk на транспонированную матрицу весов W¢k , соединяющую скрытый слой с выходным.

Dj=Dk×W¢k (13.19)

2. Умножить каждую компоненту полученного произведения на производную сжимающей функции соответствующего нейрона в скрытом слое:

$[OUTj(I-OUTj)] (13.20)

где оператор $ обозначает покомпонентное произведение векторов. OUTj - выходной вектор слоя j и i - вектор, все компоненты которого равны 1.

Наши рекомендации