简单概述梯度下降
它的目标是通过最小化一个损失函数来调整模型的参数,以使模型能够更好地拟合训练数据。
在梯度下降中,我们首先需要选择一个初始的模型参数值。然后,我们计算损失函数关于这些参数的梯度,即损失函数对每个参数的变化率。梯度告诉我们在当前参数值下,如果稍微改变参数,损失函数会如何变化。
接下来,我们沿着梯度的反方向更新模型参数。也就是说,我们将参数朝着能够减少损失函数的方向移动一小步。这个步长称为学习率,它决定了我们每次更新参数时应该走多远。
我们重复这个过程,不断计算梯度、更新参数,直到达到停止条件,比如达到预定的迭代次数或者损失函数已经足够小。
梯度的下降+Momentum
梯度下降算法结合动量的优化方法可以帮助解决以下问题:
-
解决收敛速度慢的问题:传统的梯度下降可能会在接近最优解时收敛速度变慢。
-
克服局部极小值问题:梯度下降容易被困在局部极小值中,无法找到全局最优解。
-
平滑参数更新:参数在训练过程中的剧烈波动,提高模型的稳定性。
下面是梯度下降与动量的算法流程:
梯度小的方向自动累加,震荡方向梯度相互累加
Adagrad
原理:震荡的方向步长很小,梯度小的方向的步长很大(本质就是自适应调节学习率)
RMSProp
在Adagrad中可能会出现问题:随着rk的增加,步长会逐渐减少,这个会导致rk极速增大,以至于学习率的减少而无法趋近于目标点。
使用一个衰减系数来控制rk的增加问题,随着循环的增加,由于衰减系数的作用导致历史信息的作用逐渐减少,使得学习一直处于一个良好的状态
Adam
避免冷启动,修正使得初始启动加快