在一般反向传播中更新权重
Updating weights in general back-propagation
我正在从头开始构建一个 2 层的密集神经网络。我对更新输入层和第一个隐藏层之间的权重感到困惑。
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 的正确方法。谁能帮帮我?
编辑:神经网络的结构是:
几乎:您计算 delta_w1
的方法原则上是正确的,但是您想要达到最小值,因此您在 delta_w1
和 [ 的公式中遗漏了一个负号=12=]。使用当前的实现,您不会优化权重,而是进入 'wrong direction'.
您可能还想看看以下 link:https://stats.stackexchange.com/questions/5363/backpropagation-algorithm
我正在从头开始构建一个 2 层的密集神经网络。我对更新输入层和第一个隐藏层之间的权重感到困惑。
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 的正确方法。谁能帮帮我?
编辑:神经网络的结构是:
几乎:您计算 delta_w1
的方法原则上是正确的,但是您想要达到最小值,因此您在 delta_w1
和 [ 的公式中遗漏了一个负号=12=]。使用当前的实现,您不会优化权重,而是进入 'wrong direction'.
您可能还想看看以下 link:https://stats.stackexchange.com/questions/5363/backpropagation-algorithm