深度学习常见的提高性能的调参技巧

                             深度学习常见的调参技巧

相关Paper:http://arxiv.org/abs/1812.01187

1.启发式算法

  •  线性学习率缩减(Linear scaling learning rate)

大的batchsize会减少梯度噪声

训练过程中,学习率大小随着batch_size的增大而增大是可行的,如初始化lr=0.1

Batch_size=256,则切换到不同的设备上batch_size大小变为为b后,则lr=0.1*b/256

  • 学习率热身(learning rate warmup)

设初始化lr=a,则在第i个epoch后,1<=i<=m,lr=ia/m,这样可使训练进程更稳定(初始化学习率a一般较小),如初始学习率为0.01,然后每一个epoch增大0.01,在第10个epoch后变为0.1

  • Zero γ

将BN层中的γ初始化为0,这样会易于初始的训练

  • 无偏置衰减(no bias decay)

一般来说,权重衰减会经常应用到所有的可学习的参数中去,包括weights和bias,但在相关文章中推荐只让weights进行衰减,而不对bias进行权重衰减。至于其他的参数比如BN层中的γ和β则不进行正则化处理

2.低精度训练

众所周知,为了减少计算要求/提高训练过程/本地化部署,一般情况下,都会训练低精度模型,如将原来的FP32(32-bit floating point)模型转而变为FP16甚至更低精度的进行训练,当然这会对模型的精度会产生一定的损失。而相关文章中提出,利用FP16进行训练的同时,对FP32的参数副本进行更新会是一个比较好的解决办法,既能够提高训练速度,又能够保持一定的精度。

3.模型结构的修改

对于resnet模型进行模型的修改,主要是修改三个部分:

  • 输入层修改:将resnet50的输入后的1个7*7conv层改为三个3*3conv层会显著降低计算消耗
  • Resnet block 修改左分支,将原始的block中的1*1卷积,s=2修改为1*1卷积,s=1,后面原始的3*3,s=1修改为3*3,s=2的结构,这样会使得在做1*1卷积时不会丢失信息(若不做,大约会丢失3/4的信息)
  • Resnet block修改右分支 将原始的1*1 s=2的卷积之前加上2*2,s=2的avgpool层,与此同时,原始的1*1 s=2的卷积转变为1*1 s=1 的卷积

 

4.余弦权重衰减

利用余弦权重衰减相比在特定的step更改learningrate可以使得训练进程加快,并有一定的精度提高

5.label平滑

原始的label在train过程中单张图片的预测置信度会在其ground truth label处趋近于1,,而在其他classs处趋于0,这样在计算交叉熵损失的过程中有可能会潜在的出现过拟合的现象,未解决这个现象,需要对true probability qi进行修改,修改如下:

这样的话会对避免过拟合有一定的好处。一般情况下,ε取0.1

6.知识蒸馏

利用老师-学生模型来对同一类的网络模型进行提高。

7.混合训练

在混合训练中,可以用随机选择两个样本xi,yi和(xj,yj)按照一定的比例进行混合,即

其中,λ∈[0,1],(\widehat{x},\widehat{y})为混合后样本。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值