
AdaGrad 确实有可能在还没到达损失函数的最小值时就停下来。这主要是因为 AdaGrad 的学习率会随着迭代次数增加而逐渐减小,甚至变得非常小,导致后期参数更新非常缓慢,无法有效地继续向最小值靠近。
原因是 AdaGrad 会对每个参数的梯度进行累积计算,公式中的累积项 Gt 会随着训练的进行不断增大,导致学习率 $\frac{\eta}{\sqrt{G_t} + \epsilon}$变得越来越小。因此,虽然一开始能快速下降,但当学习率过小的时候,参数更新速度会变得非常慢,甚至停滞。
为了解决这个问题,通常会使用一些 AdaGrad 的改进版本,例如:
