本文来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习所用。
文章目录
- 优化样本大小
- mini-batch
- 优化梯度下降法
- 动量梯度下降法
- 指数加权平均
- 概念
- 偏差纠正
- 动量梯度下降法
- RMSprop
- Adam优化算法
- 优化学习率
- 局部最优问题(了解)
优化样本大小
mini-batch
假设训练集有百万的数据,为了加快训练的速度,将百万数据的样本分割成小批(Mini - batch)的样本来计算梯度,减少了计算梯度的时间和内存开销。
使用符号
x
(
i
)
x^{(i)}
x(i)表示第
i
i
i个样本,使用符号使用符号
z
[
l
]
z^{[l]}
z[l]表示第
l
l
l层神经网络,使用符号
X
{
t
}
X^{\{t\}}
X{t}表示第
t
t
t个不同的mini-batch。
损失函数变化如下,左图是批量梯度下降计算损失函数,右图使用mini-batch计算损失函数。mini-batch梯度下降每次使用一个小批量数据计算梯度,不同小批量中的样本存在差异,每次计算的梯度方向和大小会有波动。比如某个小批量数据可能恰好包含一些特征明显的样本,使得计算出的梯度导致损失下降较多;而另一个小批量可能包含一些异常样本,使梯度计算出现偏差,导致损失短暂上升。但整体上应该是下降的。
设整个样本大小为 m m m。如果mini-batch的大小设置为 m m m,相当于没有划分,是经典的批量梯度下降法(图中蓝色部分);如果mini-batch的大小设置为 1 1 1,相当于每一个样本是一个mini-batch,随机梯度下降过程中会受到噪音的影响,在最小值周围波动(图中紫色部分);如果mini-batch的大小合适,mini-batch梯度下降法就可以得到大量的向量化的同时,不需要等待整个样本被处理完就可以后续的工作,相比于随机梯度下降效果更好(图中绿色部分)。但是仍有可能导致在最小值周围徘徊,这时候需要减少学习率。
优化梯度下降法
动量梯度下降法
指数加权平均
概念
指数加权平均(指数移动平均)是在机器学习等领域广泛应用的统计方法,用于平滑数据、估计趋势和减少噪声的影响。通过对历史数据赋予不同的权重来计算平均值,越近的数据被赋予的权重越大,越远的数据被赋予的权重呈指数级衰减。能够快速反映数据的最新变化,同时又能保留历史数据的信息,使得计算得到的平均值能够较好地跟踪数据的趋势。
举例:一些温度情况如下,需要计算其温度的局部平均值。设计算公式为
{
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
v
0
=
0
\begin{cases} v_t=\beta v_{t-1}+(1-\beta)\theta_t \\ v_0=0 \end{cases}
{vt=βvt−1+(1−β)θtv0=0这里取
β
=
0.9
\beta=0.9
β=0.9。使用
1
1
−
β
\frac{1}{1 - \beta}
1−β1近似计算
β
\beta
β与天数的关系。当
β
=
0.9
\beta = 0.9
β=0.9时,大约是过去10天(包含当日)的温度的平均值(红线);当
β
=
0.98
\beta = 0.98
β=0.98时,是过去
1
1
−
0.98
=
50
\frac{1}{1 - 0.98}=50
1−0.981=50天的温度的平均值(绿线)。
偏差纠正
实际上,该计算方法在前期的时候明显偏低(紫线),因此需要修正
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
v
t
:
=
v
t
1
−
β
t
v_t:=\frac{v_t}{1 - \beta^t}
vt:=1−βtvt
动量梯度下降法
之前的梯度下降法如批量梯度下降和mini-batch梯度下降存在的问题是每次梯度下降过程中需要计算很多次步骤(蓝线),若学习率太大,梯度下降就会超过函数的作用域(紫线)。使用指数加权平均可以减少计算步骤,更快地达到最小值(红线)。
梯度下降计算更新为
RMSprop
和动量梯度下降法类似,RMSprop(绿线)也是减少梯度下降计算过程中的步骤。
在第
t
t
t 次迭代中,针对当前小批量(mini - batch)数据计算权重的梯度
d
w
dw
dw 和偏置的梯度
d
b
db
db。
S
d
w
=
β
2
S
d
w
+
(
1
−
β
2
)
d
w
2
S_{dw}=\beta_2 S_{dw}+(1 - \beta_2)dw^2
Sdw=β2Sdw+(1−β2)dw2
S
d
b
=
β
2
S
d
b
+
(
1
−
β
2
)
d
b
2
S_{db}=\beta_2 S_{db}+(1 - \beta_2)db^2
Sdb=β2Sdb+(1−β2)db2
β
2
\beta_2
β2 是平滑系数,控制着历史梯度平方信息的衰减。
w
=
w
−
α
d
w
S
d
w
+
ϵ
w = w-\alpha\frac{dw}{\sqrt{S_{dw}}+\epsilon}
w=w−αSdw+ϵdw
b
=
b
−
α
d
b
S
d
b
+
ϵ
b = b-\alpha\frac{db}{\sqrt{S_{db}}+\epsilon}
b=b−αSdb+ϵdb其中
α
\alpha
α 是学习率,
ϵ
\epsilon
ϵ是一个很小的正数,防止分母为0 。
Adam优化算法
结合了动量和RMSProp算法,计算过程如下
初始化:
V
d
w
V_{dw}
Vdw=0、
S
d
w
S_{dw}
Sdw=0,
V
d
b
V_{db}
Vdb=0、
S
d
b
S_{db}
Sdb=0
计算梯度:在第
t
t
t次迭代中,对mini - batch数据计算权重的梯度
d
w
dw
dw和偏置的梯度
d
b
db
db。有
V
d
w
=
β
1
V
d
w
+
(
1
−
β
1
)
d
w
V
d
b
=
β
1
V
d
b
+
(
1
−
β
1
)
d
b
V_{dw}=\beta_1V_{dw}+(1 - \beta_1)dw\ V_{db}=\beta_1V_{db}+(1 - \beta_1)db
Vdw=β1Vdw+(1−β1)dw Vdb=β1Vdb+(1−β1)db
S
d
w
=
β
2
S
d
w
+
(
1
−
β
2
)
d
w
2
S
d
b
=
β
2
S
d
b
+
(
1
−
β
2
)
d
b
2
S_{dw}=\beta_2S_{dw}+(1 - \beta_2)dw^2\ S_{db}=\beta_2S_{db}+(1 - \beta_2)db^2
Sdw=β2Sdw+(1−β2)dw2 Sdb=β2Sdb+(1−β2)db2
偏差校正:
V
d
w
c
o
r
r
e
c
t
e
d
=
V
d
w
1
−
β
1
t
V
d
b
c
o
r
r
e
c
t
e
d
=
V
d
b
1
−
β
1
t
V_{dw}^{corrected}=\frac{V_{dw}}{1 - \beta_1^t}\ V_{db}^{corrected}=\frac{V_{db}}{1 - \beta_1^t}
Vdwcorrected=1−β1tVdw Vdbcorrected=1−β1tVdb
S
d
w
c
o
r
r
e
c
t
e
d
=
S
d
w
1
−
β
2
t
S
d
b
c
o
r
r
e
c
t
e
d
=
S
d
b
1
−
β
2
t
S_{dw}^{corrected}=\frac{S_{dw}}{1 - \beta_2^t}\ S_{db}^{corrected}=\frac{S_{db}}{1 - \beta_2^t}
Sdwcorrected=1−β2tSdw Sdbcorrected=1−β2tSdb
更新参数:
w
=
w
−
α
V
d
w
c
o
r
r
e
c
t
e
d
S
d
w
c
o
r
r
e
c
t
e
d
+
ϵ
b
=
b
−
α
V
d
b
c
o
r
r
e
c
t
e
d
S
d
b
c
o
r
r
e
c
t
e
d
+
ϵ
w = w-\alpha\frac{V_{dw}^{corrected}}{\sqrt{S_{dw}^{corrected}}+\epsilon}\ b = b-\alpha\frac{V_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\epsilon}
w=w−αSdwcorrected+ϵVdwcorrected b=b−αSdbcorrected+ϵVdbcorrected
β
1
\beta_1
β1的值默认为0.9,
β
2
\beta_2
β2的值默认为0.999,学习率
α
\alpha
α需要尝试哪一个合适,
ϵ
\epsilon
ϵ默认为
1
0
−
8
10^{-8}
10−8。这些参数一般使用默认值即可。
优化学习率
学习率衰减是随着训练的进行,按照一定的规则逐渐减小学习率的值。在训练初期,参数离最优解较远,较大的学习率能让参数快速移动,加快收敛速度,迅速接近最优解所在区域。随着训练推进,参数逐渐接近最优解,此时较大的学习率可能导致参数在最优解附近来回震荡,无法精确收敛,甚至可能越过最优解,需要减小学习率,使参数更新更加精确。
比如 α = 1 1 + d e c a y _ r a t e × e p o c h _ n u m α 0 \alpha=\frac{1}{1+decay\_rate\times epoch\_num}\alpha_0 α=1+decay_rate×epoch_num1α0其中,decay_rate是衰减率,一个超参数,epoch_num是训练轮数, α 0 \alpha_0 α0是初始学习率。该公式是一个逆时间衰减。还有其他的方式如步长衰减、指数衰减、自适应衰减。
局部最优问题(了解)
在使用梯度下降等优化算法训练神经网络时,算法沿着梯度方向更新参数以最小化损失函数。当抵达局部最优解时,该点处梯度为 0,算法会认为找到了最优值而停止更新,但这不一定是全局最优解。从图像上看,损失函数曲面在局部最优解处形成 “谷底”,在其周围小区域内函数值都比它大。
早期认为深度学习训练易陷入局部最优,影响模型性能。但研究发现,实际神经网络尤其是大模型,参数众多,损失函数在高维空间复杂,遇到梯度为 0 的点大概率不是局部最优点,而是鞍点(部分维度为凸函数,部分维度为凹函数的点,梯度也为 0 )。在高维空间中,要达到局部最优需所有维度都是凹函数,概率极低。
因此,使用更好的算法如Adam算法更快地走出鞍点和局部最优附近的平稳段。