赞
踩
神经网络调参是深度学习中不可或缺的一环,它直接影响着模型的性能和泛化能力。
当前神经网络模型应用到机器学习时仍有一些问题,主要包括两大类。
深度神经网络优化十分困难。首先他的损失函数是一个非凸函数,找到局部最优解容易,但找到全局最优解并非容易。其次,神经网络参数非常多,训练数据很大,所以无法使用计算代价很高的二阶优化方法。最后,神经网络存在梯度消失或爆炸问题。
由于神经网络复杂度很高,拟合能力很强,很容易在训练集上过拟合。因此要考虑一定的正则化方法来改进网络泛化能力。
目前优化方法也很多,本文从网络优化和网络正则化方面介绍这些优化方法。
在网络优化方面:常用优化方法、参数初始化方法、数据预处理方法、逐层正则化方法和超参数优化方法。
在网络正则化方面:
l
1
l_1
l1和
l
2
l_2
l2正则化、权重衰减、提前停止、暂退法、数据增强和标签平滑。
各位道友!道长(zhǎng) 道长(chǎng)
网络优化指寻找一个神经网络模型使得经验风险最小化(防止过拟合,多为结构风险最小化)的过程,包括模型选择和参数学习。
由于风险函数非凸,因此风险最小化是一个非凸优化问题。
此外还存在梯度消失问题。
神经网络种类非常之多,因此很难找到通用的优化方法。
高维空间中,主要要考虑逃离鞍点问题(对比低维空间中的逃出局部最优解问题)。
鞍点:梯度是0,但是在某些维度上是最高点,某些维度上是最低点。
用梯度下降法优化时,会在鞍点附近接近停滞,很难逃离。
神经网络参数很多,且有冗余性。因此会导致各个参数对最终损失的影响很小。因此会导致损失函数在局部最小解附近通常是一个平坦区域,称为平坦最小值。
因此我们训练神经网络的时候,不需要精确找到一个局部最小解,只要在一个局部最小解邻域就够了。
通常,一个模型收敛到平坦的局部最小解时候,鲁棒性更好。
在非常大的神经网络中,大部分局部最小解是等价的。
因此,训练神经网络时,通常没有必要找全局最小值(可能会导致过拟合)。
(1)有效的优化算法提高梯度下降的效率和稳定性
(2)更好的参数初始化方法、数据预处理方法来提高优化效率
(3)修改网络结构得到更好的优化地形
如图,下面是优化后的图形,明显看到优化地形可以让地形更加平滑,凸的地方会少很多。
(4)更好的超参数优化方法
训练神经网络时常用的优化算法大体分为两类:
1)调整学习率,使得优化更稳定
2)**梯度估计修正,**优化训练速度
f
(
x
;
θ
)
f(x;\theta)
f(x;θ)表示一个深度神经网络,
θ
\theta
θ为网络参数,小批量梯度下降时,每次选取K个训练样本
s
t
=
{
(
x
(
k
)
,
y
(
k
)
)
}
k
=
1
K
s_t=\{(x^{(k)},y^{(k)})\}_{k=1}^{K}
st={(x(k),y(k))}k=1K。第t次迭代时,损失函数关于参数
θ
\theta
θ的偏导数为
g
t
=
1
K
∑
(
x
,
y
)
∈
S
t
∂
L
(
y
,
f
(
x
;
θ
)
)
∂
θ
g_t=\frac1K \sum_{(x,y) \in S_t} \frac{\partial L(y,f(x;\theta))}{\partial \theta}
gt=K1(x,y)∈St∑∂θ∂L(y,f(x;θ))
是用梯度下降法更新参数
θ
t
←
θ
t
−
1
−
α
g
t
−
1
\theta_t \leftarrow \theta_{t-1}-\alpha g_{t-1}
θt←θt−1−αgt−1
每次参数更新差值为
Δ
θ
t
\Delta \theta_t
Δθt
Δ
θ
t
=
θ
t
−
θ
t
−
1
\Delta \theta_t=\theta_t-\theta_{t-1}
Δθt=θt−θt−1
因此,在标准小批量梯度下降中, Δ θ t = − α g t − 1 \Delta \theta_t=-\alpha g_{t-1} Δθt=−αgt−1
批量大小(Batch Size)对网络优化影响非常大。
通常,不影响随机梯度的期望,但是会影响随机梯度的方差。
迭代:每一次小批量更新一次
回合:所有训练集样本更新一次
1
E
p
o
c
h
=
(
训练样本数量
N
批量大小
K
)
∗
I
t
e
r
a
t
i
o
n
1 Epoch=(\frac{训练样本数量N}{批量大小K})*Iteration
1Epoch=(批量大小K训练样本数量N)∗Iteration
通常,
经验上看,开始学习率大些保证速度,在收敛最优点附近时小些,避免来回震荡。
每经过T1,T2…次迭代将学习率衰减为原来的 β 1 , β 2 . . . \beta_1,\beta_2... β1,β2...倍。
α
t
=
α
0
1
1
+
β
∗
t
\alpha_t=\alpha_0\frac1{1+\beta*t}
αt=α01+β∗t1
β
\beta
β为衰减率
α
t
=
α
0
β
t
\alpha_t=\alpha_0\beta^t
αt=α0βt
β
<
1
\beta<1
β<1为衰减率
α t = α 0 exp ( − β ∗ t ) \alpha_t=\alpha_0\exp(-\beta*t) αt=α0exp(−β∗t)
α
t
=
1
2
α
0
(
1
+
c
o
s
(
t
π
T
)
)
\alpha_t=\frac12\alpha_0(1+cos(\frac{t\pi}{T}))
αt=21α0(1+cos(Ttπ))
T为总迭代次数
学习率预热:为了提高训练稳定性,在最初几轮迭代时候,使用比较小的学习率,等梯度下降到一定程度后,恢复初始学习率。
一个常用的预热方法是逐渐预热,在预热过程中,学习率为
α
′
t
=
t
T
′
α
0
\alpha{^{'}}_t=\frac{t}{T^{'}}\alpha_0
α′t=T′tα0
T
′
T^{'}
T′为预热的迭代次数
预热结束后,在选择一种学习率衰减的方法逐渐降低学习率。
使用这种方法,有助于逃离鞍点或尖锐最小值
两种周期性学习率调整的示例
由图可见,学习率总体是下降的。
这样可以有助于逃离鞍点~
标准的梯度下降法中,每个参数在每次迭代时候都使用相同的学习率。
由于每个参数在不同维度上收敛速度不同,因此根据不同参数的收敛情况分别设置学习率。
三种算法的对比
AdaGrad | RMSprop | AdaDelta |
---|---|---|
借鉴 l 1 l_1 l1和 l 2 l_2 l2正则化的思想 | AdaGrad的改进 | AdaGrad的改进 |
α \alpha α总体减小 | α \alpha α可以变大变小 | α \alpha α可以变大变小 |
如果每个参数的偏导数累计 G t G_t Gt大,那么学习率较小 | G t G_t Gt计算累计方式变成了指数衰减平均移动 | 引入梯度平方指数衰减移动平均来调整学习率 引入 Δ θ \Delta \theta Δθ的平方的指数衰减权移动平均 |
缺点:一定次数迭代后没有找到最优点,由于学习率已经很小了,很难再继续找到最优点 | 避免了AdaGrad中学习率不断下降以至于过早衰减的缺点 | 一定程度上平抑了学习率的波动 |
如果每次选取的样本数据集较小,损失会震荡下降。也就是说,随机下降方法中每次迭代的梯度估计和整个数据集的最优梯度方向不一致,具有随机性。
一个有效的缓解这种随机性的方式是:通过使用最近一段时间的平均梯度来代替当前随机梯度作为更新的方向,提高优化速度。
动量法:用之前的累积动量来代替真正的梯度
这样每个参数更新的差值取决于最近一段时间内梯度的加权平均。
当某个参数与最近一段时间内梯度方向不一致时,真实的参数更新幅度会变小;
相反,最近一段时间内的梯度方向一致时,真实的参数更新幅度变大,起到加速作用。
一种对动量法的改进,也称为Nesterov动量法
在动量法中,实际参数更新方向
Δ
θ
t
\Delta \theta_t
Δθt为上一步参数更新方向
Δ
θ
t
−
1
\Delta \theta_{t-1}
Δθt−1和当前梯度的反方向
−
g
t
-g_t
−gt的叠加.也就是说,
Δ
θ
t
\Delta \theta_t
Δθt被拆分成了两步
θ
^
=
θ
t
−
1
+
ρ
Δ
θ
t
−
1
Δ
θ
t
=
θ
^
−
α
g
t
\hat{\theta}=\theta_{t-1}+\rho \Delta \theta_{t-1}\\ \Delta \theta_t=\hat{\theta}-\alpha g_t
θ^=θt−1+ρΔθt−1Δθt=θ^−αgt
所以合并后的梯度方向为
Δ θ t = ρ Δ θ t − 1 − α g t ( θ t − 1 − ρ Δ θ t − 1 ) \Delta \theta_t=\rho \Delta \theta_{t-1}-\alpha g_t(\theta_{t-1}-\rho \Delta \theta_{t-1}) Δθt=ρΔθt−1−αgt(θt−1−ρΔθt−1)
动量法和Nesterov加速梯度在参数更新时的比较
可以看做Adam算法和RMS算法的结合。不但适用动量法作为参数更新方向,而且可以自适应调整学习率。
Adam算法一方面计算梯度平方的指数平均 G t G_t Gt(RMSprop类似),一方面计算梯度的指数加权平均 M t M_t Mt(动量法类似)
其中
β
1
\beta_1
β1,
β
2
\beta_2
β2为两个移动平均的衰减率,通常前者取0.9,后者取0.99.
在一开始,尤其是
M
0
=
0
M_0=0
M0=0和
G
0
=
0
G_0=0
G0=0时,带入以上两个公式,有
M
1
=
(
1
−
β
1
)
g
1
M_1=(1-\beta_1)g_1
M1=(1−β1)g1
G
1
=
(
1
−
β
2
)
g
t
⊙
g
t
G_1=(1-\beta_2)g_t \odot g_t
G1=(1−β2)gt⊙gt
这样就存在
M
1
M_1
M1和
G
1
G_1
G1会比真实值
M
1
=
g
t
M_1=g_t
M1=gt和
G
1
=
g
t
⊙
g
t
G_1=g_t \odot g_t
G1=gt⊙gt要小。所以会产生一个很有影响的偏差。所以需要进行对偏差的修正。
所以Adam的参数更新差值为
此外,他也有一个改进版本Nadam算法,是引入Nesterov加速梯度
深度神经网络或循环神经网络中,除了梯度消失外,梯度爆炸也是增加学习效率的主要因素。
如果梯度突然增大,用大的梯度更新参数会让其远离最优点。如图所示
为了避免这种情况,当梯度的模大于一定阈值时,就对梯度进行截断,称为梯度截断。
这样可以让梯度在[a,b]内
截断阈值b是一个超参数,也可以根据一段时间内的平均梯度自动调整。
如果
∣
∣
g
t
∣
∣
2
≤
b
||g_t||^2\leq b
∣∣gt∣∣2≤b,保持
g
t
g_t
gt不变;
否则,令
实验中发现,训练过程对b不是十分敏感,通常一个小的阈值可以得到更好的结果。
各种优化方法汇总:
这几种方法在MNIST数据集上的收敛性比较(学习率0.001,批量大小128)
参数初始化的方式主要有以下三种:
(1)预训练初始化:
不同的参数初值会收敛到不同的局部最优解。好的初始值会得到一个泛化能力高的局部最优解。
通常,一个已经在大模型数据上训练过的模型可以提供一个好的参数初始值,这种初始化方法称为预训练初始化。
预训练模型在目标任务上的学习过程也称为精调
(2)随机初始化
对称权重现象:在神经网络中,如果把参数都设置为0,在第一遍前向计算时候,所有的隐藏层神经元的激活值都相同;反向传播时,所有权重更新也都相同,导致了隐藏层神经元没有区分性。
为了打破这个平衡,比较好的方式时对参数进行随机初始化
(3)固定值初始化
对于一些特殊参数,我们可以根据经验用特殊的固定值来进行初始化。比如偏置值b。
虽然预训练初始化通常有更好的收敛性和泛化性,但是灵活性不够。
这里介绍三类常用的随机初始化方法。
主要有以下两种:
1)基于高斯分布的初始化。(就是正态分布)
2)基于均匀分布的初始化。
这中方法中,如何设置方差是比较关键的。
如果参数取值范围太小:一是导致神经元输出太小,可能多层之后会慢慢消失;二是使得Sigmoid型激活函数丢失非线性能力
为了降低方差对网络性能和优化效率的影响,基于固定方差的随机初始化方法一般需要配合逐层规范化(后面会讲)来使用
根据神经元的连接数量来自适应调整初始化分布的方差,称作方差缩放。
假设一个神经网络中,第i层神经元是
a
(
l
)
a^{(l)}
a(l),前一层的
M
l
−
1
M_{l-1}
Ml−1个神经元的输出是
a
(
l
−
1
)
a^{(l-1)}
a(l−1)
假设w和a的均值为0并且独立。
所以
a
(
l
)
a^{(l)}
a(l)的均值为
a
(
l
)
a^{(l)}
a(l)的方差为
也就是说,均值不变,但是方差被放大或缩小了
M
l
−
1
v
a
r
(
w
i
(
l
)
)
M_{l-1}var(w_i^{(l)})
Ml−1var(wi(l))倍(学过概率统计的话,这个推导应该不难)。
为了使信号不被过分放大或者减弱,使之维持原来的在
v
a
r
(
a
(
l
−
1
)
)
var(a^{(l-1)})
var(a(l−1))附近,让
M
l
−
1
v
a
r
(
w
i
(
l
)
)
M_{l-1}var(w_i^{(l)})
Ml−1var(wi(l))=1更加合理。
即
同理,反向传播中,误差信号
δ
\delta
δ也不至于被放大或缩小,保持原来的方差,有
作为折中,可以设置
这些是理想的方差。
当第l层使用ReLU激活函数时,通常有一半的神经元输出为0,因此分布的方差也近似为使用恒等函数时的一半。
只考虑前向传播,参数w的理想方差为
一个L层的等宽线形网络为
y
=
W
(
L
)
W
(
L
−
1
)
.
.
.
W
(
1
)
x
y=W^{(L)}W^{(L-1)}...W^{(1)}x
y=W(L)W(L−1)...W(1)x
我们只要保持
W
(
l
)
(
W
(
l
)
)
T
=
I
W(l)(W{(l)})^T=I
W(l)(W(l))T=I(其中
I
I
I为单位矩阵),就可以一定程度上缓解梯度爆炸或消失问题。
方法:
1)用均值0,方差1的高斯分布初始化一个矩阵
2)将这个矩阵用奇异值分解(以后我就发文章讲奇异值分解)得到两个正交矩阵,并使用其中之一作为权重矩阵
一般而言,样本特征的尺度往往差异很大。
如果一个机器学习算法在缩放全部或部分特征后不影响他的学习和预测,称该算法有尺度不变性
比如线性分类器是尺度不变的,但是KNN是尺度敏感的,计算欧式距离时,尺度大的特征会占据主导地位。
理论上讲,神经网络是尺度不变性,但是尺度不同的输入特征会增加训练难度。
比如,tanh的导数在[-2,2]上敏感,其余地方导数接近1。如果参数范围是[-100,100],那么他的训练效率会受到很大影响。
尺度不同会造成大多数位置上的梯度方向不是最优的搜索方向。使用梯度下降时,需要多次迭代才能收敛。
指把数据特征转换为相同尺度的方法。比如Sigmoid型函数把不同的尺度的特征压缩到一个比较受限的空间内。
通过缩放,把每一个特征的取值范围规范化到[0,1]或[-1,1]
也叫Z值规范化
将每一维特征都调整为均值为0,方差为1.
方法:
1)先计算均值和方差
然后标准化(学概率对这个应该不陌生)
使用主成分分析(PCA)去掉各个成分之间的相关性(主成分分析我在后面会讲的)
优点:
1)更好的尺度不变性
缓解内部协变量偏移(随机梯度下降时,每次参数更新都会导致该神经层的输入分布发生改变。越高的层,输入分布改变的越明显)
2)更平滑的优化地形
BN可以对神经网络任意中间层进行规范化操作。
一个神经网络,第l层净输入为
z
(
l
)
z^{(l)}
z(l),神经元输出为
a
(
l
)
a^{(l)}
a(l)。
为了提高效率,考虑使得
z
(
l
)
z^{(l)}
z(l)(比
a
(
l
)
a^{(l)}
a(l)更利于优化)的分布一致(比如规范化到标准正态分布)
由于目前的优化算法时基于小批量随机梯度下降法,所以准确估计
z
(
l
)
z^{(l)}
z(l)的期望和方差不可行,通常用当前小批量样本集的均值和方差的近似估计。
由于对
z
(
l
)
z^{(l)}
z(l)规范化会让取值集中到0附近,如果用Sigmoid激活函数,会减弱神经网络的非线性功能。
为了使规范化不对网络造成负面影响,可以通过缩放和平移变换改变取值区间
层规范化与BN非常类似,不同的LN是对一个中间层的所有神经元进行规范化。
一个神经网络,第l层净输入为
z
(
l
)
z^{(l)}
z(l),它的均值和方差为
然后,层规范化的定义为
循环神经网络隐藏层为
h
t
h_t
ht,层归一化更新为
对于K个样本的小批量集合
Z
(
l
)
=
[
z
(
1
,
l
)
,
z
(
2
,
l
)
,
.
.
.
,
z
(
K
,
l
)
]
Z^{(l)}=[z^{(1,l)},z^{(2,l)},...,z^{(K,l)}]
Z(l)=[z(1,l),z(2,l),...,z(K,l)]
LN是对矩阵的每一列进行规范化
BN是对矩阵的每一行进行规范化
权重规范化是对神经网络的连接权重进行规范化。
假设第l层神经元
a
(
l
)
=
f
(
W
a
(
l
−
1
)
+
b
)
a^{(l)}=f(Wa {(l-1)}+b)
a(l)=f(Wa(l−1)+b),将W再参数化为
引入新参数
g
i
g_i
gi为标量,
v
i
v_i
vi和
a
(
l
−
1
)
a^{(l-1)}
a(l−1)的维数相同
常见的超参数有:
1)网络结构,包括神经元的连接关系,层数,每层神经元的数量,激活函数的类型等
2)优化参数,包括优化方法,学习率,小批量样本数量
3)正则化系数
一种尝试所有超参数组合来寻找一组超参数的配置方法。
如果超参数是连续的,可以将超参数离散化(不可等间隔化)
如
a
∈
{
0.01
,
0.1
,
0.4
,
1
}
a \in \{0.01,0.1,0.4,1\}
a∈{0.01,0.1,0.4,1}
网格搜索根据这些超参数的不同组合分别训练一个模型,然后测试各自的性能,选一个最好的
对超参数进行随机组合,选取一个性能最好的配置
假设超参f(x)服从高斯分布
p
(
f
(
x
)
∣
x
)
p(f(x)|x)
p(f(x)∣x),那么先验概率就是正态分布
贝叶斯优化过程就是根据已有的N组实验结果H来建模高斯过程,并计算f(x)的后验分布
p
(
f
(
x
)
∣
x
,
H
)
p(f(x)|x,H)
p(f(x)∣x,H)。
为了让后验分布接近真实分布,需要对样本进行足够的采样。但是超参数优化的每一个样本的生成成本很高。
因此定义一个收益函数来判断一个样本是否能给建模的高斯过程提供更多的收益。
一个常用的收益函数是期望改善,期望改善函数为
算法如下:
缺点:高斯过程建模需要计算协方差矩阵的逆,时间复杂度
O
(
N
3
)
O(N^3)
O(N3)
超参数优化中,如果我们在较早的阶段就估计出一组配置的效果差,就可以提前中止这种配置的评估,就会将更多的资源给其他的配置。
具体的,由于目前大多采用随机梯度下降法进行优化网络,因此可以通过一组超参数的学习曲线来预估这组超参数配置是否有希望得到比较好的结果。
如果曲线不收敛或者收敛较差,可以提前停止
还有另外一种方法是逐次减半法,如下
机器学习的关键是泛化问题,即在样本真实分布上的期望风险最小化。由于神经网络的拟合能力非常强,训练集的错误率会降到非常低,但是可能会导致过拟合。
正则化是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法。
l
1
l_1
l1和
l
2
l_2
l2正则化是机器学习中最常用的正则化方法。
该方法的优化问题可写为
θ
∗
=
arg
θ
min
1
N
∑
n
=
1
N
L
(
y
,
f
(
x
;
θ
)
)
+
λ
l
p
(
θ
)
\theta^*=\arg_\theta \min \frac1N \sum_{n=1}^N L(y,f(x;\theta))+\lambda l_p(\theta)
θ∗=argθminN1n=1∑NL(y,f(x;θ))+λlp(θ)
其中,p通常是1或2。
带正则化的优化问题等驾驭下列带约束的优化问题
θ
∗
=
arg
θ
min
1
N
∑
n
=
1
N
L
(
y
,
f
(
x
;
θ
)
)
s
.
t
.
l
p
(
θ
)
≤
1
\theta^*=\arg_\theta \min \frac1N \sum_{n=1}^N L(y,f(x;\theta)) \\ s.t. \quad l_p(\theta) \leq 1
θ∗=argθminN1n=1∑NL(y,f(x;θ))s.t.lp(θ)≤1
其中
l
1
l_1
l1范数在0点不可导,故这样来近似
l
1
(
θ
)
=
∑
d
=
1
D
θ
d
2
+
ϵ
l_1(\theta)=\sum_{d=1}^D \sqrt{\theta_d^2+\epsilon}
l1(θ)=d=1∑Dθd2+ϵ
D为参数数量,
ϵ
\epsilon
ϵ为一个很小的数
折中的方法为同时加入 l 1 l_1 l1和 l 2 l_2 l2正则化,称为弹性网络正则化
类似于动量法
每次参数更新时,引入一个衰减系数
θ
t
←
(
1
−
β
)
θ
t
−
1
−
α
g
t
\theta_t \leftarrow (1-\beta)\theta_{t-1}-\alpha g_t
θt←(1−β)θt−1−αgt
β
\beta
β通常为0.0005
使用一个和训练集独立的样本集合称为验证集,用验证集的错误代替期望错误。当验证集的错误率不再下降,就停止迭代
当训练一个神经网络时,如果一层的神经元很多,很可能有几个神经元的行为是一致的,一起增大一起减小,这叫协同效应。这种情况会降低模型的能力,而且训练的模型很脆弱,鲁棒性不是很好。
训练神经网络时,可以随机丢弃一部分神经元来避免过拟合,称为暂退法
最简单的方法是,设置一个固定概率p来判定要不要保留神经元。对于神经层y,可以引入一个掩蔽函数mask(·),使得
y
=
f
(
W
m
a
s
k
(
x
)
+
b
)
y=f(Wmask(x)+b)
y=f(Wmask(x)+b),
mask(·)定义为
m
a
s
k
(
x
)
=
{
m
⊙
x
当训练阶段时
p
x
当测试阶段时
mask(x)=
可以从不同的角度来理解Dropout法
在循环神经网络上应用暂退法时,不能在时间维度上进行丢弃,否则会损害RNN在时间维度上的记忆能力。
深度神经网络一般在需要大量数据的时候才能获得理想的效果。
如果数据量有限,可以通过数据增强来增加数据量,提高鲁棒性,避免过拟合。
同数据增强一样,我们不但可以给样本特征加入随机噪声,还可以给样本标签加入一定的噪声。
如果训练数据集的一些样本标签是错误标注的,那么最小化这些样本的损失函数会导致过拟合。
一种改善的正则化方法是标签平滑,即在输出标签中添加噪声来避免过拟合。
如果一个x的标签是用one-hot向量表示。
y
=
[
0
,
.
.
.
,
0
,
1
,
0
,
.
.
.
,
0
]
T
y=[0,...,0,1,0,...,0]^T
y=[0,...,0,1,0,...,0]T
如果样本以
ϵ
\epsilon
ϵ的概率为其他类。平滑后的标签为(K为标签数量)
y
~
=
[
ϵ
K
−
1
,
.
.
.
,
ϵ
K
−
1
,
1
−
ϵ
,
ϵ
K
−
1
,
.
.
.
,
ϵ
K
−
1
]
T
\tilde{y}=[\frac{\epsilon}{K-1},...,\frac{\epsilon}{K-1},1-\epsilon,\frac{\epsilon}{K-1},...,\frac{\epsilon}{K-1}]^T
y~=[K−1ϵ,...,K−1ϵ,1−ϵ,K−1ϵ,...,K−1ϵ]T
但是上面的方法并没有考虑到标签之间的相关性。
一种更好的做法是知识蒸馏,按照类别相关性来赋予其他标签的不同概率。比如,先训练一个更复杂的大网络(教师网络),然后用大网络的输出作为软目标来训练网络(学生网络)
为了得到一个分类效果不错的网络,总体而言要从三个方面来考虑
模型 | 优化 | 正则化 |
---|---|---|
用ReLU作为激活函数 | SGD+mini-batch(动态学习率、Adam算法优先) | 早停法(Early-Stop) |
残差连接 | 每次迭代都重新随机排序 | 暂退法(Dropout) |
逐层规范化 | 数据预处理(规范化) | 权重衰减 |
- | 参数初始化(预训练) | 批量规范化 |
- | - | l 1 l_1 l1和 l 2 l_2 l2正则化 |
- | - | 数据增强 |
通过这些方法,一般就可以得到一个不错的神经网络模型
今天的内容是神经网络的网络优化与正则化部分,本文内容很多,但是又很重要。读本文时,可以结合邱锡鹏老师的蒲公英书进行学习。
夏天真的到了,天气很热,但是风景很好。
路边的花儿开的繁盛,树儿挺拔茂盛。
夏天总给人一种绿色的、五彩缤纷的有生命力的美。
大家在学习之余也要抽空多出去走走转转,多看看脚下周围,生活很累但请别忘了生活中的美。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。