梯度下降与随机梯度下降算法

kuc*_*h11 4 machine-learning computer-vision neural-network gradient-descent

我尝试在MNIST手写数字数据集上训练前馈神经网络(包括60K训练样本).

我每次迭代所有训练样本,在每个时期对每个这样的样本进行反向传播.运行时当然太长了.

  • 我运行的算法名为Gradient Descent吗?

我读到,对于大型数据集,使用Stochastic Gradient Descent可以显着提高运行时间.

  • 我应该怎么做才能使用随机梯度下降?我是否应该随机选择训练样本,对每个随机挑选的样本进行反向传播,而不是我目前使用的时期?

Dio*_*nto 12

我会试着给你一些关于这个问题的直觉......

最初,您(正确)调用(批量)渐变下降的内容进行了更新.这确保权重中的每次更新都在"正确"方向上完成(图1):最小化成本函数的方向.

梯度下降

随着数据集大小的增长以及每个步骤中更复杂的计算,随机梯度下降在这些情况下成为首选.这里,在处理每个样本时完成权重的更新,因此,后续计算已经使用"改进的"权重.尽管如此,这个原因导致它在最小化误差函数方面产生一些误导(图2).

在此输入图像描述

因此,在许多情况下,最好使用小批量梯度下降,结合两者的优点:每次更新权重都是使用一小批数据完成的.这样,与随机更新相比,更新的方向在某种程度上得到了纠正,但是比(原始)梯度下降的情况更频繁地更新.

[更新]根据要求,我在下面给出了二进制分类中批量梯度下降的伪代码:

error = 0

for sample in data:
    prediction = neural_network.predict(sample)
    sample_error = evaluate_error(prediction, sample["label"]) # may be as simple as 
                                                # module(prediction - sample["label"])
    error += sample_error

neural_network.backpropagate_and_update(error)
Run Code Online (Sandbox Code Playgroud)

(在多类标记的情况下,error表示每个标签的错误数组.)

此代码在给定次数的迭代中运行,或者在错误高于阈值时运行.对于随机梯度下降,在for循环内调用neural_network.backpropagate_and_update(),并将样本错误作为参数.

  • 这是正确的!您计算那个小批量的误差,然后使用该误差运行反向传播(就像您在传统的批量梯度下降中所做的那样)。正是这个事实(你可能认为它是一个平均方向)使得收敛比随机梯度下降更平滑。 (2认同)
  • 你如何计算整批的误差?你能添加一些伪代码吗?它可能对很多人有帮助 (2认同)
  • 在运行反向传播时,隐藏层中神经元的输出对于计算它们的错误至关重要。我是否应该聚合(即求和或平均)每个隐藏神经元的输出并使用此聚合值来计算误差,就像您为输出层中的神经元演示的那样? (2认同)

Som*_*ing 4

您描述的新场景(对每个随机选取的样本执行反向传播)是随机梯度下降的一种常见“风格”,如下所述:https ://www.quora.com/Whats-the-difference- Between-gradient-下降和随机梯度下降

根据本文档,3 种最常见的口味是(您的口味是 C):

A)

randomly shuffle samples in the training set
for one or more epochs, or until approx. cost minimum is reached:
    for training sample i:
        compute gradients and perform weight updates
Run Code Online (Sandbox Code Playgroud)

二)

for one or more epochs, or until approx. cost minimum is reached:
    randomly shuffle samples in the training set
    for training sample i:
        compute gradients and perform weight updates
Run Code Online (Sandbox Code Playgroud)

C)

for iterations t, or until approx. cost minimum is reached:
    draw random sample from the training set
    compute gradients and perform weight updates
Run Code Online (Sandbox Code Playgroud)