梯度下降:
- SGD: 优点:速度快、效果好。缺点:因为随机,会陷入局部最优解。
- BGD: 整个训练集的数据。
- MBGD: 结合BGD和SGD的折中。
优化:从梯度和学习率入手。
动量(加速收敛,减小震荡):
普通动量:
每个指数加权平均后的梯度含有之前梯度的信息
m
t
+
1
=
β
m
t
+
(
1
−
β
)
▽
θ
J
(
θ
)
m_{t+1} = \beta m_t + (1-\beta)\bigtriangledown_{\theta}J(\theta)
mt+1=βmt+(1−β)▽θJ(θ)
其中
m
是动量,
▽
θ
J
(
θ
)
是梯度
m 是 动量,\bigtriangledown_{\theta}J(\theta)是梯度
m是动量,▽θJ(θ)是梯度,
β
通常为
0.9
\beta 通常为0.9
β通常为0.9
NAG(Nesterov accelerated gradient)
m
t
+
1
=
β
m
t
+
(
1
−
β
)
▽
θ
J
(
θ
−
β
m
t
)
m_{t+1} = \beta m_t + (1-\beta)\bigtriangledown_{\theta}J(\theta - \beta m_t)
mt+1=βmt+(1−β)▽θJ(θ−βmt)
ps:网上有人说和二阶信息有关,没太明白。
学习率
自适应学习率优化算法:
-
AdaGrad:参考全部历史梯度,使学习率自适应的下降。缺点:学习率很快变成0。
G t , i i G_{t,ii} Gt,ii就是所有梯度的平方和。 g i i g_{ii} gii是当前的梯度 -
Adadelta:设置窗口W,1、 G G G改为对过去所有的梯度平方的指数加权平均。2、学习率调整为更新量的平方的加权平均。RMS是一个简写。
-
RMSprop:
-
Adam:结合了动量和Ada。
偏差校正
最终的公式:
-
Nadam:加上了Nesterov。
-
AdamW:加上了weight decay。
对
θ
1
,
θ
2
,
…
,
θ
n
\theta_1, \theta_2,\dots,\theta_n
θ1,θ2,…,θn指数加权平均:
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
v_t = \beta v_{t-1}+(1-\beta)\theta_t
vt=βvt−1+(1−β)θt
得:
v
1
,
v
2
,
…
,
v
n
v_1,v_2,\dots,v_n
v1,v2,…,vn