文章目录
前言
本文涉及参数的最优化更新算法、权重参数的初始值、Batch Normalization、过拟合解决方法(正则化、Dropout)、超参数的设定方法。
1、优化器的选择(参数的更新算法)
1.1、随机梯度下降法(SGD)
SGD:对随机选择的数据进行的梯度下降法。
x
t
+
1
=
x
t
−
η
∇
f
(
x
t
)
(1-1)
\bm x_{t+1}=\bm x_{t}-\eta\nabla \bm f(x_t)\tag{1-1}
xt+1=xt−η∇f(xt)(1-1) 缺点:
(1) 选择适当的学习率困难,若选择太小,收敛速度会很慢;若选择太大,则损失函数的值将在极小值附近震荡,甚至偏离。
(2) 高度非凸的损失函数中,如何避免陷入局部次优解、被困在鞍点。
(3)当梯度不均匀时,参数移动路径易出现“之”字形移动现象,学习效率低下。
1.2、Momentum
m
t
+
1
=
β
m
t
−
η
∇
f
(
x
t
)
x
t
+
1
=
x
t
+
m
t
+
1
(1-2)
\begin{aligned} &\bm m_{t+1}=\beta \bm m_{t}-\eta \nabla \bm f(x_t) \\ &\bm x_{t+1}=\bm x_{t}+\bm m_{t+1} &\end{aligned} \tag{1-2}
mt+1=βmt−η∇f(xt)xt+1=xt+mt+1(1-2) 改进之处:对比SGD优化器,加入了
β
m
\beta \bm m
βm项,积累了之前梯度指数级衰减的平均。
优点:若当前时刻的梯度与历史时刻梯度方向相似,参数更新趋势则会在当前时刻加强;若相反,则会削弱参数当前的更新趋势。
1.3、AdaGrad
x
t
+
1
=
x
t
−
η
∑
i
=
1
t
(
∇
f
(
x
i
)
)
2
+
ϵ
∇
f
(
x
t
)
(1-3)
\bm x_{t+1}=\bm x_{t}-\frac{\eta }{\sqrt {\sum_{i=1}^t(\nabla \bm f(x_i))^2}+\epsilon}\nabla \bm f(x_t)\tag{1-3}
xt+1=xt−∑i=1t(∇f(xi))2+ϵη∇f(xt)(1-3) 改进之处:对比SGD优化器,AdaGrad将
η
\eta
η设置为全局学习率,由全局学习率除以历史梯度平方和的平方根,得到当前时刻参数的学习率,使得每个参数的学习率不同,达到自适应的效果。其中
ϵ
\epsilon
ϵ是一个小常数。
优点:学习率可以自适应的减小。
缺点:学习率过早、过量的减少。
1.4、RMSProp
h t + 1 = β h t + ( 1 − β ) ( ∇ f ( x t ) ) 2 x t + 1 = x t − η h t + 1 + ϵ ∇ f ( x t ) (1-4) \begin{aligned} &\bm h_{t+1}=\beta\bm h_{t}+ (1-\beta) (\nabla f(x_t))^2 \\ &\bm x_{t+1}=\bm x_{t}-\frac{\eta }{\sqrt{\bm h_{t+1}}+\epsilon}\nabla f(x_t) &\end{aligned} \tag{1-4} ht+1=βht+(1−β)(∇f(xt))2xt+1=xt−ht+1+ϵη∇f(xt)(1-4) 改进之处:对比AdaGrad优化器,以指数衰减的移动平均方式对梯度进行累积,逐渐遗忘掉历史梯度信息,衰减系数 β \beta β控制着历史信息的获取多少。
1.5、Adam
m t + 1 = β 1 m t − η ∇ f ( x t ) h t + 1 = β 2 h t + ( 1 − β 2 ) ( ∇ f ( x t ) ) 2 m ^ t + 1 = m t + 1 / ( 1 − β 1 t ) h ^ t + 1 = h t + 1 / ( 1 − β 2 t ) x t + 1 = x t − η h ^ t + 1 + ϵ m ^ t + 1 (1-5) \begin{aligned} &\bm m_{t+1}=\beta_1 \bm m_{t}-\eta \nabla f(x_t) \\ &\bm h_{t+1}=\beta_2\bm h_{t}+ (1-\beta_2) (\nabla f(x_t))^2 \\ &\hat \bm m_{t+1}=\bm m_{t+1}/(1-\beta_1^t) \\ &\hat \bm h_{t+1}=\bm h_{t+1}/(1-\beta_2^t) \\ &\bm x_{t+1}=\bm x_{t}-\frac{\eta }{\sqrt{\hat \bm h_{t+1}}+\epsilon}\hat \bm m_{t+1} &\end{aligned} \tag{1-5} mt+1=β1mt−η∇f(xt)ht+1=β2ht+(1−β2)(∇f(xt))2m^t+1=mt+1/(1−β1t)h^t+1=ht+1/(1−β2t)xt+1=xt−h^t+1+ϵηm^t+1(1-5) Adam优化器可以看作经过修正后的Momentum算法和 RMSProp算法的结合。较为常用,一般取 η = 0.001 \eta= 0.001 η=0.001, β 1 = 0.9 \beta_1=0.9 β1=0.9, β 2 = 0.999 \beta_2=0.999 β2=0.999, ϵ = 1 0 − 8 \epsilon=10^{-8} ϵ=10−8。
2、权重的初始值
权重的初始值不适当时,可能造成网络层的激活值呈偏向0的分布,这时易发生梯度消失现象;也可能使网络层的激活值集中分布在某个值附近,造成网络的表现力不佳。故一般使用推荐的初始值。
Xavier初始值:如果前一层的节点数为n,则初始值使用标准差为
1
n
\frac1{\sqrt n \ }
n 1的高斯分布。(适用于激活函数为sigmoid、tanh等S型曲线函数时)
He初始值:如果前一层的节点数为n,则初始值使用标准差为
2
n
\frac2{\sqrt n \ }
n 2的高斯分布。(适用于激活函数为ReLU函数时)
3、Batch Normalization
适当的权重初始值可以使网络层的激活值分布拥有适当的广度。为了使网络层的激活值分布拥有适当的广度,还可以强制调整激活值的分布,Batch Normalization基于此思想产生。
Batch Normalization以batch为单位,对{
x
1
,
x
2
,
⋯
,
x
m
x_1,x_2,\cdots,x_m
x1,x2,⋯,xm}数据分布进行正规化,使数据变为均值为0、方差为1的分布{
x
^
1
,
x
^
2
,
⋯
,
x
^
m
\hat x_1,\hat x_2,\cdots,\hat x_m
x^1,x^2,⋯,x^m},最后对正规化后的数据进行缩放和平移的变换。
μ
B
=
1
m
∑
i
=
1
m
x
i
σ
=
1
m
∑
i
=
1
m
(
x
i
−
μ
B
)
2
x
^
i
=
x
i
−
μ
B
σ
B
2
+
ϵ
y
i
=
γ
x
^
i
+
β
(3-1)
\begin{aligned} &\mu_B=\frac1m\sum_{i=1}^mx_i \\ &\sigma=\frac1m\sum_{i=1}^m(x_i-\mu_B)^2 \\ &\hat x_i=\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} \\ &y_i=\gamma\hat x_i+\beta &\end{aligned}\tag{3-1}
μB=m1i=1∑mxiσ=m1i=1∑m(xi−μB)2x^i=σB2+ϵxi−μByi=γx^i+β(3-1)
BN一般放在激活函数之前,其计算流程可简述如下:
- (1) 计算样本均值。
- (2) 计算样本方差。
- (3) 样本数据标准化处理
- (4) 进行平移和缩放处理。
计算流程中,引入了γ和β两个参数。一开始 γ = 1 , β = 0 \gamma=1,\beta=0 γ=1,β=0,然后通过学习调整到合适的值。
使用Batch Norm的优点:
- (1) 可以使学习快速进行(适当增大学习率)。
- (2) 对参数的初始值依赖减小。
- (3) 抑制过拟合(降低Dropout等的必要性)。
4、抑制过拟合
过拟合是深度学习中很常见的一个问题,过拟合指模型只能拟合训练数据,但不能很好地拟合不包含在训练数据中的其他数据。
发生过拟合的原因,主要有以下两个:
- (1) 模型拥有大量参数、表现力强。
- (2) 训练数据少
4.1、正则化
正则化是一种常用的抑制过拟合的方法。范数刻画着模型复杂程度,模型中大的权重对模型输出有较强的影响力,通过权值衰减,在学习过程中对大的权重进行惩罚,达到抑制过拟合的目的。
L1范数:向量中每个元素绝对值的和
∣
∣
w
∣
∣
1
=
∑
i
∣
w
i
∣
(4-1)
||w||_1=\sum_i|w_i|\tag{4-1}
∣∣w∣∣1=i∑∣wi∣(4-1)
加入L1范数,新的损失函数定义为
L
=
L
0
+
λ
∑
i
N
w
i
(4-2)
L=L_0+\lambda\sum_i^Nw_i\tag{4-2}
L=L0+λi∑Nwi(4-2)
其中,
L
0
L_0
L0代表原损失函数,
λ
\lambda
λ为控制正则化强度的超参数。
λ
\lambda
λ越大,对大的权重施加的惩罚就越重。L1正则化项不可导,优化损失函数较为复杂。
L2范数:向量中每个元素的平方和再开方
∣
∣
w
∣
∣
2
=
∑
i
N
w
i
2
(4-3)
||w||_2=\sqrt{\sum_i^Nw_i^2}\tag{4-3}
∣∣w∣∣2=i∑Nwi2(4-3)
加入L2范数,新的损失函数定义为
L
=
L
0
+
1
2
λ
∑
i
N
w
i
2
(4-4)
L=L_0+\frac12\lambda\sum_i^Nw_i^2\tag{4-4}
L=L0+21λi∑Nwi2(4-4)
其中,
L
0
L_0
L0,
λ
\lambda
λ意义同上。L2正则化项可导,优化简洁,较为常用。
4.2、DropOut
当模型变得复杂时,还可以使用Dropout方法,以抑制过拟合。
Dropout是一种在学习过程中随机删除神经元的方法。训练时,每传递一次数据,就会随机选出隐藏层的神经元,然后将其删除,被删除的神经元不再进行信号的传递。测试时,所有的神经元都保留,各个神经元的输出需要乘上训练时的删除比例。
5、超参数的设定
超参数一般凭借经验设定,在不清楚的情况下,可凭借调参算法调参,常用的调参算法有:Grid search(网格搜索)、Random search(随机搜索)、Bayesian Optimization(贝叶斯优化)等。使用超参数学习过程中,epoch可以适当减小,能够缩短调参所需时间。
网格搜索算法:
- (1) 列出每一种超参数较可能的取值;
- (2) 对不同超参数的取值进行排列组合;
- (3) 使用组合得到的超参数进行学习,通过验证数据评估识别精度;
- (4) 重复(3)过程,根据识别精度的结果,筛选超参数组合。
随机搜索算法:
- (1) 对每一种超参数设定取值范围;
- (2) 在设定的范围中随机采样;
- (3) 使用采样得到的超参数进行学习,通过验证数据评估识别精度;
- (4) 重复(2)(3)过程,根据识别精度的结果,缩小超参数范围。
贝叶斯优化算法:
- (1) 随机产生几组超参数,分别使用这几组超参数进行学习,得到识别精度,构成初始化点(初始化点对应黑盒函数上的点,函数输入为各个超参数,函数输出为识别精度);
- (2) 高斯过程回归(假设超参数间符合联合高斯分布);
- (3) 取采集函数(Acquisition Function,简称AC函数)的最大值所对应的点,并使用该点对应的函数输入(即各个超参数)进行学习,得到识别精度,进而得到一个新的真实点,并将该点加入到初始化点之中;
- (4) 重复(2)(3)过程(可设置识别精度的阈值,以便于跳出算法),筛选出合适的点,取出该点中的超参数信息。
下一篇:深度学习入门知识梳理(四):卷积神经网络(CNN)