Биографии Характеристики Анализ

Алгоритм обратного распространения ошибки. Метод обратного распространения ошибки: математика, примеры, код

В многослойных нейронных сетях оптимальные выходные значения нейронов всех слоев, кроме последнего, как правило, неизвестны трех- или более слойный персептрон уже невозможно обучить, руководствуясь только величинами ошибок на выходах сети

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

кажущуюся простоту, требует громоздких рутинных вычислений И, наконец, третий, более приемлемый вариант - распространение сигналов ошибки от выходов нейронной сети к ее входам, в направлении, обратном прямому распространению сигналов в обычном режиме работы Этот алгоритм обучения получил название процедуры обратного распространения ошибки (error back propagation) Именно он рассматривается ниже

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

Согласно методу наименьших квадратов, минимизируемой целевой функцией ошибки нейронной сети является величина

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

Суммирование ведется по всем нейронам выходного слоя и по всем обрабатываемым сетью образам Минимизация методом градиентного спуска обеспечивает подстройку весовых коэффициентов следующим образом

где - весовой коэффициент синаптической связи, соединяющей нейрон слоя нейроном слоя - коэффициент скорости обучения,

В соответствии с правилом дифференцирования сложной функции

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

Третий множитель равен выходу нейрона предыдущего слоя

Что касается первого множителя в (1.11), он легко раскладывается следующим образом:

Здесь суммирование по выполняется среди нейронов слоя Введя новую переменную:

получим рекурсивную формулу для расчетов величин слоя из величин более старшего слоя

Для выходного слоя:

Теперь можно записать (1.10) в раскрытом виде:

Иногда для придания процессу коррекции весов некоторой инерционности, сглаживающей резкие скачки при перемещении по поверхности целевой функции, (1.17) дополняется значением изменения веса на предыдущей итерации.

где коэффициент инерционности; номер текущей итерации.

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

ШАГ 1. Подать на входы сети один из возможных образов и в режиме обычного функционирования нейронной сети, когда сигналы распространяются от входов к выходам, рассчитать значения последних. Напомним, что:

где - число нейронов в слое с учетом нейрона с постоянным выходным состоянием задающего смещение; вход нейрона у слоя

где - сигмоид,

где компонента вектора входного образа.

ШАГ 4. Скорректировать все веса в нейронной сети:

ШАГ 5. Если ошибка сети существенна, перейти на шаг 1. В противном случае - конец.

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

Из выражения (1.17) следует, что когда выходное значение стремится к нулю, эффективность обучения заметно снижается. При двоичных входных векторах в среднем половина весовых коэффициентов не будет корректироваться, поэтому область возможных значений выходов нейронов желательно сдвинуть в пределы что достигается простыми модификациями логистических функций. Например, сигмоид с экспонентой преобразуется к виду:

Рассмотрим вопрос о емкости нейронной сети, т. е. числа образов, предъявляемых на ее входы, которые она способна научиться распознавать. Для сетей с числом слоев больше двух, этот вопрос остается открытым. Для сетей с двумя слоями, детерминистская емкость сети оценивается следующим образом:

где - число подстраиваемых весов, - число нейронов в выходном слое.

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

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

Рассматриваемая нейронная сеть имеет несколько «узких мест». Во-первых, в процессе большие положительные или отрицательные значения весов могут сместить рабочую точку на сигмоидах нейронов в область насыщения. Малые величины производной от логистической функции приведут в соответствии с (1.15) и (1.16) к остановке обучения, что парализует сеть. Во-вторых, применение метода градиентного спуска не гарантирует нахождения глобального минимума целевой функции. Это тесно связано вопросом выбора скорости обучения. Приращения весов и, следовательно, скорость обучения для нахождения экстремума должны быть бесконечно малыми, однако в этом случае обучение будет

происходить неприемлемо медленно. С другой стороны, слишком большие коррекции весов могут привести к постоянной неустойчивости процесса обучения. Поэтому в качестве коэффициента скорости обучения 1] обычно выбирается число меньше 1 (например, 0,1), которое постепенно уменьшается в процессе обучения. Кроме того, для исключения случайных попаданий сети в локальные минимумы иногда, после стабилизации значений весовых коэффициентов, 7 кратковременно значительно увеличивают, чтобы начать градиентный спуск из новой точки. Если повторение этой процедуры несколько раз приведет сеть в одно и то же состояние, можно предположить, что найден глобальный минимум.

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

Дадим изложенному геометрическую интерпретацию.

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

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

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

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

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

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

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

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

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

Как же выбрать правильную степень сложности сети? Почти всегда более сложная сеть дает меньшую ошибку, но это может свидетельствовать не о хорошем качестве модели, а о переобучении сети.

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

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

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

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

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

1) Функции ошибки:

Интегральные функции ошибки по всей совокупности обучающих примеров;

Функции ошибки целых и дробных степеней

2) Процедуры определения величины шага на каждой итерации

Дихотомия;

Инерционные соотношения (см выше);

3) Процедуры определения направления шага.

С использованием матрицы производных второго порядка (метод Ньютона);

С использованием направлений на нескольких шагах (партан метод).

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

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

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

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

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

Архитектура

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

Нейроны, представляющие собой выходы сети (обозначены Y), и скрытые нейроны могут иметь смещение(как показано на изображении). Смещение, соответствующий выходу Y k обозначен w ok , скрытому элементу Z j - V oj . Эти смещения служат в качестве весов на связях, исходящих от нейронов, на выходе которых всегда появляется 1 (на рисунке 1 они показаны, но обычно явно не отображаются, подразумеваясь). Кроме того, на рисунке 1 стрелками показано перемещение информации в ходе фазы распространения данных от входов к выходам. В процессе обучения сигналы распространяются в обратном направлении.

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

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

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

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

X Входной вектор обучающих данных X = (X 1 , X 2 ,...,X i ,...,X n).
t Вектор целевых выходных значений, предоставляемых учителем t = (t 1 , t 2 ,...,t k ,...,t m)
σ k Составляющая корректировки весов связей w jk , соответствующая ошибке выходного нейрона Y k ; также, информация об ошибке нейрона Y k , которая распространяется тем нейронам скрытого слоя, которые связаны с Y k .
σ j Составляющая корректировки весов связей v ij , соответствующая распространяемой от выходного слоя к скрытому нейрону Z j информации об ошибке.
a Скорость обучения.
X i Нейрон на входе с индексом i. Для входных нейронов входной и выходной сигналы одинаковы - X i .
v oj Смещение скрытого нейрона j.
Z j Скрытый нейрон j; Суммарное значение подаваемое на вход скрытого элемента Z j обозначается Z_in j: Z_in j = v oj +∑x i *v ij
Сигнал на выходе Z j (результат применения к Z_in j активационной функции) обозначается Z j: Z j = f (Z_in j)
w ok Смещение нейрона на выходе.
Y k Нейрон на выходе под индексом k; Суммарное значение подаваемое на вход выходного элемента Y k обозначается Y_in k: Y_in k = w ok + ∑ Z j *w jk . Сигнал на выходе Y k (результат применения к Y_in k активационной функции) обозначается Y k:

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

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

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


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

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

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

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

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

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

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

Каждый скрытый нейрон (Z j , j = 1,2,...,p) суммирует взвешенные входящие сигналы: z_in j = v oj + ∑ x i *v ij и применяет активационную функцию: z j = f (z_in j) После чего посылает результат всем элементам следующего слоя (выходного).

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

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

Каждый выходной нейрон (Y k , k = 1,2,...m) получает целевое значение - то выходное значение, которое является правильным для данного входного сигнала, и вычисляет ошибку: σ k = (t k - y k)*f " (y_in k), так же вычисляет величину, на которую изменится вес связи w jk: Δw jk = a * σ k * z j . Помимо этого, вычисляет величину корректировки смещения: Δw ok = a*σ k и посылает σ k нейронам в предыдущем слое.

Каждый скрытый нейрон (z j , j = 1,2,...p) суммирует входящие ошибки (от нейронов в последующем слое) σ_in j = ∑ σ k * w jk и вычисляет величину ошибки, умножая полученное значение на производную активационной функции: σ j = σ_in j * f " (z_in j), так же вычисляет величину, на которую изменится вес связи vij: Δv ij = a * σ j * x i . Помимо этого, вычисляет величину корректировки смещения: v oj = a * σ j

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

Каждый выходной нейрон (y k , k = 1,2,...,m) изменяет веса своих связей с элементом смещения и скрытыми нейронами: w jk (new) = w jk (old) + Δw jk
Каждый скрытый нейрон (z j , j = 1,2,...p) изменяет веса своих связей с элементом смещения и выходными нейронами: v ij (new) = v ij (old) + Δv ij

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

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

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

Алгоритм обратного распространения ошибки (АОРО), являющийся обобщением дельта – правила, позволяет обучать ИНС ПР с любым количеством слоев. Можно сказать, что АОРО фактически использует разновидность градиентного спуска, перестраивая веса в направлении минимума ошибки.

При использовании АОРО предполагается, что в качестве активационной используется сигмоидная функция. Эта функция позволяет экономить вычислительные затраты, поскольку имеет простую производную:

Сигмоидная функция ограничивает значением 1 сильные сигналы и усиливает слабые сигналы.

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

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

1) Выбирается обучающая пара (X , Z* ), X подается на вход;

2) Вычисляется выходсети Z = F (Y );

3) Рассчитывается ошибка выхода E ;

4) Веса сети корректируются с целью минимизации ошибки;

Шаги 1 и 2 - это прямое распространение по сети, а 3 и 4 - обратное.

Перед обучением необходимо разбить имеющиеся пары «вход – выход» на две части: обучающие и тестовые.

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

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

1. Тестовые данные сильно отличаются от обучающих, т.е. обучающие пары охватывали не все области входного пространства.


2. Возникло явление «переобучения» (overfitting ), когда поведение НС оказывается более сложным, чем решаемая задача.

Последний случай для задачи аппроксимации функции по точкам иллюстрирует рис. 3.3, где белые кружки обозначают тестовые данные, а темные – обучающие данные.

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

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

Обратное распространение ошибки применяется к многослойным сетям, нейроны которых имеют нелинейность с непрерывной производной, например такую:

Нелинейность такого вида удобна простотой расчета производной:

Для обучения сети используется P пар векторов сигналов: входной вектор I и вектор, который должен быть получен на выходе сети D. Сеть, в простом случае, состоит из N слоев, причем каждый нейрон последующего слоя связан со всеми нейронами предыдущего слоя связями, с весами w [n].

При прямом распространении, для каждого слоя рассчитывается (и запоминается) суммарный сигнал на выходе слоя (S [n]) и сигнал на выходе нейрона. Так, сигнал на входе i-го нейрона n-го слоя:

Здесь w (i,j) - веса связей n-го слоя. Сигнал на выходе нейрона рассчитывается применением к суммарному сигналу нелинейности нейрона.

Сигнал выходного слоя x [N] считается выходным сигналом сети O.

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

Для обучения сети используется градиент функции ошибки по весам сети. Алгоритм обратного распространения предполагает расчет градиента функции ошибки "обратным распространением сигнала" ошибки. Тогда частная производная ошибки по весам связей рассчитывается по формуле:

Здесь д - невязка сети, которая для выходного слоя рассчитывается по функции ошибки:

А для скрытых слоев - по невязке предыдущего слоя:

Для случая сигмоидной нелинейности и среднего квадрата отклонения как функции ошибки:

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

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

Реализация алгоритма обратного распространения ошибки на примере аппроксимации функции

Задание: Пусть имеется таблица значений аргумента (x i ) и соответствующих значений функции (f (x i )) (эта таблица могла возникнуть при вычислениях некоторой аналитически заданной функции при проведении эксперимента по выявлению зависимости силы тока от сопротивления в электрической сети, при выявлении связи между солнечной активностью и количеством обращений в кардиологический центр, между размером дотаций фермерам и объемом производства сельхозпродукции и т.п.).

В среде Matlab необходимо построить и обучить нейронную сеть для аппроксимации таблично заданной функции, i=1, 20. Разработать программу, которая реализует нейросетевой алгоритм аппроксимации и выводит результаты аппроксимации в виде графиков.

Аппроксимация заключается в том, что, используя имеющуюся информацию по f (x), можно рассмотреть аппроксимирующую функцию z (x) близкую в некотором смысле к f (x), позволяющую выполнить над ней соответствующие операции и получить оценку погрешности такой замены.

Под аппроксимацией обычно подразумевается описание некоторой, порой не заданной явно, зависимости или совокупности представляющих ее данных с помощью другой, обычно более простой или более единообразной зависимости. Часто данные находятся в виде отдельных узловых точек, координаты которых задаются таблицей данных. Результат аппроксимации может не проходить через узловые точки. Напротив, задача интерполяции - найти данные в окрестности узловых точек. Для этого используются подходящие функции, значения которых в узловых точках совпадают с координатами этих точек .

Задача. В среде Matlab необходимо построить и обучить нейронную сеть для аппроксимации таблично заданной функции (см. рисунок 5).

Рисунок 5. Таблица значений функции В математической среде Matlab в командном окне записываем код программы создания и обучения нейронной сети.

Для решения воспользуемся функцией newff (.) - создание "классической" многослойной НС с обучением по методу обратного распространения ошибки, т.е. изменение весов синапсов происходит с учетом функции ошибки, разница между реальными и правильными ответами нейронной сети, определяемыми на выходном слое, распространяется в обратном направлении - навстречу потоку сигналов. Сеть будет иметь два скрытых слоя. В первом слое 5 нейронов, во втором - 1. Функция активации первого слоя - "tansig" (сигмоидная функция, возвращает выходные векторы со значениями в диапазоне от - 1 до 1), второго - "purelin" (линейная функция активации, возвращает выходные векторы без изменений). Будет проведено 100 эпох обучения. Обучающая функция "trainlm" - функция, тренирующая сеть (используется по умолчанию, поскольку она обеспечивает наиболее быстрое обучение, но требует много памяти) .

Код программы:

P = zeros (1, 20);

for i = 1: 20 %создание массива P (i) = i*0.1; %входные данные (аргумент) end T= ; %входные данные (значение функции) net = newff ([-1 2.09], ,{"tansig" "purelin"}); %создание нейронной сети net. trainParam. epochs = 100; %задание числа эпох обучения net=train (net,P,T); %обучение сети y = sim (net,P); %опрос обученной сети figure (1);

plot (P,T,P,y,"o"),grid; %прорисовка графика исходных данных и функции, сформированной нейронной сетью.

Результат работы нейронной сети.

Результат обучения (см. рис.2): график показывает время обучения нейронной сети и ошибку обучения. В этом примере нейронная сеть прошла все 100 эпох постепенно обучаясь и уменьшая ошибки, дошла до 10 -2,35 (0,00455531).

Рисунок 2. Результат обучения нейронной сети

График исходных данных и функции, сформированной нейронной сетью (см. рис.3): кружками обозначены исходные данные, а линия - функция, сформированная нейронной сетью. Далее по полученным точкам можно построить регрессию и получить уравнение аппроксимации (см. рисунок 8). Мы использовали кубическую регрессию, так как ее график наиболее точно проходит через полученные точки. Полученное уравнение имеет вид:

y=0.049x 3 +0.88x 2 -0.006x+2.1.

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

Рисунок 3. График исходных данных и функции, сформированной нейронной сетью


Рисунок 4. График функции аппроксимации

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

Обучение алгоритмом обратного распространения ошибки предполагает два прохода по всем слоям сети: прямого и обратного. При прямом проходе входной вектор подается на входной слой нейронной сети, после чего распространяется по сети от слоя к слою. В результате генерируется набор выходных сигналов, который и является фактической реакцией сети на данный входной образ. Во время прямого прохода все синаптические веса сети фиксированы. Во время обратного прохода все синаптические веса настраиваются в соответствии с правилом коррекции ошибок, а именно: фактический выход сети вычитается из желаемого, в результате чего формируется сигнал ошибки. Этот сигнал впоследствии распространяется по сети в направлении, обратном направлению синаптических связей. Отсюда и название – алгоритм обратного распространения ошибки . Синаптические веса настраиваются с целью максимального приближения выходного сигнала сети к желаемому.

Рассмотрим работу алгоритма подробней. Допустим необходимо обучить следующую нейронную сеть, применив алгоритм обратного распространения ошибки:

На приведенном рисунке использованы следующие условные обозначения:

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

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

Сигмоид сужает диапазон изменения так, что значение лежит между нулем и единицей. Многослойные нейронные сети обладают большей представляющей мощностью, чем однослойные, только в случае присутствия нелинейности. Сжимающая функция обеспечивает требуемую нелинейность. В действительности имеется множество функций, которые могли бы быть использованы. Для алгоритма обратного распространения ошибки требуется лишь, чтобы функция была всюду дифференцируема. Сигмоид удовлетворяет этому требованию. Его дополнительное преимущество состоит в автоматическом контроле усиления. Для слабых сигналов (т.е. когда близко к нулю) кривая вход-выход имеет сильный наклон, дающий большое усиление. Когда величина сигнала становится больше, усиление падает. Таким образом, большие сигналы воспринимаются сетью без насыщения, а слабые сигналы проходят по сети без чрезмерного ослабления.

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

Следующий:

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

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

Шаги 4 и 5 составляют «обратный проход», здесь вычисляемый сигнал ошибки распространяется обратно по сети и используется для подстройки весов.

Рассмотрим подробней 5 шаг – корректировка весов сети. Здесь следует выделить два нижеописанных случая.

Случай 1. Корректировка синаптических весов выходного слоя

Например, для модели нейронной сети на рис. 1, это будут веса имеющие следующие обозначения: и . Определимся, что индексом будем обозначать нейрон, из которого выходит синаптический вес, а – нейрон в который входит:

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

Тогда, веса выходного слоя после коррекции будут равны:

Приведем пример вычислений для синаптического веса :

Случай 2. Корректировка синаптических весов скрытого слоя

Для модели нейронной сети на рис. 1, это будут веса соответствующие слоям и . Определимся, что индексом будем обозначать нейрон из которого выходит синаптический вес, а – нейрон в который входит (обратите внимание на появление новой переменной ).