Mini-batch 梯度下降法
当对整个训练集执行梯度下降法时,要处理整个数据集,然后才能进行一步梯度下降法,这样速度回非常慢
但如果每次数据的一部分进行梯度下降,那么算法的处理速度会快很多
mini-batch梯度下降,在每次迭代是并不是下降的
当mini-batch的size=m时 就是batch梯度下降,每次梯度下降对所有样本执行一次梯度下降,每次迭代需要大量时间
当mini-batch的size=1 是,就是随机梯度下降,每次只对一个样本进行梯度下降,当会失去向量化带来的加速
所以在实践中选择两者之间,不大不小的Mini-batch尺寸
如果训练集很小:直接使用batch梯度下降
如果训练集较大,典型的mini-batch大小是64到512即
2
6
、
2
7
、
2
8
、
2
9
、
2
1
0
2^6、2^7、2^8、2^9、2^10
26、27、28、29、210
X
{
t
}
Y
{
t
}
X^{\{t\}}Y^{\{t\}}
X{t}Y{t}需要符合CPU、GPU内存
指数加权平均
指数加权平均公式
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
v_{t} = \beta v_{t-1}+(1-\beta)\theta_{t}
vt=βvt−1+(1−β)θt
v
t
v_t
vt是估计的平均值,约等于
1
1
−
β
\dfrac{1}{1-\beta}
1−β1天的平均气温
β
=
0.9
\beta=0.9
β=0.9 是红色线,代表的是最近10天的平均温度
β
=
0.98
\beta=0.98
β=0.98 是绿色线,代表的是最近50天的平均温度
β
=
0.5
\beta=0.5
β=0.5 是黄色色线,代表的是最近2天的平均温度
上图中
v
100
v_{100}
v100的
θ
\theta
θ前的系数相加等于1或接近于1,称之为偏差修正
0.
9
10
≈
0.35
≈
1
/
e
0.9^{10} \approx 0.35\approx 1/e
0.910≈0.35≈1/e
存在
ε
\varepsilon
ε满足式子
(
1
−
ε
)
1
/
ε
=
1
e
(1-\varepsilon)^{1/\varepsilon}=\dfrac{1}{e}
(1−ε)1/ε=e1上述例子
ε
=
0.1
\varepsilon=0.1
ε=0.1
总的来说,相当于10天后系数下降到峰值得
1
e
\dfrac{1}{e}
e1
由于初始的
v
0
=
0
v_0=0
v0=0,所以应该是图片中的紫线,整体比实际值偏小
所以在估测初期使用
v
t
1
−
β
t
\dfrac{v_{t}}{1-\beta^{t}}
1−βtvt进行偏差估计
动量梯度下降法
基本思想是计算梯度的指数加权平均数,并利用该梯度更新权重
上图中的蓝线是使用梯度下降来进行最小化损失函数,可以看出一直在波动且幅度很大,减缓了梯度下降的速度,并且为了防止摆动过大,超出函数的范围只能使用一个较小的学习率
动量梯度下降算法实现
RMSprop
Adam 优化算法
算法实现
参数常用选择
学习率衰减
在使用mini-batch梯度下降时,如果使用固定的
α
\alpha
α,由于不同batch中存在一定的噪声,算法在到达最小值附近大范围内波动,并不会精确的收敛
如果逐渐的减小
α
\alpha
α,那么就会在最小值得一个较小的范围内摆动
常用的学习率衰减方法
decay_rate是超参数
其他学习率衰减方法
局部最优的问题
通常梯度为0的点并不是吐中的全局最优点。代价函数的零梯度点通常是鞍点
梯度为0可能是凸函数也可能是凹函数,在2万维空间中,要想达到全局最优,2万个方向都需要是凹函数,但几率很小
平稳段是其导数长时间接近于0,如果处于平稳段,梯度会从平面从上向下下降,但由于梯度接近于0所以很慢,到达最低点后,由于左边或右边的随机扰动,才走出平稳段
- 当训练较大的神经网络并且J被定义在较高的维度空间,不太可能陷于极差的局部最优点
- 平稳段会是训练变得很慢,例如Adam算法,可以帮助算法尽早的走出平稳段