提升深度学习模型表现的技巧

时间:2021-08-11 05:20:07

本文是对提升深度学习表现的一些方法总结,主要来自于,也借鉴了PPT的部分思想。

Data Augmentation增加训练数据

几何变换

图像翻转(flipping)、剪切(crop)、缩放(scale)、旋转(rotation)、平移(shift)

对比度变换(contrast)

在图像的HSV颜色空间,改变饱和度S和V亮度分量,保持色调H不变.

颜色变换(color)

a) 在训练集像素值的RGB颜色空间进行PCA, 得到RGB空间的3个主方向向量,3个特征值, p1 , p2 , p3 , λ1 , λ2 , λ3 。对每幅图像的每个像素 Ixy=[IRxy,IGxy,IBxy] 加上如下的变化: [p1,p2,p3][α1λ1,α2λ2,α3λ3]T 。其中: αi 是满足均值为0,方差为0.1的随机变量.
b) 噪声扰动(noise): 对图像的每个像素RGB进行随机扰动, 常用的噪声模式是椒盐噪声和高斯噪声

预处理

零中心化(zero-center)

在每个维度上都减去平均值后得到零中心化数据

归一化(Normalization)

每个维度都除以其标准差来调整其数值范围到-1~1。
提升深度学习模型表现的技巧

PCA

先对数据进行零中心化处理,然后计算协方差矩阵。将数据变换到协方差矩阵的特征基准轴上。这样就对数据进行了解相关(协方差矩阵变成对角阵)。
数据协方差矩阵的第(i, j)个元素是数据第i个和第j个维度的协方差,该矩阵的对角线上的元素是方差。我们可以对数据协方差矩阵进行SVD(奇异值分解)运算。

白化(whitening)

白化操作的输入是特征基准上的数据,然后对每个维度除以其特征值来对数值范围进行归一化。
提升深度学习模型表现的技巧
参考:CS231n课程笔记翻译:神经网络笔记 2

权重初始化

零初始化(All Zero Initialization)

不推荐

小随机数初始化(Initialization with Small Random Numbers)

权重初始值要非常接近0又不能等于0。解决方法就是将权重初始化为很小的数值,以此来打破对称性。
比如: weights0.001×N(0,1)
现在一般都使用截断正态分布。

偏置(biases)的初始化

通常将偏置初始化为0,这是因为随机小数值权重矩阵已经打破了对称性。
参考:CS231n课程笔记翻译:神经网络笔记 2

卷积核

池化层

一般max pooling比avg pooling效果会好一些。

参数更新

一阶(随机梯度下降)方法,动量方法,Nesterov动量方法

a) 普通更新:x += - learning_rate * dx
b) 动量(Momentum)更新
在这个版本的更新中,物理观点建议梯度只是影响速度,然后速度再影响位置:

# 动量更新
v = mu * v - learning_rate * dx # 与速度融合
x += v # 与位置融合

在这里引入了一个初始化为0的变量v和一个超参数mu。这个变量(mu)在最优化的过程中被看做动量(一般值设为0.9),但其物理意义与摩擦系数更一致。这个变量有效地抑制了速度,降低了系统的动能,不然质点在山底永远不会停下来。
c) Nesterov动量

学习率退火

通常,实现学习率退火有3种方式:
a) 随步数衰减:每进行几个周期就根据一些因素降低学习率。典型的值是每过5个周期就将学习率减少一半,或者每20个周期减少到之前的0.1。在实践中可能看见这么一种经验做法:使用一个固定的学习率来进行训练的同时观察验证集错误率,每当验证集错误率停止下降,就乘以一个常数(比如0.5)来降低学习率。
b) 指数衰减。数学公式是\alpha=\alpha_0e^{-kt},其中\alpha_0,k是超参数,t是迭代次数(也可以使用周期作为单位)
c) 1/t衰减的数学公式是\alpha=\alpha_0/(1+kt),其中\alpha_0,k是超参数,t是迭代次数。

二阶方法

基于牛顿法。

Adaptive Learning Rate逐参数适应学习率方法(Adagrad,RMSProp)

前面讨论的所有方法都是对学习率进行全局地操作,并且对所有的参数都是一样的。学习率调参是很耗费计算资源的过程,所以很多工作投入到发明能够适应性地对学习率调参的方法,甚至是逐个参数适应学习率调参。虽然很多这些方法依然需要其他的超参数设置,但是其观点是这些方法对于更广范围的超参数比原始的学习率方法有更良好的表现。如下:
a) Adagrad
b) RMSprop
c) Adam
参考CS231n课程笔记翻译:神经网络笔记3(下)

Fine-tune on pre-trained models

提升深度学习模型表现的技巧
参考:Must Know Tips/Tricks in Deep Neural Networks

常用激活函数(Activation Functions)

a) Sigmoid
易饱和使梯度消失,在接近输出值0和1的地方梯度接近于0
b) Tanh双曲正切
c) ReLU
优选
d) Leaky ReLU
e) Maxout
参考:CS231n课程笔记翻译:神经网络笔记1(上)

正则化(Regularizations)

L1 regularization

它会让权重向量在最优化的过程中变得稀疏(即非常接近0)。

L2 regularization

相较L1正则化,L2正则化中的权重向量大多是分散的小数字。在实践中,如果不是特别关注某些明确的特征选择,一般说来L2正则化都会比L1正则化效果好。

最大范式约束(Max norm constraints)

给每个神经元中权重向量的量级设定上限,并使用投影梯度下降来确保这一约束。

Dropout

可以理解为是对数量巨大的子网络们做了模型集成(model ensemble),以此来计算出一个平均的预测。

Batch Normalization layer

可以理解为在网络的每一层之前都做预处理。加速收敛,加上它之后一般可以把dropout去掉。详见:为什么会出现Batch Normalization层?
参考:CS231n课程笔记翻译:神经网络笔记 2

损失函数

折叶损失

优化困难

Cross Entropy

Softmax分类器。(交叉熵是对「出乎意料」的度量)

Square Error

参考:CS231n课程笔记翻译:神经网络笔记 2

通过做图来观察网络训练的情况(Insights from Figures)

可以画出随着不同参数训练集测试集的改变情况,观察它们的走势图来分析到底什么时候的参数比较合适。
a) 不同学习率与loss的曲线图,横坐标是epoch,纵坐标是loss。见图1。
b) 不同的batchsize与loss的曲线图,横坐标是training batches,纵坐标是loss。见图2。
c) 训练集和验证集准确率对比,横坐标是epoch,纵坐标是准确率。见图3。
提升深度学习模型表现的技巧
参考:参考:Must Know Tips/Tricks in Deep Neural Networks

模型集成(Ensemble)

数据集不均衡

参考:
[DeepLearning]深度学习之五常见tricks
Must Know Tips/Tricks in Deep Neural Networks
Top 10 Deep Learning Tips & Tricks