您的位置:首页 > 其它

深度学习----笔记之优化算法

2017-09-13 12:30 295 查看
本篇文章根据Andrew Ng的深度学习课程做个笔记。

1.mini-batch

mini-batch size --------(1)如果size为样本个数m,就是批量梯度下降(batch gradient descent);(2)如果size为1,就是随机梯度下降法(stochastic gradient descent)

批量梯度下降的下降速度较快,但是由于输入样本多,因此每次计算梯度的时间和空间成本高;

而随机梯度下降的下降速度慢,偶尔还会上升,只是总体趋势在下降,但是由于每次只有一个样本,因此每次计算梯度的时间和空间成本低;

mini-batch就是两者的折中,mini-batch应用的比较多,具体要看数据集的大小来选择合适的size,来平衡梯度下降的速度和梯度计算的消耗,一般的mini-batch size 介于64到512之间(2的k次方)。

2.指数加权平均

2.1 要了解接下来的优化算法,首先要理解指数加权平均。

公式: V_t := β * V_t-1 + (1-β) * θ_t

其中V_t-1 表示上一时刻的指数加权平均值,θ_t为当前时刻的真实值,β为系数(通常取值为0.9),n
= 1 / (1 - β)的值表示考虑前n天的数据,β越大表示考虑的天数越少。一般情况下V_0 = 0,V_t即为当前时刻的指数加权平均值。

2.2 指数加权平均的偏差修正

如果V_0 = 0 β = 0.98,那么V_1 = 0.02 * θ_1
这使得加权平均与真实值差距很大,因此需要做一些修正,来减缓前几个时刻的加权平均与真实值差距较大的问题。

修正公式: V_t  := V_t  /  (1 - β^t) 

在机器学习的参数优化过程中,如果做了这个修正,可以在训练早期获得更好的估计。

3.动量梯度下降法

在mini-batch梯度下降中,梯度方向总是曲折摆动地向最低点移动,这使得下降速度变慢。我们希望他能够在最低点方向移动快速移动,而在其他方向减少这种摆动,Momentum梯度下降法就是用来解决这个问题的。

公式:

V_dw  := β * V_dw + (1 - β) * dw

V_db := β * V_db + (1 - β) * db

w := w - α * V_dw

b := b - α * V_db

其中,dw是损失函数对w的偏导数,V_dw是dw的动量;db是损失函数对b的偏导数,V_db是db的动量。

参数沿着负动量方向,而不是负梯度方向更新,这样可以加快参数沿着最低点方向移动,减少摆动。

4.RMSprop (root mean square)

Momentum算法和RMSprop都加速向最低点前进,而RMSprop允许使用更大的学习率来加快前进速度。

公式:

S_dw := β * S_dw + (1 - β) * (dw)^2

S_db := β * S_db + (1-β) * (db)^2

w := w - α * dw / ((S_dw)^0.5[b] + ε)[/b]

b := b - α * db / ((S_db )^0.5 [b]+ ε)[/b]

其中,ε
= 1 / 10^8,为了防止S_dw或S_db接近0

5.Adam算法(Adaptive Moment Estimation)

Adam是Momentum和RMSprop的折中。

初始化:

V_dw = 0,S_dw = 0,V_db = 0,S_db = 0

公式:

V_dw := β_1 * V_dw + (1 - β_1) * dw

V_db := β_1 * V_db +(1 - β_1) * db

S_dw := β_2 * S_dw + (1 - β_2) * dw

S_db
:= β_2 * S_db + (1 - β_2) * db


V_dw
:= V_dw / (1 - β_1^t)


V_db
:= V_db / (1 - β_1^t)


S_dw
:= S_dw / (1 - β_2^t)


S_db
:= S_db / (1- β_2^t)


w := w - α * V_dw  / ((S_dw)^0.5 + [b]ε)[/b]

[b]b := b - α * V_db / ((S_db)^0.5 +[b] ε)[/b][/b]

超参数包括:

α : 学习率

β_1 : 默认为0.9 对应Momentum中dw和db

β_2 : 默认为0.999  对应RMSprop中dw^2和db^2

ε  :  默认为1/10^8

6.学习率衰减

固定学习率的情况下:学习率较小,则梯度下降较慢,需要更多的迭代次数;学习率较大,则会在最低点附近徘徊,与最低点存在一定的距离,无法得到最优解。

学习率衰减:在训练初期使用较大的学习率,后期使用较小的学习率,能够更好的趋近最低点。

α = α_0 / (1 + decay_rate * epoch_num)



α = 0.95^epoch_num * α_0       指数下降



α = k / (epoch_num)^0.5 * α_0



α = k* α_0 / t^0.5 

7.局部最优的问题

深度学习中容易陷入鞍点,而不是局部最优点。如果鞍点周围非常平滑的话,梯度下降的速度会非常慢,Momentum、RMSprop、Adam都能够加快梯度下降的速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  优化算法