《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam

《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam

都是个人理解,可能有错误,请告知


4.1 知识点定位

我们简单说一下整个神经网络学习过程:

  1. 我们数据是已知的,网络结构是已知的,目的就是找到该网络一套最佳的参数[w,b]
  2. 最佳的参数[w,b] 是什么标准呢?就是在这组参数确定的神经网络中,所有数据通过该神经网络,得到的预测值与真实值差距计算总和的平均值最小(目标是0
    • 不是一个数据预测对了就行,是所有数据都得参加
    • 要算平均最小,是因为排除数量不同的影响
    • 我们目的是每次都能预测对,也就是追求一套参数,让每次都不出错,没有误差
  3. 调整[w,b]是在反向传播的过程中,方式是梯度下降
  4. 为了减少运算时间,有两种优化思路:对神经网络本身进行优化:dropout等;还有就是优化梯度下降
  5. SGD,momentum,RMSprop,Ddam都是梯度下降里的改进方法。

4.2 传统梯度下降

《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam_第1张图片

传统梯度下降比如三层参数,1000个数据,每层1000个参数(n=1000)

我们先通过1000个数据 算出了总损失函数,现在要反向传播,进行调整初始化的[w,b],【3层 -> 2层】反向传播一层为例:

第一个数据,通过反向传播,更新一次参数,不过这个更新暂存的,实际的参数没有变化。然后使用原始的参数更新一次第二个例子,然后使用原始参数更新一次第三个例子…这样一层参数更新了所有数据1000次,我们把这1000次计算出来需要的update的参数量求和或者求平均,从而更新一次参数。更新这一层参数的计算量1000*1000

它的问题是计算量太大了,尤其深度神经网络,无法实际应用。


4.3 SGD随机梯度下降法

想法:调查全国30岁人均身高,不需要把所有30岁人身高都计算出来,就随机抽样就行,无非是抽样数据越大,就约准确。即使抽取1个,那么离真是平均值相差不大。

用法:每次修改参数,随机取一个数据,下次再随机取一个,而不是用所有数据。

优势:相对于传统的梯度下降,大大降低了计算量,让理论方法得以实践

思考:在每轮更新中,难免会遇到误差很大的点,那么考虑 既不用1个数据,也不用所有数据,用一部分数据,这种就是mini-batch

  • mini-batch:设置越大,那么梯度下降方向和最佳路线就更准确,但是计算量就越大。重要的是把我这个度.

缺点:
《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam_第2张图片

《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam_第3张图片

类似与这种收敛,会来回震荡,因为梯度下降方向很小的向量指向目标点(0.0)

《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam_第4张图片


4.4 momentum 动量法

思路:如SGD问题,会来回震荡,我们发现,我们目的是向前(),在竖直方向上,来回反转(绿),如果能够考虑历史原因,将上下方向有一定抵消,那么会减少震荡

《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam_第5张图片
公式:
V t = β ⋅ V t − 1 + ( 1 − β ) ⋅ d w ( t ) i V_{t}=\beta·V_{t-1}+(1-\beta)·dw_{(t)i} Vt=βVt1+(1β)dw(t)i W ( t ) i = W ( t − 1 ) i + η V t W_{(t)i}=W_{(t-1)i}+\eta V_{t} W(t)i=W(t1)i+ηVt

  • Vt其实就是Wt步的修正量,它参考了所有的历史数据,越近的影响的权重越大
  • η是学习率
  • W ( t ) i = ∂ J ( W ( t − 1 ) i ) ∂ W i W_{(t)i}=\frac{\partial J(W_{(t-1)i})}{\partial W_i} W(t)i=WiJ(W(t1)i) ,就是w的梯度

第一个式子理解参看视频【16分钟时候开始】https://www.bilibili.com/video/BV1r64y1s7fU/

缺点:它的问题就是学习率η是一致不变的,可能会因为冲最佳点,反复震荡


4.5 AdaGrad 自适应算法

这个是想办法修改学习率η,让它自适应,步伐开始大,后面每步只能越来越小,这样就解决了如果学习率太大,可能冲过目标点,太小又下降的太慢的问题

W ( t ) i = W ( t − 1 ) i + η S ( t ) + ϵ V t W_{(t)i}=W_{(t-1)i}+\frac{\eta}{\sqrt{S_{(t)}+\epsilon} } V_{t} W(t)i=W(t1)i+S(t)+ϵ ηVt S ( t ) = S ( t − 1 ) + Δ W ( t ) i ⋅ Δ W ( t ) i S_{(t)}=S_{(t-1)}+\Delta W_{(t)i}·\Delta W_{(t)i} S(t)=S(t1)+ΔW(t)iΔW(t)i

  • ϵ \epsilon ϵ 是极小量,为了避免分母是0
  • S(t) 有参考历史梯度,相对于每一步上,梯度越大走的步伐增量越小;梯度越小,走的步伐相对来说增量大一点;但整体来看 整体分母是不断增加的,就是增加的量是变化的,整体看步伐只会是越来越小

缺点:整体看步伐只会是越来越小,导致这种步伐一单变的很小了,就没办法再增大了,再次遇到大梯度就下降的很慢

《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam_第6张图片


4.6 RMSprop

对上面的缺点进行了优化,就是和动量想法相似,利用历史数据,但是越近的影响越大(方法的解释在第16分钟)

W ( t ) i = W ( t − 1 ) i + η S ( t ) + ϵ V t W_{(t)i}=W_{(t-1)i}+\frac{\eta}{\sqrt{S_{(t)}+\epsilon} } V_{t} W(t)i=W(t1)i+S(t)+ϵ ηVt S ( t ) = β ⋅ S ( t − 1 ) + ( 1 − β ) Δ W ( t ) i ⋅ Δ W ( t ) i S_{(t)}=\beta·S_{(t-1)}+(1-\beta)\Delta W_{(t)i}·\Delta W_{(t)i} S(t)=βS(t1)+1βΔW(t)iΔW(t)i

《机器学习-小知识点》4:SGD,momentum,RMSprop,AdaGrad ,Adam_第7张图片


4.7 Adam

动量法(梯度的优化)+RMSprop(学习率优化) = Adam
W ( t ) i = W ( t − 1 ) i + η S ( t ) + ϵ V t W_{(t)i}=W_{(t-1)i}+\frac{\eta}{\sqrt{S_{(t)}+\epsilon} } V_{t} W(t)i=W(t1)i+S(t)+ϵ ηVt V t = β 1 ⋅ V t − 1 + ( 1 − β 1 ) ⋅ d w ( t ) i V_{t}=\beta_1·V_{t-1}+(1-\beta_1)·dw_{(t)i} Vt=β1Vt1+(1β1)dw(t)i S ( t ) = β 2 ⋅ S ( t − 1 ) + ( 1 − β 2 ) Δ W ( t ) i ⋅ Δ W ( t ) i S_{(t)}=\beta_2·S_{(t-1)}+(1-\beta_2)\Delta W_{(t)i}·\Delta W_{(t)i} S(t)=β2S(t1)+1β2ΔW(t)iΔW(t)i

你可能感兴趣的:(小知识点,人工智能,深度学习)