如果对N个年代的M样本数据集进行神经网络训练,批GD和SGD是否给出了相同的结果?SGD是因为更好地利用硬件而更快吗?
我问这个问题是因为我发现两者(批处理GD和SGD)在数学上都给出了相同的结果,但是我读到SGD避免了局部极小值,如果SGD和批GD给出相同的结果,这怎么可能是真的!?

发布于 2020-07-17 05:01:19
它们是不一样的;批处理梯度下降平均样本1到M的梯度,这可以在第一个方程中看到,用M元素上的求和并除以M个总元素(因此是平均值)。
随机梯度下降,如第二个方程所示,通过一个随机选择的实例进行更新。
我认为这种混淆源于对1到M循环的思考。批处理梯度下降和(从1到M的循环)是每次迭代执行的,而随机梯度下降循环是在所有的历元上执行的。
因此,中间权重的更新将是不同的,并且这些结果是复合的。因此,即使这两种方法在整个培训过程中处理每个实例,仅在单个实例之后进行更新的行为必然会导致一个不同的轨迹,而不是将每一个迭代的所有梯度平均起来。
SGD可以更快,因为它只处理每个权重更新的一个实例。事实上,纯粹从硬件效率的角度来看,SGD是次优的,因为它在培训过程中固有的序列化性质。通过同时处理多个实例,可以方便地并行化批处理梯度下降并利用GPU。
因为SGD是随机的,它在代理模型开发中引起的扰动可以帮助减轻训练集中的偏差。这就是为什么SGD有时可以帮助避免局部极小值,尽管使用了相当粗糙的优化策略。
编辑以回答关于训练集偏差与局部最小值之间的关系的评论:
给出一个例子,其中模型有2个参数,定义了xy平面,并将相应的误差绘制为z分量。这定义了一个从R到R的函数映射,这个函数只是真实世界函数的一个近似,因为你不是在每个可能的训练实例上进行测试。一个有偏见的训练集很难接近现实世界的功能.因此,它的局部极小值不同于现实世界的局部极小值。当使用批处理GD时,您可能会以最近的局部最小值为目标,而不会在培训过程中真正改变目标。这是好的,如果你的训练集是相对公正的,但否则并不理想,因为你将过分适合一个糟糕的近似。SGD可以通过在每次迭代中强制目标重定向来提高泛化能力。每次迭代时,如果从M训练样本中抽取不同的函数,则可能会多次更改目标最小值。如果您的培训集是相对偏颇的,那么这可以帮助不过分适合一个糟糕的近似。如果你的训练是一个完美的近似,那么SGD就没有意义了。有些人可能会认为,如果有一个完美的近似,随机抽样有助于避免被困在启动盆地,但在这一点上,这只是运气。
https://datascience.stackexchange.com/questions/77847
复制相似问题