在神经网络中更新权重

时间:2019-07-13 01:17:56

标签: python machine-learning neural-network

我一直在尝试从头开始对神经网络进行编码,并观看了一些视频以了解其实现方式。

因此,我遇到了this guide,它在Python中建立了一个简单的神经网络。

X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in xrange(60000):
    l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    l2_delta = (y - l2)*(l2*(1-l2))
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    syn1 += l1.T.dot(l2_delta)
    syn0 += X.T.dot(l1_delta)

我发现最后两行令人困惑,应该不是syn1 -= l1.T.dot(l2_delta)syn0 -= X.T.dot(l1_delta)

我认为在梯度下降中您可以减去斜率,但是好像是在这里添加了斜率。这个梯度上升了吗?

有人可以解释一下最后两行的工作方式吗?

1 个答案:

答案 0 :(得分:1)

您是正确的:您减去梯度下降的斜率。

这正是该程序的作用,减去斜率。 l1.T.dot(l2_delta)X.T.dot(l1_delta)是负斜率,这就是为什么此代码的作者使用+=而不是-=的原因。