Метод обратного распространения ошибки для нейронных сетей. Практические рекомендации.

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

Схема простейшей нейронной сети представлена на рисунке 1. Как вы видите у сети есть входной слой, куда поступают данные x1, x2, x3, один скрытый слой, и выходной слой. Входной слой содержит четыре нейрона, один из которых называется нейроном смещения. Нейрон смещения содержит всегда одно и тоже значение, например, единицу и предназначен для подачи постоянного смещения на все последующие нейроны с которым он связан, его можно отключить, задав на нем значение 0. Далее идет скрытый слой, состоящий из трех нейронов, опять же один из которых нейрон смещения. Заметьте, что он связан только с последующим выходным слоем, с входного слоя связи на него не поступают, так как он не изменяет своего состояния. Результат работы сети вычисляется на выходном слое, который содержит два нейрона.

Рисунок 1 — Схема сети

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

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

Коэффициенты связи входного и скрытого слоев можно обозначить как wij, а матрицу из этих коэффициентов назовем W. Таким образом w01 определяет связь нейрона смещения входного слоя с первым нейроном скрытого слоя, а w32 задает связь третьего нейрона входного слоя со вторым нейроном срытого слоя.

Коэффициенты связи скрытого и выходного слоев можно обозначить как ϵjk, а матрицу из этих коэффициентов назовем E большое.

Значения входного слоя xi можно представить вектором X.

Значения нейронов скрытого слоя обозначим как “hj”, они составляют вектор H.

А выходные значения Ok вектором O .

Обработка информации идет последовательно, сначала вычисляются значения скрытого слоя hj, затем значения выходного слоя ok.

Формула для вычисления значений скрытого слоя обозначена номером (1).

  

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

В нашем примере функцией активации служит логистическая функция на основе экспоненты.

Комбинированный ввод обозначен через netj.

Для примера распишем вычисление значения нейрона “h1”.

Смещение перемножается с весом w0,1, затем x1 перемножается w1,1и так для каждого входа, затем результат суммируется и подается на функцию активации.

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

 

Здесь веса представлены в виде элементов массива W с индексами в квадратных скобках.

В шаблоне используются циклы for на языке программирования Паскаль.

Далее разберем порядок вычисления значений нейронов выходного слоя.

По аналогии с предыдущим слоем составлена формула (2) для вычисления выходных значений,. Комбинированный ввод представляет собой сумму произведений значений hj промежуточного слоя на значения весов ϵjk. Результат подается на функцию активации.

Для примера приведена формула для первого элемента o1.

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

Приведенные вычисления называются прямым ходом и позволяют определить выходные значения сети при поступлении входных данных.

Очевидно, что для правильной работы сети необходимо подобрать весовые коэффициенты матриц W и E.

Для подбора этих коэффициентов существует метод обратного распространения ошибки.

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

Рисунок 2 – схема нейронной сети с обозначением вычисляемых ошибок.

Далее перейдем к конкретному алгоритму действий.

Перед обучением необходимо задать случайным образом все веса, например, в пределах от -0.5 до 0.5. Примеры случайного распределения весов матриц W и E приведены на  рисунке 3.

Рисунок 3 – Примеры случайного распределения весов

Предположим мы подали на вход обучающий вектор X и на выходе получили значение вектора O

При этом желаемое – целевое значение на выходе должно быть равно вектору T.

Для вычисления ошибки для каждого выходного нейрона дельта 1 и дельта 2.

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

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

Еще раз отметим, что эта формула справедлива только для логистической функции активации, в общем случае нужно использовать формулу (3).

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

Далее найдем ошибки нейронов скрытого слоя, обозначим их тетта 1 и тетта 2. Ошибка для нейрона смещения не вычисляется.

Общая формула для вычисления ошибок скрытого слоя приведена под номером (5).

После преобразования для случая производной логистической функции активации можно получить формулу (6). 

Таким образом, ошибка нейрона скрытого слоя является комбинацией ошибок всех нейронов, на которые он воздействует. Чем больше связь ϵjk тем в большей степени ошибка выходного слоя dk (дельта) влияет на ошибку нейрона скрытого слоя. Таким образом, происходит обратное распространение ошибки с выхода сети на ее скрытые слои.

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

В случае если в сети существуют несколько скрытых слоев, то используются аналогичные формулы , где вместо ошибки выходного слоя d (дельта) подставляются ошибки последующего скрытого слоя q’ (тетта штрих).

Заключительным этапом является корректировка весов массивов W и E

Изменения весов рассчитываются по следующим формулам под номерами (9 и 10). Здесь изменение веса между двумя нейронами пропорционально значению первого нейрона помноженного на ошибку второго нейрона. Коэффициент µ (мю) называется нормой обучения и определяет скорость обучения. Его значение на практике обычно лежит в диапазоне 0.1-0.4

В итоге, блок-схема алгоритма тренировки сети методом обратного распространения ошибки выглядит так

Загружается массив тренировочных векторов Xn, с числом элементов N

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

На этом все, Спасибо за внимание! 🙂

 327 total views,  8 views today