优化器,sgd,adam等
https://zhuanlan.zhihu.com/p/32230623 首先定义:待优化参数: ,目标函数: ,初始学习率 。 而后,开始进行迭代优化。在每个epoch : 计算目标函数关于当前参数的梯度: 根据历史梯度计算一阶动量和二阶动量: , 计算当前时刻的下降梯度: 根据下降梯度进行更新: sgd: 先来看SGD。SGD没有动量的概念,也就是说: 代入步骤3,可以看到下降梯度就是最简单的 SGD缺点:下降速度慢,而且可能会在沟壑的两边持续震荡,停留在一个局部最优点。 SGD with Momentum sgd引入一阶动量,为了抑制SGD的震荡,SGDM认为梯度下降过程可以加入惯性。下坡的时候,如果发现是陡坡,那就利用惯性跑的快一些 t时刻的下降方向,不仅由当前点的梯度方向决定,而且由此前累积的下降方向决定 0.9 AdaGrad 怎么样去度量历史更新频率呢?那就是二阶动量——该维度上,迄今为止所有梯度值的平方和: 我们再回顾一下步骤3中的下降梯度: 可以看出,此时实质上的学习率由 变成了 ,这也是为什么叫自适应学习率 这一方法在稀疏数据场景下表现非常好。但也存在一些问题:因为 是单调递增的,会使得学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。 AdaDelta / RMSProp 由于AdaGrad单调递减的学习率变化过于激进