我能够从批量梯度下降(批量大小 37000)中获得相当好的结果,但是当我尝试小批量梯度下降时,我得到的结果非常差(即使使用 Adam 和 Dropout)。
在批量 gd 中,我能够获得 100% 的训练率和 97% 的 dev/cv 准确度。 而在大小为 128 的小批量中,我的准确率都只有 88% 左右。
火车损失似乎围绕 1.6 旋转,并且不会随着任何进一步的迭代而减少,但当我增加批量大小时会慢慢减少(从而提高准确性)。最终我达到最大准确度的批量大小为 37000。
我尝试调整 alpha 但仍然具有相同的准确性。
我正在训练 mnist 数字数据集。
可能是什么原因?请帮忙
我找到了解决办法
我用于批量 gd 的 lmbda 值(即 10)对于小批量 gd 来说似乎太大了。 通过将其减少到 0.1,我解决了这个问题。
批量梯度下降(BGD)使用整个数据集的平均值,因此每个样本不如 MBGD 和 SGD 那么突出(不太强调)。因此,收敛比 MBGD 和 SGD 更稳定(波动更小),并且比 MBGD 和 SGD 的噪声(噪声数据)更强,导致比 MBGD 和 SGD 更少的超调,并创建比 MBGD 和 SGD 更准确的模型,但正如我之前所说,BGD 比 MBGD 和 SGD 更不容易逃脱局部最小值或鞍点,因为收敛比 MBGD 和 SGD 更稳定(波动更小)。
小批量梯度下降(MBGD)使用从整个数据集中分割出来的每个小批量的平均值,因此每个样本比 BDG 更突出(更强调)。 *将整个数据集分成更小的批次可以使每个样本越来越突出(越来越强调)。因此,收敛比 BGD 更不稳定(波动更大),并且噪声(噪声数据)也比 BGD 弱,比 BGD 更容易导致过冲,并且创建的模型比 BGD 不太准确,但 MBGD 更容易逃脱局部极小值或鞍点点比 BGD 因为收敛比 BGD 更不稳定(波动更大),正如我之前所说。
随机梯度下降(SGD)使用整个数据集的每个样本逐个样本而不是平均值,因此每个样本比MBGD更突出(更强调)。因此,收敛性比 MBGD 更不稳定(波动更大),噪声(噪声数据)也比 MBGD 弱,比 MBGD 更容易导致过冲,并且创建的模型比 MBGD 不太准确,但 SGD 更容易逃脱局部极小值或鞍点点比 MBGD 因为收敛比 MBGD 更不稳定(波动更大),正如我之前所说。
此图片来自statusneo.com。