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

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

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

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

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

Пример двухслойной нейронной сети прямого распространения

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

  • каждому слою нейронной сети соответствует своя буква, например: входному слою соответствует буква A, а выходному – C;
  • все нейроны каждого слоя пронумерованы арабскими цифрами;
  • w_{A1-B1} – синаптический вес между нейронами A1 и B1;
  • OUT_{A1} – выход нейрона A1.

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

OUT~=~1/{1~+~exp(- alpha Y)}

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

Функция активации. Логистическая функция

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

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

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

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

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

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

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

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

Например, для модели нейронной сети на рис. 1, это будут веса имеющие следующие обозначения: w_{B1-C1} и w_{B2-C1}. Определимся, что индексом p будем обозначать нейрон, из которого выходит синаптический вес, а q – нейрон в который входит:

Корректировка синаптических весов выходного слоя

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

delta_{q}~=~OUT_{q}(1~-~OUT_{q})(T_{q}~-~OUT_{q})

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

w_{p-q}(i+1)~=~w_{p-q}(i)~+~eta delta_{q}OUT_{p}

где:

  • i – номер текущей итерации обучения;
  • w_{p-q} – величина синаптического веса, соединяющего нейрон p с нейроном q;
  • eta (греческая буква «эта») – коэффициент «скорости обучения», позволяет управлять средней величиной изменения весов;
  • OUT_{p} – выход нейрона p.

Приведем пример вычислений для синаптического веса w_{B1-C1} :

delta_{C1}~=~OUT_{C1}(1~-~OUT_{C1})(T_{1}~-~OUT_{C1})
w_{B1-C1}(i+1)~=~w_{B1-C1}(i)~+~eta delta_{C1}OUT_{B1}

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

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

Корректировка синаптических весов скрытых слоев

Введем величину delta, которая равна:

delta_{q}~=~OUT_{q}(1~-~OUT_{q})sum{k=1}{M}{delta_{k}w_{q-k}}

где:

  • sum{k=1}{N}{} – сумма от 1 по N.

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

w_{p-q}(i+1)~=~w_{p-q}(i)~+~eta delta_{q}OUT_{p}

Приведем пример вычислений для синаптического веса w_{A1-B1}:

delta_{B1}~=~OUT_{B1}(1~-~OUT_{B1})(delta_{C1}w_{B1-C1}~+~...~+~delta_{CN}w_{B1-CN}
w_{A1-B1}(i+1)~=~w_{A1-B1}(i)~+~eta delta_{B1}OUT_{A1}

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

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

Прокрутить вверх