Опубликован: 27.07.2006 | Доступ: свободный | Студентов: 6128 / 1494 | Оценка: 4.37 / 4.06 | Длительность: 13:49:00
ISBN: 978-5-9556-0049-9
Специальности: Программист
Лекция 4:

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

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

Обучение сети обратного распространения требует выполнения следующих операций:

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

Операции, выполняемые шагами 1 и 2, сходны с теми, которые выполняются при функционировании уже обученной сети, — подается входной вектор и вычисляется получающийся выход. Вычисления выполняются послойно. На рис. 4.2 сначала вычисляются выходы нейронов слоя j, затем они используются в качестве входов слоя k, после чего вычисляются выходы нейронов слоя k, которые и образуют выходной вектор сети.

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

После достаточного числа повторений этих четырех шагов разность между действительными и целевыми выходами должна уменьшиться до приемлемой величины: при этом говорят, что сеть обучилась. Теперь сеть используется для распознавания, и веса не изменяются.

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

Проход вперед. Шаги 1 и 2 могут быть выражены в векторной форме следующим образом: подается входной вектор X и на выходе получается вектор Y. Векторная пара вход — цель X и Y берется из обучающего множества. Вычисления проводятся над вектором X, чтобы получить выходной вектор Y.

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

Этот процесс может быть выражен в сжатой форме с помощью векторной нотации. Веса между нейронами будем рассматривать как матрицу W. Например, вес от нейрона 8 в слое 2 к нейрону 5 слоя 3 обозначается w_{8,5}. Тогда NET -вектор слоя N может быть выражен не как сумма произведений, а как произведение X и W. В векторном обозначении N =
XW. Покомпонентным применением функции F к NET -вектору N получаем выходной вектор О. Таким образом, для данного слоя вычислительный процесс описывается следующим выражением:

O=F(XW). ( 3)

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

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

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

\delta=OUT (1-OUT)(Target-OUT). ( 4)

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

Следующие уравнения иллюстрируют это вычисление:

\Delta w_{pq,k}=\eta \delta_{q,k}OUT_{pj}, ( 5)
w_{pq,k}(n+1)=w_{pq,k}(n)+\Delta w_{pq,k}, ( 6)

где w_{pq,k}(n) — величина веса от нейрона p в скрытом слое k к нейрону q в выходном слое на шаге n (до коррекции); отметим, что индекс k относится к слою, в котором заканчивается данный вес (т. е. к слою, с которым он объединен); w_{pq,k}(n+1) — величина веса на шаге n + 1 (после коррекции); \delta_{q,k} — величина \delta для нейрона q, в выходном слое k ; OUT_{p,j} — величина OUT для нейрона p в скрытом слое j.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >