Нейронная сеть — обратное распространение
подробное объяснение, основанное на простом учебном примере
Имея следующий простой обучающий набор (состоящий только из одной записи данных):
объем контролируемого процесса обучения вышеупомянутой нейронной сети состоит в том, чтобы просто сопоставить (насколько это возможно) вывод с заданной целью, регулируя веса персептронов:
Это внутренний механизм черного ящика «нейронной сети» выше:
E — функция ошибки, которая оценивает количество «успехов» вывода.
Имея все это, нам нужно рассчитать все градиенты ошибки (насколько ошибка «генерируется» каждым из весов): производные ошибки по каждому из весов (включая смещения):
Далее процесс обучения сети состоит из ряда циклов, состоящих из двух этапов:
I)"прямое распространение":
- обработать вывод (используя некоторые начальные случайные веса)
- оценить ошибку
- оценить значения градиентов
II) «обратное распространение»:
- регулировка весов по формуле:
Необходимые математические расчеты для оценки градиентов:
- Производная сигмовидной функции:
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
Ссылки: