1 一些通用技巧
- 使用 ADAM 优化器
- ReLU 是最好的非线性
- 不要在输出层使用激活函数
- 为每一层添加一个偏置项
- 使用方差缩放初始化
- 白化(归一化)输入数据
- 以合理地保留动态范围的方式对输入数据进行缩放
- 一般不要使用学习率衰减
- 卷积层有 64 或 128 个滤波器,这就已经足够了
- 池化是为了变换不变性
2 一些调试技巧
- 调整学习率
- 调整(小)批量处理的规模
- 删掉批归一化层
- 检查你矩阵的重构
- 检查损失函数
3 卷积神经网络的设计思想
- 从LeNet5到VGG(基于深度的设计)
- 1*1卷积(基于升维降维的设计)
- GoogLeNet(基于宽度和多尺度的设计)
- MobileNets(基于分组卷积的设计)
- 残差网络
- 非正常卷积(基于不规则卷积和感受野调整的设计)
- 密集连接网络(残差网络的升级,极致的不同层间的信息融合)
- 非局部神经网络(充分提高层内感受野的设计)
- 多输入网络(一类有多种应用的网络)
- 3D卷积(将卷积升维到3D空间设计)
- RNN和LSTM(时序网络结构模型)
- GAN(近两年最火的下一代无监督深度学习网络)
- VGG
- NASNet
- 轻量化网络(适用于移动端的算法)- MobileNet系列和ShuffleNet系列
4 CNN中的奇技淫巧
- 卷积只能在同一组进行吗?– Group convolution
- 卷积核一定越大越好?– 3×3卷积核
- 每层卷积只能用一种尺寸的卷积核?– Inception结构
- 怎样才能减少卷积层参数量?– Bottleneck
- 越深的网络就越难训练吗?– Resnet残差网络
- 卷积操作时必须同时考虑通道和区域吗?– DepthWise操作
- 分组卷积能否对通道进行随机分组?– ShuffleNet
- 通道间的特征都是平等的吗? — SEnet
- 能否让固定大小的卷积核看到更大范围的区域?– Dilated convolution
- 卷积核形状一定是矩形吗?– Deformable convolution 可变形卷积核
上面10个技巧的主要思想总结如下:
卷积核方面:
- 大卷积核用多个小卷积核代替;
- 单一尺寸卷积核用多尺寸卷积核代替;
- 固定形状卷积核趋于使用可变形卷积核;
- 使用1×1卷积核(bottleneck结构)。
卷积层通道方面:
- 标准卷积用depthwise卷积代替;
- 使用分组卷积;
- 分组卷积前使用channel shuffle;
- 通道加权计算。
卷积层连接方面:
- 使用skip connection,让模型更深;
- densely connection,使每一层都融合上其它层的特征输出(DenseNet)
5 工业界使用的深度学习高效网络结构设计
首先是三巨头的雏形
- squeezenet
- mobilenet
- shufflenet
升级版
- squeezenext
- mobilenetv2
- shufflenetv2
还有一个耿直boy
- mnasnet(从名字上看和NASNet很像)
高效网络的设计思想有:
1、depthwise separable convolutions
2、low rank filter
3、pointwise group convolution
4、避免网络分支太多,或者group太多
5、减少element wise的操作
6 图像分类算法优化技巧
加快模型训练部分
1、增大学习率
2、用一个小的学习率先训几个epoch(warmup)
3、每个残差块的最后一个BN层的γ参数初始化为0
4、不对bias参数执行weight decay操作
优化网络结构部分
1、ResNet-B
2、ResNet-C
3、ResNet-D
模型训练调优部分
1、学习率衰减策略采用cosine函数
2、采用label smoothing
3、知识蒸馏(knowledge distillation)
4、引入mixup