梯度下降权重/偏差在这里如何工作?

时间:2018-08-10 03:30:23

标签: python numpy neural-network gradient-descent

我一直在从迈克尔·尼尔森(Michael Nielsen)的http://neuralnetworksanddeeplearning.com/chap1.html学习神经网络。

在下面的部分中,更新权重和偏差

def update_mini_batch(self, mini_batch, eta):
    nabla_b = [np.zeros(b.shape) for b in self.biases]
    nabla_w = [np.zeros(w.shape) for w in self.weights]

    for x, y in mini_batch:
        delta_nabla_b, delta_nabla_w = self.backprop(x, y)

        #Zero vectors
        nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
        nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]

    self.weights = [w-(eta/len(mini_batch))*nw
                    for w, nw in zip(self.weights, nabla_w)]
    self.biases = [b-(eta/len(mini_batch))*nb
                   for b, nb in zip(self.biases, nabla_b)]



def SGD(self, training_data, epochs, mini_batch_size, eta,
        test_data=None):
    if test_data: n_test = len(test_data)
    n = len(training_data)
    for j in xrange(epochs):
        random.shuffle(training_data)
        mini_batches = [
            training_data[k:k+mini_batch_size]
            for k in xrange(0, n, mini_batch_size)]

        ####
        for mini_batch in mini_batches:
            self.update_mini_batch(mini_batch, eta)
        if test_data:
            print "Epoch {0}: {1} / {2}".format(
                j, self.evaluate(test_data), n_test)
        else:
            print "Epoch {0} complete".format(j)

有什么需要引入 nabla_b nabla_w 零向量?当它们只是被添加到dnb和dnw本身就是numpy数组时。不是0 +某物=某物。对于单个训练示例,这里零向量有什么需要?

作为测试,我删除了零向量,并单独拥有了dnb和dnw,但看不到训练中的任何显着差异。

谢谢。

1 个答案:

答案 0 :(得分:1)

是的,您说对了0 + something = something,但是在第二次迭代中,它将是

something +something_else = value

因此,这在以下代码中发生了
for x, y in mini_batch:

在这里,对于第一个minibatch nabla_wnabla_b将为0,但对于第二个及以后的迭代,它将具有一些值。

让我们考虑以下代码

nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]

在第一次迭代中,nabla_bnabla_w均为零。 但是,在此迭代中,由于nb+dnb而对它们进行了更新,因此,nabla_b和nabla_w不再仅仅是具有零的向量。因此,在第二次迭代中,nabla_b不再是零向量