11.超参数设定和网络训练
11.1 网络超参数设定
网络结构相关的各项超参数:输入图像像素、卷积层个数、卷积核的相关参数
11.1.1 输入数据像素大小
- 不同输入图像为得到同规格输出,统一压缩到 2n 2 n 大小:32x32,96x96,224x224
- 分辨率越高,有助于性能提升,(特别是attention model),但是会延长训练时间
- 改变原始模型的输入图像分辨率,需要重新改变全连接层输入滤波器的大小和相关参数
11.1.2 卷积层参数的设定
卷积层超参数:卷积核大小,卷积操作步长,卷积核个数
卷积核大小
小卷积核相比大卷积核:
1.增强网络容量和模型复杂度
2.减少卷积参数个数
推荐3x3,5x5的小卷积核
对应步长建议为1
填充操作zeros-padding
两个功效:
1.充分利用边缘信息
2.搭配合适参数,保持卷积层输出与输入同等大小,避免输入大小的急剧减小
对卷积核大小 f × f、步长为1的卷积操作,当 p=(f−1)/2 p = ( f − 1 ) / 2 时,便可维持输出与原输入等大.
卷积核个数
卷积核个数通常设置为 2 的次幂,如 64,128,512,1024 …
11.1.3 汇合层参数设定(pooling)
为了不丢弃过多输入响应,一般设为较小的值
常用2x2,步长为2
在此设定下,输出结果大小仅为输入数据长宽大小的四分之一
11.2 训练技巧
11.2.1 训练数据随机打乱
采用mini-batch的训练机制,每个epoch前进行shuffle
提高收敛速率,略微提升测试集效果
11.2.2 学习率的设定
两个原则
1.初始学习率不宜过大。以0.01,0.001为宜
2.学习率应该随着轮数增加而减缓。
减缓机制一般有如下三种:
1)轮数减缓(step decay) e.g.五轮后减半,下一个五轮后再次减半
2)指数减缓(exponential decat) e.g. 按轮数增长,指数插值递减
3)分数减缓(1/t decay) e.g. 若原始学习率为
lro
l
r
o
,学习率按照下式递减:
lrt=lr0/(1+kt)
l
r
t
=
l
r
0
/
(
1
+
k
t
)
,其中,k为超参数,控制减缓的幅度,t为训练轮数
借助模型训练曲线
画出每轮训练后模型在目标函数上的损失值曲线
损失值不能“爆炸”,也不能下降太慢
开始下降明显,后面明显变慢是学习率较大的表现
11.2.3 批规范化操作(batch normalization BN)
不仅加快收敛速度,而且解决“梯度弥散”的问题
在模型每次随机梯度下降训练时,通过 mini-batch 来对相应的网络响应(activation)做规范化操作,使得结果(输出信号各个维度)的均值为 0,方差为 1.
算法流程
输入: x:β={x1,...,m} x : β = { x 1 , . . . , m }
输出: {yi=BNγ,β(xi)} { y i = B N γ , β ( x i ) }
1: μβ←1m∑mi=1xi μ β ← 1 m ∑ i = 1 m x i //计算批处理数据均值
2: δ2β←1m∑mi=1(xi−μβ)2 δ β 2 ← 1 m ∑ i = 1 m ( x i − μ β ) 2 //计算批处理数据的方差
3: x^i←xi−μβδ2β+ϵ√ x ^ i ← x i − μ β δ β 2 + ϵ //规范化
4: yi←γx^i+β=BNγ,β(xi) y i ← γ x ^ i + β = B N γ , β ( x i )
//尺度变换和偏移5:return 学习的参数 γ γ 和 β β
======
内部协变量偏移
可通过BN来规范化某些层或所有层的输入,从而固定每层输入信号的均值和方差
即使网络较深层的响应或梯度很小,也可以通过BN的规范化作用将其尺度变大,从而解决可能的“梯度弥散”
l2 l 2 规范化拉大尺度
BN的使用位置:作用在非线性映射函数前。
值得一提的是, BN的变种也作为一种有效的特征处理手段应用于人脸识别等任务中,
即特征规范化(feature normalization,简称 FN)。
FN作用于网络最后一层的特征表示上(FN 的下一层便是目标函数层),FN 的使用可提高习得特征的分辨能力,适用于类似人脸识别、行人重检测、车辆重检测等任务。
11.2.4 网络模型优化算法的选择
一阶优化算法的代表
为简化起见,我们假设待学习参数为 ω,学习率(或步长)为 η,一阶梯度值为 g, t 表示第 t 轮训练。
1.随机梯度下降法(SGD)
基本算法
一阶梯度信息 g 完全依赖于当前批数据在网络目标函数上的误差,
故可将学习率 η 理解为当前批的梯度对网络整体参数更新的影响程度。
经典的随机梯度下降是最常见的神经网络优化方法,收敛效果较稳定,不过收敛速度过慢。
2.基于动量的随机梯度下降法
用于改善SGD更新时可能产生的振荡现象
更新策略:
其中, μ μ 为动量因子,控制动量信息对整体梯度更新的影响程度,一般设为0.9
基于动量的随机梯度下降法除了可以抑制振荡,还可在网络训练中后期趋于收敛、网络参数在局部最小值附近来回震荡时帮助其跳出局部限制,找到更优的网络参数
除了设定为 0.9 的静态设定方式,还可将其设置为动态因子。一种常用的动态设定方式是将动量因子初始值设为 0.5,之后随着训练轮数的增长逐渐变为 0.9 或 0.99
3.Nesterov型动量随机下降法
在上述动量梯度下降法更新梯度时,加入对当前梯度的校正
对于凸函数在收敛性证明上有更强的理论保证,
实际使用中也有更好表现
∇wahead ∇ w a h e a d 表示 wahead w a h e a d 的导数
====
以上三种方法的学习率都固定不变,并未将学习率的自适应性考虑进去
4.Adagrad法
针对学习率自适应问题,Adagrad法根据训练轮数的不同,对学习率进行了动态调整
式中, ϵ 为一个小常数(通常设定为 10−6 10 − 6 数量级)以防止分母为零。
分母为梯度的累加
网络训练前期,梯度累加较小,动态调整会放大原步长 uglobal u g l o b a l
训练后期,梯度累加较大时,可以起到约束原步长的作用
1.仍然需要人为知道一个全局学习率
2.分母上的梯度累加过大会使得学习率为0,导致训练过早结束
5.Adadelta法
对Adagrad 扩展,引入衰减因子
ρ
ρ
,消除Adagrad对全局学习率的依赖
ρ ρ 为区间[0,1]之间的实值:
较大的 ρ ρ 值促进网络更新
较小的 ρ ρ 值抑制网络更新
两个超参数的推荐设定为 ρ = 0.95, ϵ = 10−6 10 − 6
? s1,t1 s 1 , t 1 怎么给?
6.RMSProp法
RMSProp 法可以视作是Adadelta的一个特例
依然使用全局学习率替换掉Adadelta的 st s t
关于RMSProp法中参数设定一组推荐值:
7.Adam法
本质上是带有动量项的RMSProp法
它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率
adam的优点主要在于经过偏置校正后,每一次迭代学习率都有一个确定范围,这样可以使得参数更新比较平稳。
Adam法仍然需指定基本学习率 η,对于其中的超参数设定可遵循:
β1 = 0.9, β2 = 0.999, ϵ = 10−8, η = 0.001。
11.2.5 微调神经网络
除了从头训练自己的网络,一种更有效、高效的方式是微调已预训练好的网络模型。
用目标任务数据在原先预训练模型上继续进行训练过程
- 由于网络已在原始数据上收敛,因此应设置较小的学习率在目标数据上微调,如 10−4 数量级或以下;
CNN 浅层描述更加泛化的特征(边缘,纹理),深层特征抽象对应高层语义;在新数据上fine tune 时,泛化特征更新可能和程度较小,高层语义特征更新可能和程度较大;
故根据不同层设置不同学习率:网络深层的学习率稍大于浅层学习率根据目标任务数据与原始数据相似程度d采用不同微调策略:
- 目标数据较少,与原数据非常相似:仅微调靠近目标函数的后几层
- 目标数据充足,与原数据非常相似:微调更多层,可全部微调
- 目标数据充足,与原数据差异较大:多调节一些网络层,直至微调全部
- 目标数据较少,与原数据差异较大:具体问题具体对待
两个数据集间的相似程度极难定量评价,
可根据任务目标(如,该任务是一般物体分类、人脸识别还是细粒度级别物体分类等)、
图像内容(如,以物体为中心还是以场景为中心)
等因素定性衡量针对目标数据较少,与原数据差异较大的情况:
–>借助部分原始数据与目标数据协同训练:多目标学习框架
—>在浅层特征空间(shallow feature space)选择目标数据的近邻作为原始数据子集
—>将fine tune 阶段改造为多目标学习任务
—>一者将目标任务基于原始数据子集;二者将目标任务基于全部目标数据。
参考文献:解析卷积神经网络—深度学习实践手册