常用优化方法总结

Posted zizi7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用优化方法总结相关的知识,希望对你有一定的参考价值。

目录


梯度下降及其变体

包含梯度下降、随机梯度下降、小批量梯度下降

  1. 梯度下降GD
    w k + 1 = w k − γ k ∇ f ( w k ) (1) w_k+1=w_k-\\gamma_k\\nabla f(w_k) \\tag1 wk+1=wkγkf(wk)(1)
    每次更新参数需要计算整个数据集
    优点:对凸问题可以保证取得全局最小,非凸问题局部极小
    缺点:计算量大,可能造成内存不足,无法在线更新模型
  2. 随机梯度下降SGD
    w k + 1 = w k − γ k ∇ f i ( w k ) (2) w_k+1=w_k-\\gamma_k\\nabla f_i(w_k) \\tag2 wk+1=wkγkfi(wk)(2)
    每次随机选择1个训练样本计算梯度
    优点:计算速度快,可用于在线模型更新;由于随机单个样本带来的噪声可以避免陷入浅的局部极小值,找到更好的最小值(退火),能获得比GD更好的效果
    缺点:噪声带来的收敛过程波动较大
  3. 小批量梯度下降SGD
    w k + 1 = w k − γ k 1 B i ∑ j ∈ B i ∇ f j ( w k ) (3) w_k+1=w_k-\\gamma_k\\frac1B_i\\sum_j\\in B_i\\nabla f_j(w_k) \\tag3 wk+1=wkγkBi1jBifj(wk)(3)
    每次随机选择一组训练样本计算梯度
    优点:是随机梯度的改进,可以减少更新中的噪声
  • 以上3种方法中小批量梯度下降的效果最好,因此SGD一般指的就是小批量
  • 但SGD学习率 γ \\gamma γ的选择比较困难,另外SGD容易收敛到局部最优,并且可能被困在鞍点
  • 鞍点:一阶导为0,从该点出发一个方向是极大值点,另一个方向是极小值点(非极值的驻点)。其充要条件是,函数在该点的Hessian矩阵为不定的
  • 由于鞍点处会有一个平稳段,导致函数的导数长时间接近0,使得训练变缓慢

基于梯度下降的优化方法

动量

p k + 1 = β k p k + ∇ f i ( w k ) w k + 1 = w k − γ k p k + 1 (4) \\begincasesp_k+1=\\beta_kp_k+\\nabla f_i(w_k)\\\\w_k+1=w_k-\\gamma_kp_k+1\\endcases \\tag4 pk+1=βkpk+fi(wk)wk+1=wkγkpk+1(4)

  • ∇ f i ( w k ) \\nabla f_i(w_k) fi(wk)表示第 i i i个样本的损失函数在第 k k k次迭代的权重下的梯度
  • 上式中 p p p称为SGD的动量,其实质就是梯度的平均值,起到噪声平滑的作用
  • 动量可以减轻SGD的震荡,起到加速的作用,其中 β \\beta β称为阻尼因子,一般取0.9或0.99

Nesterov

p k + 1 = β k p k + ∇ f i ( w k − β k p k ) w k + 1 = w k − γ k p k + 1 (5) \\begincasesp_k+1=\\beta_kp_k+\\nabla f_i(w_k-\\beta_kp_k)\\\\w_k+1=w_k-\\gamma_kp_k+1\\endcases \\tag5 pk+1=βkpk+fi(wkβkpk)wk+1=wkγkpk+1(5)

  • Nesterov是动量方法的改进,比后者收敛速度更快
  • Nesterov与动量的不同是,梯度计算不是根据当前位置,而是根据本来计划要走的一步到达的位置计算

Adagrad

p k + 1 = γ ∑ j = 1 k + 1 ∇ f i 2 ( w j ) ∇ f i ( w k ) w k + 1 = w k − p k + 1 (6) \\begincasesp_k+1=\\frac\\gamma\\sqrt\\sum_j=1^k+1\\nabla f_i^2(w_j)\\nabla f_i(w_k)\\\\w_k+1=w_k-p_k+1\\endcases \\tag6 pk+1=j=1k+1fi2(wj) γfi(wk)wk+1=wkpk+1以上是关于常用优化方法总结的主要内容,如果未能解决你的问题,请参考以下文章

pytorch常用优化器总结(包括warmup介绍及代码实现)

pytorch常用优化器总结(包括warmup介绍及代码实现)

深度学习优化算法总结

深度学习的损失函数优化方法

优化算法

零基础神经网络优化之动量梯度下降