CNN笔记(6)---超参数设定和网络训练

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=(f1)/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: μβ1mmi=1xi μ β ← 1 m ∑ i = 1 m x i //计算批处理数据均值

2: δ2β1mmi=1(xiμβ)2 δ β 2 ← 1 m ∑ i = 1 m ( x i − μ β ) 2 //计算批处理数据的方差

3: x^ixiμβδ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)

基本算法

wtwt1ηg w t ← w t − 1 − η ⋅ g

一阶梯度信息 g 完全依赖于当前批数据在网络目标函数上的误差,

故可将学习率 η 理解为当前批的梯度对网络整体参数更新的影响程度。

经典的随机梯度下降是最常见的神经网络优化方法,收敛效果较稳定,不过收敛速度过慢。

2.基于动量的随机梯度下降法

用于改善SGD更新时可能产生的振荡现象

更新策略:

vtμvt1ηgwtwt1+vt v t ← μ ⋅ v t − 1 − η ⋅ g w t ← w t − 1 + v t

其中, μ μ 为动量因子,控制动量信息对整体梯度更新的影响程度,一般设为0.9

基于动量的随机梯度下降法除了可以抑制振荡,还可在网络训练中后期趋于收敛、网络参数在局部最小值附近来回震荡时帮助其跳出局部限制,找到更优的网络参数

除了设定为 0.9 的静态设定方式,还可将其设置为动态因子。一种常用的动态设定方式是将动量因子初始值设为 0.5,之后随着训练轮数的增长逐渐变为 0.9 或 0.99

3.Nesterov型动量随机下降法

在上述动量梯度下降法更新梯度时,加入对当前梯度的校正

对于凸函数在收敛性证明上有更强的理论保证,
实际使用中也有更好表现

waheadwt1+μvt1vtμvt1ηwaheadwtwt1+vt w a h e a d ← w t − 1 + μ ⋅ v t − 1 v t ← μ ⋅ v t − 1 − η ⋅ ∇ w a h e a d w t ← w t − 1 + v t

wahead ∇ w a h e a d 表示 wahead w a h e a d 的导数

====
以上三种方法的学习率都固定不变,并未将学习率的自适应性考虑进去

4.Adagrad法

针对学习率自适应问题,Adagrad法根据训练轮数的不同,对学习率进行了动态调整

ηtηglobaltt=1g2t+ϵgt η t ← η g l o b a l ∑ t ′ = 1 t g t ′ 2 + ϵ ⋅ g t

式中, ϵ 为一个小常数(通常设定为 106 10 − 6 数量级)以防止分母为零。

分母为梯度的累加

网络训练前期,梯度累加较小,动态调整会放大原步长 uglobal u g l o b a l

训练后期,梯度累加较大时,可以起到约束原步长的作用

1.仍然需要人为知道一个全局学习率
2.分母上的梯度累加过大会使得学习率为0,导致训练过早结束
5.Adadelta法

对Adagrad 扩展,引入衰减因子 ρ ρ ,消除Adagrad对全局学习率的依赖

rtρrt1+(1ρ)g2ηtst1+ϵrt+ϵstρst1+(1ρ)(ηtg)2 r t ← ρ ⋅ r t − 1 + ( 1 − ρ ) ⋅ g 2 η t ← s t − 1 + ϵ r t + ϵ s t ← ρ ⋅ s t − 1 + ( 1 − ρ ) ⋅ ( η t ⋅ g ) 2

ρ ρ 为区间[0,1]之间的实值:

较大的 ρ ρ 值促进网络更新

较小的 ρ ρ 值抑制网络更新

两个超参数的推荐设定为 ρ = 0.95, ϵ = 106 10 − 6

? s1,t1 s 1 , t 1 怎么给?

6.RMSProp法

RMSProp 法可以视作是Adadelta的一个特例

依然使用全局学习率替换掉Adadelta的 st s t

rtρrt1+(1ρ)g2ηtηglobalrt+ϵ r t ← ρ ⋅ r t − 1 + ( 1 − ρ ) ⋅ g 2 η t ← η g l o b a l r t + ϵ

关于RMSProp法中参数设定一组推荐值:
ηglobal=1ρ=0.9ϵ=106 η g l o b a l = 1 ρ = 0.9 ϵ = 10 − 6

7.Adam法

本质上是带有动量项的RMSProp法

它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率

adam的优点主要在于经过偏置校正后,每一次迭代学习率都有一个确定范围,这样可以使得参数更新比较平稳

mtβ1mt1+(1β1)gtvtβ2vt1+(1β2)g2tm^tmt1βt1v^tvt1βt1wtwt1ηm^tv^t+ϵ m t ← β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t v t ← β 2 ⋅ v t − 1 + ( 1 − β 2 ) ⋅ g t 2 m ^ t ← m t 1 − β 1 t v ^ t ← v t 1 − β 1 t w t ← w t − 1 − η ⋅ m ^ t v ^ t + ϵ

Adam法仍然需指定基本学习率 η,对于其中的超参数设定可遵循:

β1 = 0.9, β2 = 0.999, ϵ = 10−8, η = 0.001。

11.2.5 微调神经网络

除了从头训练自己的网络,一种更有效、高效的方式是微调已预训练好的网络模型。

用目标任务数据在原先预训练模型上继续进行训练过程
  1. 由于网络已在原始数据上收敛,因此应设置较小的学习率在目标数据上微调,如 10−4 数量级或以下;
  2. CNN 浅层描述更加泛化的特征(边缘,纹理),深层特征抽象对应高层语义;在新数据上fine tune 时,泛化特征更新可能和程度较小,高层语义特征更新可能和程度较大;
    故根据不同层设置不同学习率:网络深层的学习率稍大于浅层学习率

  3. 根据目标任务数据与原始数据相似程度d采用不同微调策略:

    • 目标数据较少,与原数据非常相似:仅微调靠近目标函数的后几层
    • 目标数据充足,与原数据非常相似:微调更多层,可全部微调
    • 目标数据充足,与原数据差异较大:多调节一些网络层,直至微调全部
    • 目标数据较少,与原数据差异较大:具体问题具体对待

    两个数据集间的相似程度极难定量评价,
    可根据任务目标(如,该任务是一般物体分类、人脸识别还是细粒度级别物体分类等)、
    图像内容(如,以物体为中心还是以场景为中心)
    等因素定性衡量

  4. 针对目标数据较少,与原数据差异较大的情况:

    –>借助部分原始数据与目标数据协同训练多目标学习框架

    —>在浅层特征空间(shallow feature space)选择目标数据的近邻作为原始数据子集

    —>将fine tune 阶段改造为多目标学习任务

    —>一者将目标任务基于原始数据子集;二者将目标任务基于全部目标数据。

参考文献:解析卷积神经网络—深度学习实践手册

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值