Смекни!
smekni.com

Нейрокомпьютерные системы (стр. 9 из 32)

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

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

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

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

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

Операции, выполняемые шагами 1 и 2, сходны с теми, которые выполняются при функционировании уже обученной сети, т.е. подается входной вектор и вычисляется полу­чающийся выход. Вычисления выполняются послойно. На рис. 3.3 сначала вычисляются выходы нейронов слоя j, затем они используются в качестве входов слоя k, вычис­ляются выходы нейронов слоя k, которые и образуют выхо­дной вектор сети. На шаге 3 каждый из выходов сети, которые на рис. 3.3 обозначены OUT, вычитается из соответствующей компоненты целевого вектора, чтобы получить ошибку. Эта ошибка используется на шаге 4 для коррекции весов сети, причем знак и величина изменений весов определяются алгоритмом обучения (см. ниже). После достаточного числа повторений этих четырех шагов разность между действительными выходами и целевы­ми выходами должна уменьшиться до приемлемой величины, при этом говорят, что сеть обучилась. Теперь сеть ис­пользуется для распознавания и веса не изменяются. На шаги 1 и 2 можно смотреть как на «проход впе­ред», так как сигнал распространяется по сети от входа к выходу. Шаги 3, 4 составляют «обратный проход», здесь вычисляемый сигнал ошибки распространяется обратно по сети и используется для подстройки весов. Эти два про­хода теперь будут детализированы и выражены в более математической форме.

Проход вперед. Шаги 1 и 2 могут быть выражены в вектор­ной форме следующим образом: подается входной вектор Х и на выходе получается вектор Y. Векторная пара вход-цель Х и Т берется из обучающего множества. Вычисления проводятся над вектором X, чтобы получить выходной вектор Y. Как мы видели, вычисления в многослойных сетях выполняются слой за слоем, начиная с ближайшего к входу слоя. Величина NET каждого нейрона первого слоя вычис­ляется как взвешенная сумма входов нейрона. Затем активационная функция F «сжимает» NET и дает величину OUT для каждого нейрона в этом слое. Когда множество выхо­дов слоя получено, оно является входным множеством для следующего слоя. Процесс повторяется слой за слоем, пока не будет получено заключительное множество выходов сети. Этот процесс может быть выражен в сжатой форме с помощью векторной нотации. Веса между нейронами могут рассматриваться как матрица W. Например, вес от нейрона 8 в слое 2 к нейрону 5 слоя 3 обозначается w8,5. Тогда NET-вектор слоя N может быть выражен не как сумма про­изведений, а как произведение Х и W. В векторном обоз­начении N = XW. Покомпонентным применением функции F к NET-вектору N получается выходной вектор О. Таким обра­зом, для данного слоя вычислительный процесс описывает­ся следующим выражением:

О = F(XW). (3.3)

Выходной вектор одного слоя является входным век тором для следующего, поэтому вычисление выходов после­днего слоя требует применения уравнения (3.3) к каждому слою от входа сети к ее выходу.

Обратный проход. Подстройка весов выходного слоя. Так как для каждого нейрона выходного слоя задано целевое значение, то подстройка весов легко осуществляется с использованием модифицированного дельта-правила из гл. 2. Внутренние слои называют «скрытыми слоями», для их выходов не имеется целевых значений для сравнения. Поэтому обучение усложняется. На рис. 3.5 показан процесс обучения для одного веса от нейрона р в скрытом слое j к нейрону в q выход­ном слое k. Выход нейрона слоя k, вычитаясь из целевого значения (Target), дает сигнал ошибки. Он умножается на производную сжимающей функции [OUT(1 - OUT)], вычислен­ную для этого нейрона слоя k, давая, таким образом, величину d.

d = OUT(1 - OUT)(Target - OUT). (3.4)

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

Dwpq,k=hdq,kOUTp,j, (3.5)

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

где wpq,k {n) - величина веса от нейрона n в скрытом, слое к нейрону q в выходном слое на шаге п (до корре­кции); отметим, что индекс k относится к слою, в котором заканчивается данный вес, т.е., согласно принятому в этой книге соглашению, с которым он объединен; wpq,k (n+1)- величина веса на шаге п + 1 (после коррекции); dq,k- величина d для нейрона q в выходном слое k, OUTp,j - величина OUT для нейрона р в скрытом слое j.

Рис.3.5. Настройка веса в выходном слое.

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

dp,q = OUTp,j (1 - OUTp,j)(

dp,kwpq,k) (3.7)

(см. рис.3.6). Когда значение d получено, веса, питающие первый скрытый уровень, могут быть подкорректированы с помощью уравнений (3.5) и (3.6), где индексы модифици­руются в соответствии со слоем.

Рис.З.6. Настройка веса в скрытом слое.

Для каждого нейрона в данном скрытом слое должно быть вычислено d и подстроены все веса, ассоциированные с этим слоем. Этот процесс повторяется слой за слоем по направлению к входу, пока все веса не будут подкорректированы. С помощью векторных обозначений операция обратного распространения ошибки может быть записана значительно компактнее. Обозначим множество величин d выходного слоя через Dk и множество весов выходного слоя как массив W’k. Чтобы получить Dj, d-вектор выходного слоя, достаточно следующих двух операций:

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

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

В символьной записи

Dj = DkWk $ [Оj$(1- Oj)], (3.8)

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

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

Импульс. В работе [7] описан метод ускорения обучения для алгоритма обратного распространения, увеличивающий также устойчивость процесса. Этот метод, названный импульсом, заключается в добавлении к коррекции веса члена, пропорционального величине предыдущего изменения веса. Как только происходит коррекция, она «запоминает­ся» и служит для модификации всех последующих коррекций. Уравнения коррекции модифицируются следующим обра­зом: