不属于神经网络常用算法_神经网络中常用的优化算法

优化算法的目的:1. 跳出局部极值点或鞍点,寻找全局最小值;2.使训练过程更加稳定,更加容易收敛。

0c1f3d91bd09570d8cc94a65fa030d02.png

优化算法的改进无非两方面:1.方向--加动量,2.学习速率--加衰减

1.SGD

equation?tex=g_t+%3D+%5Cnabla_%7B%5Ctheta_%7Bt-1%7D%7Df%28%5Ctheta_%7Bt-1%7D%29+

equation?tex=%5CDelta+%5Ctheta_t+%3D+-%5Ceta+%2A+g_t

2.[Momentum](https://zh.d2l.ai/chapter_optimization/momentum.html)

equation?tex=m_t+%3D+%5Cmu+%2A+m_%7Bt-1%7D+%2B+g_t+

equation?tex=%5CDelta+%5Ctheta_t+%3D+-%5Ceta+%2A+m_t

equation?tex=%5Cmu 常取
0.9. 从学习率的角度理解动量法:指数加权移动平均,也可以理解为滑动窗口。在动量法中,自变量在各个方向上的移动幅度不仅取决于当前梯度,还取决于过去的各个梯度在各个方向上是否一致。也就是说,若某个纬度的历史梯度震荡比较大,则在该维度上学习会更加慎重。

3.[Nesterov(NAG)](https://blog.csdn.net/tsyccnh/article/details/76673073)

这个想法太巧妙了,动量法可以重写为:

equation?tex=%5CDelta+%5Ctheta_t+%3D+-%5Ceta+%2A+%5Cmu+%2A+m_%7Bt-1%7D+-+%5Ceta+%2A++g_t

equation?tex=m_%7Bt-1%7D 是与当前时刻
equation?tex=g_t 无关的,所以不管
equation?tex=g_t方向为何,
equation?tex=%5Ctheta_t 都一定会在
equation?tex=m_%7Bt-1%7D的方向上走上一段距离的。那为何不先在
equation?tex=m_%7Bt-1%7D方向上走一步后,再算梯度呢。

equation?tex=g_t+%3D+%5Cnabla_%7B%5Ctheta_%7Bt-1%7D%7Df%28%5Ctheta_%7Bt-1%7D-%5Ceta+%2A+%5Cmu+%2A+m_%7Bt-1%7D%29

equation?tex=m_t+%3D+%5Cmu+%2A+m_%7Bt-1%7D+%2B+g_t+

equation?tex=%5CDelta+%5Ctheta_t+%3D+-%5Ceta+%2A+m_t

947c782bdfed807c021696153f9b4e1f.png

蓝线为动量法,棕线为t-1时刻的动量方向,红线为

equation?tex=m_%7Bt-1%7D方向上走一步后梯度,绿线为两者之和。

4.Adagrad

为所有纬度设置相同的学习率是训练更加容易震荡。AdaGrad算法,它根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题。

equation?tex=n_t+%3D+g_t%5E2+%2B+n_%7Bt-1%7D

equation?tex=%5CDelta+%5Ctheta_t+%3D+-%5Cfrac%7B%5Ceta%7D%7B%5Csqrt%7Bn_t%2B%5Cepsilon%7D%7D%2Ag_t

这里说一下

equation?tex=n_t 的计算 :
equation?tex=n_t
equation?tex=g_t+ 对应元素相乘,是一个和
equation?tex=g_t+ 相同尺寸的向量, 所以Adagrad不同维度的学习率是不一样的。

5.Adadelta

Adagrad有个明显的缺点,没有对过往的

equation?tex=g_t 进行衰减,导致迭代一定次数后,
equation?tex=%5CDelta+%5Ctheta_t 必然趋近于0。

Adadelta就是为了解决 Adagrad 学习率急剧下降问题的。

他们管在

equation?tex=g_t%5E2 前面乘一个
1-v指数加权平均

Adadelta会对过去的

equation?tex=g_t 有个
v的指数倍的衰减,有了这个衰减,就可以把Adadelta算法理解为一个 滑动的窗,对窗内的
equation?tex=g_t进行指数加权平均。

(为什么要在

equation?tex=g_t%5E2前面乘个
1-v的系数?归一化就这么重要么?)

equation?tex=n_t+%3D+%281-v%29+%2A+g_t%5E2+%2B+v+%2A+n_%7Bt-1%7D

equation?tex=%5CDelta+%5Ctheta_t+%3D+-%5Cfrac%7B%5Ceta%7D%7B%5Csqrt%7Bn_t%2B%5Cepsilon%7D%7D%2Ag_t

6.Adam

Adadelta+动量

equation?tex=m_t+%3D+%281-u%29+%2A+g_t+%2B+u+%2A+m_%7Bt-1%7D

equation?tex=n_t+%3D+%281-v%29+%2A+g_t%5E2+%2B+v+%2A+n_%7Bt-1%7D

equation?tex=%5Chat+m_t+%3D+%5Cfrac+%7Bm_t%7D%7B1-u%5Et%7D

equation?tex=+%5Chat+n_t+%3D+%5Cfrac+%7Bn_t%7D%7B1-v%5Et%7D

equation?tex=+%5CDelta+%5Ctheta_t+%3D+-%5Cfrac%7B%5Ceta%7D%7B%5Csqrt%7B%5Chat+n_t+%2B+%5Cepsilon%7D%7D+%2A+%5Chat+m_t

他们管

equation?tex=%5Cfrac%7B1%7D%7B1-u%5Et%7D
偏差修正。因为 u, v一般取0.9以上,且
equation?tex=m_0%2C+n_0 一般初始化为0,所以在t较小时,
equation?tex=m_1 只有
equation?tex=0.1%C2%B7g_t ,所以引入偏差修正。随着t的增大,
equation?tex=%5Chat+m_t 越来越接近
equation?tex=m_t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值