Евразийский
научный
журнал

Алгоритм обучения многослойной нейронной сети методом обратного распространения ошибки

Поделитесь статьей с друзьями:
Автор(ы): Прудников Иван Алексеевич
Рубрика: Физико-математические науки
Журнал: «Евразийский Научный Журнал №2 2016»  (февраль)
Количество просмотров статьи: 4104
Показать PDF версию Алгоритм обучения многослойной нейронной сети методом обратного распространения ошибки

Прудников Иван Алексеевич
МИРЭА(МТУ)

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

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

Теоретическая часть

Данный материал предполагает знакомство с основами нейронных сетей, однако я считаю возможным ввести читателя в курс темы без излишних мытарств по теории нейронных сетей. Итак, для тех, кто впервые слышит словосочетание «нейронная сеть», предлагаю воспринимать нейронную сеть в качестве взвешенного направленного графа, узлы ( нейроны ) которого расположены слоями. Кроме того, узел одного слоя имеет связи со всеми узлами предыдущего слоя. В нашем случае у такого графа будут иметься входной и выходной слои, узлы которых выполняют роль входов и выходов соответственно. Каждый узел ( нейрон ) обладает активационной функцией — функцией, ответственной за вычисление сигнала на выходе узла ( нейрона ). Также существует понятие смещения, представляющего из себя узел, на выходе которого всегда появляется единица. В данной статье мы будем рассматривать процесс обучения нейронной сети, предполагающий наличие «учителя», то есть процесс обучения, при котором обучение происходит путем предоставления сети последовательности обучающих примеров с правильными откликами. 
Как и в случае с большинством нейронных сетей, наша цель состоит в обучении сети таким образом, чтобы достичь баланса между способностью сети давать верный отклик на входные данные, использовавшиеся в процессе обучения ( запоминания ), и способностью выдавать правильные результаты в ответ на входные данные, схожие, но неидентичные тем, что были использованы при обучении ( принцип обобщения). Обучение сети методом обратного распространения ошибки включает в себя три этапа: подачу на вход данных, с последующим распространением данных в направлении выходов, вычисление и обратное распространение соответствующей ошибки и корректировку весов. После обучения предполагается лишь подача на вход сети данных и распространение их в направлении выходов. При этом, если обучение сети может являться довольно длительным процессом, то непосредственное вычисление результатов обученной сетью происходит очень быстро. Кроме того, существуют многочисленные вариации метода обратного распространения ошибки, разработанные с целью увеличения скорости протекания процесса обучения.
Также стоит отметить, что однослойная нейронная сеть существенно ограничена в том, обучению каким шаблонам входных данных она подлежит, в то время, как многослойная сеть ( с одним или более скрытым слоем ) не имеет такого недостатка. Далее будет дано описание стандартной нейронной сети с обратным распространением ошибки.

Архитектура

На рисунке 1 показана многослойная нейронная сеть с одним слоем скрытых нейронов ( элементы Z ).


Рис.1.PNG

Нейроны, представляющие собой выходы сети ( обозначены Y ), и скрытые нейроны могут иметь смещение( как показано на изображении ). Смещение, соответствующий выходу Yk обозначен wok, скрытому элементу Zj — Voj. Эти смещения служат в качестве весов на связях, исходящих от нейронов, на выходе которых всегда появляется 1 ( на рисунке 1 они показаны, но обычно явно не отображаются, подразумеваясь). Кроме того, на рисунке 1 стрелками показано перемещение информации в ходе фазы распространения данных от входов к выходам. В процессе обучения сигналы распространяются в обратном направлении.

Описание алгоритма

Алгоритм, представленный далее, применим к нейронной сети с одним скрытым слоем, что является допустимой и адекватной ситуацией для большинства приложений. Как уже было сказано ранее, обучение сети включает в себя три стадии: подача на входы сети обучающих данных, обратное распространение ошибки и корректировка весов. В ходе первого этапа каждый входной нейрон Xполучает сигнал и широковещательно транслирует его каждому из скрытых нейронов Z1,Z2...,Zp. Каждый скрытый нейрон затем вычисляет результат его активационной функции ( сетевой функции ) и рассылает свой сигнал Zj всем выходным нейронам. Каждый выходной нейрон Yk, в свою очередь, вычисляет результат своей активационной функции Yk, который представляет собой ничто иное, как выходной сигнал данного нейрона для соответствующих входных данных. В процессе обучения, каждый нейрон на выходе сети сравнивает вычисленное значение Yk с предоставленным учителем tk ( целевым значением ), определяя соответствующее значение ошибки для данного входного шаблона. На основании этой ошибки вычисляется σk (k = 1,2,...m). σиспользуется при распространении ошибки от Yk до всех элементов сети предыдущего слоя (скрытых нейронов, связанных с Yk), а также позже при изменении весов связей между выходными нейронами и скрытыми. Аналогичным образом вычисляется σj (j = 1,2,...p) для каждого скрытого нейрона Zj. Несмотря на то, что распространять ошибку до входного слоя необходимости нет, σj используется для изменения весов связей между нейронами скрытого слоя и входными нейронами. После того как все σ были определены, происходит одновременная корректировка весов всех связей.

Обозначения:

В алгоритме обучения сети используются следующие обозначения: 

X Входной вектор обучающих данных X = (X1, X2,...,Xi,...,Xn). 
t Вектор целевых выходных значений, предоставляемых учителем t = (t1, t2,...,tk,...,tm)
σk Составляющая корректировки весов связей wjk, соответствующая ошибке выходного нейрона Yk; также, информация об ошибке нейрона Yk, которая распространяется тем нейронам скрытого слоя, которые связаны с Yk.
σj Составляющая корректировки весов связей vij, соответствующая распространяемой от выходного слоя к скрытому нейрону Zинформации об ошибке.
a Скорость обучения.
Xi Нейрон на входе с индексом i. Для входных нейронов входной и выходной сигналы одинаковы — Xi.
voj Смещение скрытого нейрона j.
Zj Скрытый нейрон j; Суммарное значение подаваемое на вход скрытого элемента Zj обозначается Z_inj: Z_inj = voj +∑xi*vij
Сигнал на выходе Zj ( результат применения к Z_inj активационной функции ) обозначается Zj: Zj =  f (Z_inj)
wok Смещение нейрона на выходе.
Yk Нейрон на выходе под индексом k; Суммарное значение подаваемое на вход выходного элемента Yk обозначается Y_ink: Y_ink = wok + ∑ Zj*wjk. Сигнал на выходе Yk ( результат применения к Y_ink активационной функции ) обозначается Yk:

Функция активации

Функция активация в алгоритме обратного распространения ошибки должна обладать несколькими важными характеристиками: непрерывностью, дифференцируемостью и являться монотонно неубывающей. Более того, ради эффективности вычислений, желательно, чтобы ее производная легко находилась. Зачастую, активационная функция также является функцией с насыщением. Одной из наиболее часто используемых активационных функций является бинарная сигмоидальная функция с областью значений в ( 0, 1 ) и определенная как:

Рис.2.PNG

Другой широко распространенной активационной функцией является биполярный сигмоид с областью значений ( -1, 1 ) и определенный как:

Рис.3.PNG

Алгоритм обучения

Алгоритм обучения выглядит следующим образом:

Шаг 0.

Инициализация весов ( веса всех связей инициализируются случайными небольшими значениями ).

Шаг 1.

До тех пор пока условие прекращения работы алгоритма неверно, выполняются шаги 2 — 9.

Шаг 2.

Для каждой пары { данные, целевое значение } выполняются шаги 3 — 8.

Распространение данных от входов к выходам:

Шаг 3.
Каждый входной нейрон ( Xi, i = 1,2,...,n ) отправляет полученный сигнал Xi всем нейронам в следующем слое ( скрытом ).

Шаг 4.

Каждый скрытый нейрон (Zj, j = 1,2,...,p) суммирует взвешенные входящие сигналы: z_inj = voj + ∑ xi*vij и применяет активационную функцию: zj = f (z_inj) После чего посылает результат всем элементам следующего слоя ( выходного ).

Шаг 5.

Каждый выходной нейрон ( Yk, k = 1,2,...m ) суммирует взвешенные входящие сигналы: Y_in= wok + ∑ Zj*wjk и применяет активационную функцию, вычисляя выходной сигнал: Y= f (Y_ink).

Обратное распространение ошибки:

Шаг 6.

Каждый выходной нейрон (Yk, k = 1,2,...m) получает целевое значение — то выходное значение, которое является правильным для данного входного сигнала, и вычисляет ошибку: σ= (tk - yk)*f ' (y_ink), так же вычисляет величину, на которую изменится вес связи wjk : Δwjk = a * σk * zj. Помимо этого, вычисляет величину корректировки смещения: Δwok = a*σk и посылает σk нейронам в предыдущем слое.

Шаг 7.

Каждый скрытый нейрон (zj, j = 1,2,...p) суммирует входящие ошибки ( от нейронов в последующем слое ) σ_in= ∑ σk * wjk и вычисляет величину ошибки, умножая полученное значение на производную активационной функции: σj = σ_inj * f ' (z_inj), так же вычисляет величину, на которую изменится вес связи vij: Δvij = a * σj * xi. Помимо этого, вычисляет величину корректировки смещения: voj = a * σj

Шаг 8. Изменение весов.

Каждый выходной нейрон ( yk, k = 1,2,...,m) изменяет веса своих связей с элементом смещения и скрытыми нейронами: wjk(new) = wjk(old) + Δwjk 
Каждый скрытый нейрон (zj, j = 1,2,...p) изменяет веса своих связей с элементом смещения и выходными нейронами: vij(new) = vij(old) + Δvij 

Шаг 9.

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