【问题标题】:Updating weight in previous layers in Backpropagation在反向传播中更新前一层的权重
【发布时间】:2020-08-24 05:42:03
【问题描述】:

我正在尝试创建一个简单的神经网络,并坚持在两层中更新第一层的权重。我想我对 w2 所做的第一次更新是正确的,就像我从反向传播算法中学到的一样。我暂时不包括偏见。但是我们如何更新第一层的权重是我所困的地方。

import numpy as np
np.random.seed(10)

def sigmoid(x):
    return 1.0/(1+ np.exp(-x))

def sigmoid_derivative(x):
    return x * (1.0 - x)

def cost_function(output, y):
    return (output - y) ** 2

x = 2
y = 4

w1 = np.random.rand()
w2 = np.random.rand()

h = sigmoid(w1 * x)
o = sigmoid(h * w2)

cost_function_output = cost_function(o, y)

prev_w2 = w2

w2 -= 0.5 * 2 * cost_function_output * h * sigmoid_derivative(o) # 0.5 being learning rate

w1 -= 0 # What do you update this to?

print(cost_function_output)

【问题讨论】:

    标签: python machine-learning neural-network backpropagation


    【解决方案1】:

    我无法评论你的问题,所以写在这里。 首先,您的 sigmoid_derivative 函数是错误的。 sigmoid(x*y) w.r.t x is = sigmoid(x*y)*(1-sigmoid(x*y))*y的导数。

    编辑:(删除不必要的文字)

    我们需要 dW1 和 dW2(它们分别是 dJ/dW1dJ/dW(偏导数)。

    J = (o - y)^2 因此dJ/do = 2*(o - y)

    现在,dW2

    dJ/dW2 = dJ/do * do/dW2 (chain rule)
    dJ/dW2 = (2*(o - y)) * (o*(1 - o)*h)
    dW2 (equals above equation)
    W2 -= learning_rate*dW2
    

    现在,对于 dW1

    dJ/dh = dJ/do * do/dh = (2*(o - y)) * (o*(1 - o)*W2  
    dJ/dW1 = dJ/dh * dh/dW1 = ((2*(o - y)) * (o*(1 - o)*W2)) * (h*(1- h)*x)  
    dW1 (equals above equation)
    W1 -= learning_rate*dW2
    

    PS:尝试制作计算图,找到导数变得容易得多。 (如果你不知道,请在线阅读)

    【讨论】:

    • 我刚刚更新了代码,我了解了链式法则,并且能够计算出最后的权重,正如您在代码中看到的那样。我被困在 w2 更新后 w1 如何更新。
    • 谢谢,我会尽量理解下面的值。
    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 2016-04-14
    • 1970-01-01
    • 2015-06-11
    • 2017-12-10
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多