优化器学习笔记

阅读: 评论:0

优化器学习笔记

优化器学习笔记

目录Contents

    • Optimizer
    • 1. 前言(Introduction)
    • 2. 优化器(Optimizer)
      • 2.1 梯度下降(Gradient Descent,GD)
      • 2.2 批量梯度下降(Batch Gradient Descent,BGD)
      • 2.3 随机梯度下降(Stochastic Gradient Descent, SGD)
      • 2.4 小批量梯度下降(Mini-Batch Stocha Gradient Descent)
      • 2.5 动量梯度下降(SGD with Momentum, SGDM)
      • 2.6 Nesterov Accelerated Gradient, NAG
      • 2.7 Adagrad
      • 2.8 RMSProp
      • 2.9 Adaptive Moment Estimation, Adam
      • 2.10 AMSGrad
    • 3.一些帮助优化的策略(Some Tips)
    • 4.选择优化器的策略(Another Tips)
    • 5.总结(Conclusion)
    • 6.参考资料(Reference)
    • 版权声明

Optimizer

本文是笔者对机器学习中碰到的优化器的一个总结,主要参考了网上的一些资料与李宏毅老师的视频。本文仅代表了笔者对于常用的几款优化器的浅薄认识,如有错误,欢迎指出,共同进步。

1. 前言(Introduction)

因为现在可以使用的优化器比较多,所以笔者特地写了一份关于优化器的一个总结。优化器(Optimizer)用于机器学习中帮助寻找参数 θ theta θ的解,使得损失函数(Loss Function) J ( θ ) J(theta) J(θ)达到最低值的模块。本文将对一些常见的优化器算法进行总结与归纳。(图片来自网络)

2. 优化器(Optimizer)

2.1 梯度下降(Gradient Descent,GD)

梯度下降是最基本的一种优化器,其它改进的优化器都是以此为基础建立的。梯度即是函数在参数 θ theta θ处的偏导数,并且该处的梯度是函数下降最快的方向。
θ t + 1 = θ t − l r ∇ θ t J ( θ t ) (1) {theta_{t+1} = theta_t - l_r nabla_{theta_t} J(theta_t)} tag1 θt+1​=θt​−lr​∇θt​​J(θt​)(1)其中 θ theta θ为需要优化的参数, θ t theta_t θt​表示迭代 t t t次后的值, l r l_r lr​为学习步长,这在不同的优化器中取值不同(某些优化器的学习步长是固定值,如SGD;某些优化器的学习步长则是变化的,如Adam), J ( θ ) J(theta) J(θ)为损失函数或代价函数。后面的优化器都是基于GD的变化。

2.2 批量梯度下降(Batch Gradient Descent,BGD)

假设训练样本的总数为 N N N,样本为 ( x 1 , y 1 ) , … , ( x N , y N ) {(x^1,y^1 ),…,(x^N,y^N)} (x1,y1),…,(xN,yN),第 i i i个样本 ( x i , y i ) (x^i,y^i ) (xi,yi)在 θ t θ_t θt​处的梯度为 ∇ θ t J i ( θ t ; x i , y i ) {nabla}_{theta_t}J_i (theta_t;x^i,y^i ) ∇θt​​Ji​(θt​;xi,yi),则有:
θ t + 1 = θ t − l r 1 N ∑ i = 1 N ∇ θ t J i ( θ t ; x i , y i ) (2) {theta_{t+1} = theta_t - l_r frac{1}{N} sum_{i=1}^N{{nabla}_{theta_t}J_i (theta_t;x^i,y^i )}} tag2 θt+1​=θt​−lr​N1​i=1∑N​∇θt​​Ji​(θt​;xi,yi)(2)即BGD中每次训练都使用了所有的样本,这样有一个好处就是一定能够达到训练样本所在特征空间上的最小值,即能够到达一个全局最小的值,但是这样的优化器收敛的速度也非常慢。同时,这也会引起过拟合(Overfitting)的问题。

2.3 随机梯度下降(Stochastic Gradient Descent, SGD)

与批量梯度下降法不同,随机梯度下降每次只需要计算一个样本的梯度:
θ t + 1 = θ t − l r ∇ θ t J i ( θ t ; x i , y i ) (3) {theta_{t+1} = theta_t - l_r {nabla}_{theta_t}J_i (theta_t;x^i,y^i )} tag3 θt+1​=θt​−lr​∇θt​​Ji​(θt​;xi,yi)(3)与(2)不同,虽然SGD的训练速度较快,但是很容易陷入局部最优值,并且不同样本之间梯度下降的波动较大,所以也更容易发生震荡。

2.4 小批量梯度下降(Mini-Batch Stocha Gradient Descent)

小批量梯度下降即是2.2与2.3的一个组合优化器。也是较为常用的一种优化器,因为其每次训练只取大小为 m ( m < N ) m(m<N) m(m<N)的样本进行训练:
θ t + 1 = θ t − l r 1 m ∑ i = 1 x + m − 1 ∇ θ t J i ( θ t ; x i , y i ) (4) {theta_{t+1} = theta_t - l_r frac{1}{m} sum_{i=1}^{x+m-1}{{nabla}_{theta_t}J_i (theta_t;x^i,y^i )}} tag4 θt+1​=θt​−lr​m1​i=1∑x+m−1​∇θt​​Ji​(θt​;xi,yi)(4)注:每次训练一个样本的叫On-line,而一次训练多个样本的叫Off-line。

2.5 动量梯度下降(SGD with Momentum, SGDM)


计算当前时刻的梯度,并保留上一次梯度下降的方向,两者相加作为这一次的梯度方向:
m t + 1 = α m t + l r ∇ θ t J i ( θ t ; x i , y i ) (5) {m_{t+1} = alpha m_t + l_r {nabla}_{theta_t}J_i (theta_t;x^i,y^i )} tag5 mt+1​=αmt​+lr​∇θt​​Ji​(θt​;xi,yi)(5) θ t + 1 = θ t − m t + 1 (6) {theta_{t+1} = theta_t - m_{t+1}} tag6 θt+1​=θt​−mt+1​(6)其中 m t m_t mt​表示第 t t t时刻的参数更新的反方向, α alpha α为上一时刻参数更新的影响权重。

2.6 Nesterov Accelerated Gradient, NAG

与SGDM保留之前的信息不同,NAG使用的信息是预测下一步的梯度。即:
θ t + 1 = θ t − m t + 1 (7) {theta_{t+1} = theta_t - m_{t+1}} tag7 θt+1​=θt​−mt+1​(7) m t + 1 = λ m t + l r ∇ θ t J i ( θ t − λ m t ; x i , y i ) (8) {m_{t+1} = lambda m_t + l_r {nabla}_{theta_t}J_i (theta_t - lambda m_t;x^i,y^i )} tag8 mt+1​=λmt​+lr​∇θt​​Ji​(θt​−λmt​;xi,yi)(8)若令 θ t ′ = θ t − λ m t {theta_t^{'} = theta_t - lambda m_t} θt′​=θt​−λmt​,则有:
θ t + 1 ′ = θ t + 1 − λ m t + 1 = θ t − m t + 1 − λ m t + 1 {theta_{t+1}^{'} = theta_{t+1} - lambda m_{t+1} =theta_t - m_{t+1} - lambda m_{t+1}} θt+1′​=θt+1​−λmt+1​=θt​−mt+1​−λmt+1​ = θ t − λ m t + 1 − λ m t + l r ∇ θ t J i ( θ t − λ m t ; x i , y i ) = θ t ′ − λ m t + 1 − l r ∇ θ t J i ( θ t ′ ) {=theta_t - lambda m_{t+1} - lambda m_t + l_r {nabla}_{theta_t }J_i (theta_t - lambda m_t;x^i,y^i ) = theta_t^{'} - lambda m_{t+1} - l_r{nabla}_{theta_t}J_i (theta_t^{'})} =θt​−λmt+1​−λmt​+lr​∇θt​​Ji​(θt​−λmt​;xi,yi)=θt′​−λmt+1​−lr​∇θt​​Ji​(θt′​)所以NAG中, t + 1 {t+1} t+1时刻的参数可以看作由 t {t} t时刻参数的值, t {t} t时刻参数的梯度与 t + 1 {t+1} t+1时刻的移动方向共同决定的。这种考虑了未来参数变化的功能叫做超前部署(Look into the future)。

图中,蓝色线表示SGDM的梯度更新,其中蓝色短线表示当前位置的梯度,蓝色长线表示之前累计的梯度;闭合三角形的棕色线、红色线与绿色线表示NAG一次的梯度变化,其中棕色线表示先前累积的梯度,红色线表示原来参数到棕色线后的梯度,两者相加的绿色线方向即为参数更新的方向。

2.7 Adagrad

前面讲解的几种优化器都没有对学习步长 l r l_r lr​进行修改,而当每次更新参数方向的时候,都调整其学习步长 l r l_r lr​的方式即称为自适应梯度更新。
θ t + 1 = θ t − l r ∑ i = 0 t − 1 g i 2 + ϵ g t (9) {theta_{t+1} = theta_t - frac{l_r}{sqrt {sum_{i = 0}^{t - 1}{g_i^2} + epsilon}}g_t} tag9 θt+1​=θt​−∑i=0t−1​gi2​+ϵ ​lr​​gt​(9)公式(9)中, l r l_r lr​为一常数,通常取值 l r = 0.01 {l_r=0.01} lr​=0.01; ϵ epsilon ϵ为一个非常小的数,通常取值 ϵ = 10 e − 8 {epsilon =10e-8} ϵ=10e−8。可以看出,其梯度更新的距离会随着迭代次数的增加而逐渐变小,所以这会造成一个问题,即当突然遇到很大的梯度之后,后面的小梯度相当于没有更新。

2.8 RMSProp

在Adagrad保留之前的梯度的基础上,RMSProp为之前的梯度与目前的梯度添加了一个权重:
θ t + 1 = θ t − l r v t + ϵ g t (10) {theta_{t+1} = theta_{t} - frac{l_r}{sqrt {v_t + epsilon}}g_t} tag{10} θt+1​=θt​−vt​+ϵ ​lr​​gt​(10)其中 v 1 = g 0 2 , v t = α v t − 1 + ( 1 − α ) g t 2 {v_1=g_0^2, v_t = alpha v_{t-1} + (1 - alpha)g_t^2} v1​=g02​,vt​=αvt−1​+(1−α)gt2​,并且建议值为 l r = 0.001 , α = 0.9 {l_r = 0.001, alpha = 0.9} lr​=0.001,α=0.9。

2.9 Adaptive Moment Estimation, Adam

Adam是比较著名且常用的优化器了。它在SGDM与RMSProp的基础上,又提出了一种更好的优化算法:
θ t + 1 = θ t − l r v ^ t + ϵ m ^ t (11) {theta_{t+1} = theta_{t} - frac{l_r}{sqrt{hat{v}_t}+epsilon}hat{m}_t} tag{11} θt+1​=θt​−v^t​ ​+ϵlr​​m^t​(11)其中有 m ^ t = m t 1 − β 1 t (12) {hat{m}_t=frac{m_t}{1 - beta_1^t}} tag{12} m^t​=1−β1t​mt​​(12) v ^ t = v t 1 − β 2 t (13) {hat{v}_t = frac{v_t}{1 - beta_2^t}} tag{13} v^t​=1−β2t​vt​​(13)另外 m t = β 1 m t − 1 + ( 1 − β 1 ) g t , m 0 = 0 , v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 , v 1 = g 0 2 {m_t = beta_1 m_{t-1} + (1-beta_1)g_t, m_0 = 0, v_t = beta_2 v_{t -1} + (1 - beta_2)g_t^2, v_1=g_0^2} mt​=β1​mt−1​+(1−β1​)gt​,m0​=0,vt​=β2​vt−1​+(1−β2​)gt2​,v1​=g02​。建议值为 β 1 = 0.9 , β 2 = 0.999 , ϵ = 10 e − 8 {beta_1 = 0.9, beta_2=0.999, epsilon = 10e-8} β1​=0.9,β2​=0.999,ϵ=10e−8。 m t m_t mt​表示其过去的参数更新的方向, v t v_t vt​表示二阶动量。在实际应用中Adam比其它的优化算法更好。

2.10 AMSGrad

θ t + 1 = θ t − l r v ^ t + ϵ m t (14) {theta_{t+1} = theta_{t} - frac{l_r}{sqrt{hat{v}_t}+epsilon}m_t} tag{14} θt+1​=θt​−v^t​ ​+ϵlr​​mt​(14) v ^ t = m a x ( v ^ t − 1 , v t ) (15) {hat{v}_t = max(hat{v}_{t-1}, v_t)} tag{15} v^t​=max(v^t−1​,vt​)(15)其中 m t = β 1 m t − 1 + ( 1 − β 1 ) g t , v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 {m_t = beta_1 m_{t-1} + (1-beta_1)g_t, v_t= beta_2 v_{t-1}+(1-beta_2)g_t^2} mt​=β1​mt−1​+(1−β1​)gt​,vt​=β2​vt−1​+(1−β2​)gt2​。

3.一些帮助优化的策略(Some Tips)

  1. Shuffling。训练的数据集需要充分地打散,避免特征集的集中出现,导致有时学习过度,有时学习不足的情况发生,导致下降方向出现偏差;
  2. Dropout。Dropout能够减少网络内部各个神经元之间复杂的共适应关系,能够阻止参数之间的过度依赖,减少参数陷入局部值的现象;
  3. Gradient noise。在计算梯度的时候引入高斯噪声,使得其下降方向出现随机化;
  4. Curriculum learning。首先训练简单的数据集,然后训练复杂的数据集;
  5. Normalization。Batch Normalization、Instance Normalization、Group Normalization、Layer Normalization、Positional Normalization等归一化特征;
  6. Regularization。正则化能够减小系统的内部参数,降低系统对于输入的敏感度。

4.选择优化器的策略(Another Tips)

  1. 一般使用Adam或者SGDM,其中Adam有利于快速实验优化,而SGDM能够得到一个较为精准的值;
  2. 考虑不同优化器的组合,可以先使用Adam快速下降,然后再使用SGDM寻找较为精准的值;
  3. 在训练过程中要学会监控目标函数值,以及其精度,以保证训练过程中保持下降的趋势;
  4. 根据数据选择优化器,当数据是非常分散的时候,优先考虑自适应学习率的算法。

5.总结(Conclusion)

本文在参考了李宏毅老师关于优化器的课程的基础上,查阅了与优化器相关的资料。主要内容包括常用的优化器模型,以及使用和选择优化器的一些策略。

6.参考资料(Reference)

李宏毅老师2021课程
优化算法Optimizer比较和总结
优化器(Optimizer)
深度学习各类优化器详解(动量、NAG、adam、Adagrad、adadelta、RMSprop、adaMax、Nadam、AMSGrad)

版权声明

转载请注明出处

本文发布于:2024-01-29 00:36:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645979511448.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:学习笔记
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23