Обновление весов в общем обратном распространении - PullRequest
0 голосов
/ 21 апреля 2020

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

z1 = w1 @ inp + b1         # inp is the input vector
z1_act = activation(z1)
z2 = w2 @ z1_act + b2
z2_act = activation(z2)

gradient2 = 0.5 * ((out - z2_act) ** 2) * activation_deriv(z2)   # out is the vector containing actual output
gradient1 = (w2.T @ gradient2) * activation_deriv(z1)

delta_w2 = learning_rate * gradient2 * z1_act
delta_w1 = learning_rate * gradient1

w2 = w2 + delta_w2
w1 = w1 + delta_w1

Код работает, так как фигуры правильные. Но я не уверен, что это правильный способ вычисления delta_w1. Кто-нибудь может мне помочь?

Редактировать: Структура нейронной сети:

enter image description here

1 Ответ

1 голос
/ 21 апреля 2020

Почти: Ваш способ вычисления delta_w1 в принципе верен, однако вы хотите go к минимуму, поэтому вы пропускаете отрицательный знак в своей формуле для delta_w1 и delta_w2. В текущей реализации вы бы не оптимизировали веса, а вместо этого go в «неправильном направлении».

Возможно, вы захотите взглянуть и на следующую ссылку: https://stats.stackexchange.com/questions/5363/backpropagation-algorithm

...