gpt4 book ai didi

machine-learning - 梯度下降与随机梯度下降算法

转载 作者:行者123 更新时间:2023-11-30 08:29:42 35 4
gpt4 key购买 nike

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

我每次都会迭代所有训练样本,在每个时期对每个此类样本执行反向传播。运行时间当然太长了。

  • 我运行的算法是否名为梯度下降

我读到,对于大型数据集,使用随机梯度下降可以显着提高运行时间。

  • 为了使用随机梯度下降,我应该做什么?我是否应该随机挑选训练样本,对每个随机挑选的样本执行反向传播,而不是我当前使用的历元?

最佳答案

我会尽力让您对这个问题有一些直觉......

最初,更新是在您(正确地)称为(批量)梯度下降中进行的。这确保了权重的每次更新都是在“正确”的方向上完成的(图1):最小化成本函数的方向。

Gradient Descent

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

enter image description here

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

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

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)

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

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

关于machine-learning - 梯度下降与随机梯度下降算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35711315/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com