常用优化方法总结
Posted zizi7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用优化方法总结相关的知识,希望对你有一定的参考价值。
目录
梯度下降及其变体
包含梯度下降、随机梯度下降、小批量梯度下降
- 梯度下降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−γk∇f(wk)(1)
每次更新参数需要计算整个数据集
优点:对凸问题可以保证取得全局最小,非凸问题局部极小
缺点:计算量大,可能造成内存不足,无法在线更新模型 - 随机梯度下降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−γk∇fi(wk)(2)
每次随机选择1个训练样本计算梯度
优点:计算速度快,可用于在线模型更新;由于随机单个样本带来的噪声可以避免陷入浅的局部极小值,找到更好的最小值(退火),能获得比GD更好的效果
缺点:噪声带来的收敛过程波动较大 - 小批量梯度下降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−γkBi1j∈Bi∑∇fj(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+1∇fi2(wj)γ∇fi(wk)wk+1=wk−pk+1
pytorch常用优化器总结(包括warmup介绍及代码实现)