Нейронная сеть — обратное распространение

подробное объяснение, основанное на простом учебном примере

Имея следующий простой обучающий набор (состоящий только из одной записи данных):

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

Это внутренний механизм черного ящика «нейронной сети» выше:

E — функция ошибки, которая оценивает количество «успехов» вывода.

Имея все это, нам нужно рассчитать все градиенты ошибки (насколько ошибка «генерируется» каждым из весов): производные ошибки по каждому из весов (включая смещения):

Далее процесс обучения сети состоит из ряда циклов, состоящих из двух этапов:

I)"прямое распространение":

  • обработать вывод (используя некоторые начальные случайные веса)
  • оценить ошибку
  • оценить значения градиентов

II) «обратное распространение»:

  • регулировка весов по формуле:

Необходимые математические расчеты для оценки градиентов:

  1. Производная сигмовидной функции:

2. Правило цепочки:

3. Частичное дифференцирование: за исключением переменной, по которой мы дифференцируем, все остальные переменные выражения считаются константами, поэтому их производные равны 0:

Все градиенты ошибок будут:

Код Python для приведенных выше вычислений доступен в виде репозитория github.

Начиная с этого начального состояния:

#веса
w1 = 1; w2 = 1; w3 = 1; ш4 = 1; ш5 = 1; ш6 = 1; ш7 = 1; ш8 = 1; ш9 = 1; w10= 1;

#bias
b1 = 1; б2 = 1;

#input
x1 = 1; х2 = 20; х3 = 50;

#target
t1 = 0,1; t2 = 0,8;

После 10000 итераций конечное состояние будет:
Целью: 0,1 0,8
Выходы: 0.10826251757824877 0.7974962884590129
Последний вес: 1.0 1.0 1.0 1.0 1.0 1.0 -0.7120776441249524 1.027600776441249524156441254409115

Ссылки: