李宏毅机器学习--Tips for training

crirical point means gradient=0

当梯度接近于0甚至等于0的时候,损失函数的值卡住不再下降。梯度=0不一定是卡在了local minima,还有可能是卡在了saddle point:如果卡在了local minima,那就很难在进行参数更新;如果卡在了saddle point,那还是可以通过一定方式进行参数更新的。
在这里插入图片描述

判断critical pointlocal minima还是saddle point

泰勒近似: L ( θ ) ≈ L ( θ ′ ) + ( θ − θ ′ ) T g + 1 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\boldsymbol{\theta}) \approx L\left(\boldsymbol{\theta}^{\prime}\right)+\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{T} g+\frac{1}{2}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{T} H\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right) L(θ)L(θ)+(θθ)Tg+21(θθ)TH(θθ)
其中,g是gradient向量 -> g = ∇ L ( θ ′ ) g=\nabla L\left(\boldsymbol{\theta}^{\prime}\right) g=L(θ);H是Hessian matrix多元函数二元偏导构成的矩阵 -> H i j ∘ = ∂ 2 ∂ θ i ∂ θ j L ( θ ′ ) {H}_{i j}^{\circ}=\frac{\partial^{2}}{\partial \boldsymbol{\theta}_{i} \partial \boldsymbol{\theta}_{j}} L\left(\boldsymbol{\theta}^{\prime}\right) Hij=θiθj2L(θ)
当在critical point时,即 g = 0 g=0 g=0,泰勒近似变为下式: L ( θ ) ≈ L ( θ ′ ) + 1 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\boldsymbol{\theta}) \approx L\left(\boldsymbol{\theta}^{\prime}\right)+\frac{1}{2}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{T} H\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right) L(θ)L(θ)+21(θθ)TH(θθ)
θ − θ ′ = v \theta-\theta^{'}=v θθ=v,那么根据 v T H v \boldsymbol{v}^{T} H \boldsymbol{v} vTHv 可以判断 critical point 的类型:
对于所有的v, v T H v > 0 \boldsymbol{v}^{T} H \boldsymbol{v}>0 vTHv>0 -> H是正定矩阵 -> H的所有特征值都大于0 -> local minima
在这里插入图片描述
对于所有的v, v T H v < 0 \boldsymbol{v}^{T} H \boldsymbol{v}<0 vTHv<0 -> H是负定矩阵 -> H的所有特征值都小于0 -> local maxima
在这里插入图片描述
对于所有的v, v T H v > 0 \boldsymbol{v}^{T} H \boldsymbol{v}>0 vTHv>0 v T H v > 0 \boldsymbol{v}^{T} H \boldsymbol{v}>0 vTHv>0 同时存在 -> H的特征值有正有负 -> saddle point

在这里插入图片描述

卡在saddle point时参数update的方向?

【结论】:沿着H负的特征值对应的特征向量方向update
【数学证明】:令H的特征向量为u,u的特征值为 λ \lambda λ
u T H u = u T ( λ u ) = λ ∥ u ∥ 2 \boldsymbol{u}^{T} H \boldsymbol{u}=\boldsymbol{u}^{T}(\lambda \boldsymbol{u})=\lambda\|\boldsymbol{u}\|^{2} uTHu=uT(λu)=λu2
λ < 0 \lambda<0 λ<0时,根据 L ( θ ) ≈ L ( θ ′ ) + 1 2 u T H u L(\boldsymbol{\theta}) \approx L\left(\boldsymbol{\theta}^{\prime}\right)+\frac{1}{2}\boldsymbol{u}^{T} H \boldsymbol{u} L(θ)L(θ)+21uTHu L ( θ ) < L ( θ ′ ) L(\boldsymbol{\theta})<L(\boldsymbol{\theta}^{'}) L(θ)<L(θ),此时 u = θ − θ ′ u=\theta-\theta^{'} u=θθ,即 θ = θ ′ + u \theta=\theta{'}+u θ=θ+u

saddle point vs. local minima

在这里插入图片描述
说明经验上local minima出现的情况非常少,更多的时候是卡在了saddle point。

small batch size and momentum help escape critical point

Batch

【概念】:将training data分为多笔batch,对每一笔batch计算gradient和Loss来更新参数。
在这里插入图片描述
shuffle(最常见的一种shuffle的做法):在每个epoch开始之前会分一次batch,但是每一次的epoch都会不太一样。
在这里插入图片描述

  • optimization指的是training accuracy
    small batch对于参数更新更有效,因为每个batch的lossfunction略有不同,在L1卡住的时候在L2不一定会卡住。
    在这里插入图片描述
  • Generalization指的是testing accuracy
    small batch更会到达一个平坦的minima,相对而言测试结果会更加稳定;而large batch更会到达一个尖锐的minima。
    在这里插入图片描述
    引自论文<On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima>

【结论】:Batch size is a hyperparamters you have to decide.

Momentum

【概念】:gradient descent的移动方向不再是gradient的反方向,而是gradient的反方向+前一步移动的方向。
在这里插入图片描述
 Movement  m t = λ m t − 1 − η g t \text { Movement } \boldsymbol{m}^{\mathbf{t}}=\lambda \boldsymbol{m}^{\mathbf{t-1}}-\eta \boldsymbol{g}^{\mathbf{t}}  Movement mt=λmt1ηgt

Adaptive learning rate

Adagrad

在这里插入图片描述
当参数在某个方向上gradient非常小,我们希望learning rate大一点;当在某一方向上learning rate比较陡峭,我们希望learning rate小一点。即对不同的参数都有自己特制的learning rate。
θ t + 1 ← θ t − η t σ t g t \theta^{t+1} \leftarrow \theta^{t}-\frac{\eta^{t}}{\sigma^{t}} g^{t} θt+1θtσtηtgt
σ t {\sigma^{t}} σt是parameter dependency的,最常见的做法是取均方根
σ i t = 1 t + 1 ∑ i = 0 t ( g i t ) 2 \sigma_{i}^{t}=\sqrt{\frac{1}{t+1} \sum_{i=0}^{t}\left(g_{i}^{t}\right)^{2}} σit=t+11i=0t(git)2

RMSProp

在这里插入图片描述
在Adagrad中我们假设gradient在同一方向上大小不变,但实际上error surface可能会非常复杂,即使是同一参数在同一方向上gradient也会发生很大的变化。所以RMSProp对Adagrad进行改进,可以通过调整现在gradient和以往gradient的权重来快速调整learning rate(Adagrad也可以根据现在的gradient进行调整,只不过Adagrad反应比较慢)。
σ i t = α ( σ i t − 1 ) 2 + ( 1 − α ) ( g i t ) 2 \sigma_{i}^{t}=\sqrt{\alpha\left(\sigma_{i}^{t-1}\right)^{2}+\left(1- \alpha\right)\left(\boldsymbol{g}_{i}^{t}\right)^{2}} σit=α(σit1)2+(1α)(git)2
【注】:目前最常用的Optimizator是Adam=RMSProp+Momentum

learning rate scheduling

在这里插入图片描述
使用adaptive learning rate的方法(如图使用的是Adagrad)会找到最优点,但是在终点附近有可能会出现剧烈震荡的情况。这是因为在终点附近gradient的值都很小, σ \sigma σ积累了一定小的gradient会使learning rate变大从而导致震荡。所以在gradient descent的learning中的 η {\eta} η不再是个常数,让其变成和时间有关的变量 η t {\eta}^{t} ηt,随着时间越长,离终点越近,控制learning rate很小。

Batch normalization

【目的】:让error surface不那么崎岖,更好训练
【做法】:不仅对feature做normalization,对神经网络内每一层输出的数值也要做normalization,而这种normalization是要在每个batch上做的,所以叫batch normalization。可以在activative function之前做,也可以在activative function之后做。如果activative function是sigmoid的话,更推荐在之前做。

  • 【training】
    在这里插入图片描述
    z ~ i = z i − μ σ \tilde{\boldsymbol{z}}^{i}=\frac{\boldsymbol{z}^{\boldsymbol{i}}-\boldsymbol{\mu}}{\boldsymbol{\sigma}} z~i=σziμ
    z ^ i = γ ⊙ z ~ i + β \hat{\boldsymbol{z}}^{i}=\gamma \odot \tilde{\boldsymbol{z}}^{i}+\boldsymbol{\beta} z^i=γz~i+β
  • 【testing】
    难以实现再等待收集一个batch的资料后再进行计算,所以 μ \mu μ σ \sigma σ的计算跟training略有不同,计算的是在训练过程中batch的moving average。
    μ ‾ ← p μ ‾ + ( 1 − p ) μ t \overline{\boldsymbol{\mu}} \leftarrow p \overline{\boldsymbol{\mu}}+(1-p) \boldsymbol{\mu}^{t} μpμ+(1p)μt
    z ~ i = z i − μ ‾ σ ‾ \tilde{\boldsymbol{z}}^{i}=\frac{\boldsymbol{z}^{\boldsymbol{i}}-\overline{\boldsymbol{\mu}}}{\overline\boldsymbol{\sigma}} z~i=σziμ
  • Why does batch normalization works?
    Internal Covariate Shift
    在这里插入图片描述
    但是以上解释在<How does batch normalization help optimization>被打脸,might be somewhat serendipitous。

参考资料

李宏毅机器学习2021 P5-P9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值