数据扩充
简单的数据扩充方式
- 图像水平翻转(水平饭庄可以令数据集扩充一倍)
- 随机抠取(一般用较大的正方形在原图的随机位置处抠取图像块,抠取的次数决定了数据集扩充的倍数)卷积神经网络模型的输入一般是方形图像
- 尺度变换(一般是将图像分辨率变成原图的0.8,0.9,1.1,1.2,1.3等倍数,将尺度变换后的图像作为扩充的训练样本加入原训练集)
- 旋转(增加卷积神经网络对物体尺度和方向上的鲁棒性)
- 对原图或者已经变换的图像(或者图像块)进行色彩抖动(色彩抖动是在RGB颜色空间对原有RGB色彩分布进行轻微的扰动,也可以在HSV颜色空间尝试随机改变图像原有的饱和度和名度或者对色调进行微调)
在实践中,可以将上述几种方式叠加使用,便可以将图像扩充至原有数量的数倍甚至数十倍。
特殊的数据扩充方式
Fancy PCA
监督式数据扩充
数据预处理
** 实际操作中,应首先划分好训练集、验证集和测试集,计算均值仅针对划分后的训练集计算,不可以直接在未划分的所有图像上计算均值,因为这样会违背机器学习的基本原理,即“模型训练过程中能且仅能从训练集中获取信息”。**
网络参数初始化
- 全部初始化为0(如果参数进行了全零初始化,那么网络神经元将毫无能力对此作出改变,从而无法进行模型训练 )
- 随机初始化(可以将参数值设定为接近0的一个很小的随机数,假设随机参数服从高斯分布或者均匀分布都是较有效的初始化方法)
- 其他初始化方法(利用预训练模型:将预训练模型的参数作为新任务上模型的参数初始化)
激活函数
Sigmoid函数
如下图所示,当自变量大于5或者小于-5时,梯度接近0,导致在误差反向传播过程中导数处于该区域的误差很难甚至无法传递至前层,进而导致整个网络无法正常训练。
并且,Sigmoid型激活函数值域的均值不是0而是正数,这样的结果不符合我们对神经网络内数值的期望应为0的设想。
t a n h ( x ) tanh(x) tanh(x)型函数
t
a
n
h
(
x
)
tanh(x)
tanh(x)型函数是在
S
i
g
m
o
i
d
Sigmoid
Sigmoid型函数基础上为解决均值问题提出的激活函数:
t
a
n
h
(
x
)
=
2
σ
(
2
x
)
−
1
tanh(x)=2\sigma(2x)-1
tanh(x)=2σ(2x)−1
该函数又称为双曲正弦函数,其值域范围是
(
−
1
,
+
1
)
(-1,+1)
(−1,+1),输出响应的均值是0。但是使用该函数仍然会发生“梯度饱和”现象。
修正线性单元 (ReLU)
为了避免梯度饱和现象的发生,在神经网络中引入了ReLU。该函数是目前深度卷积神经网络中最为常用的激活函数之一。该函数形式如下:
在
x
≥
0
x\geq0
x≥0时,完全消除了Sigmoid型函数的梯度饱和效应;
计算复杂度上,该函数相对前两者的指数函数计算更加简单;
并且该函数有助于随机梯度下降方法收敛,收敛速度约快6倍左右。
在
x
≤
0
x\leq0
x≤0时,梯度便为0,也就是说对于小于0的这部分卷积结果相应,一旦变成负值便无法影响网络训练,该现象被称为“死区”。
Leaky ReLU
参数化ReLU
参数化ReLU的提出很好的解决了Leaky ReLU中超参数
α
\alpha
α不易设定的问题:参数化ReLUctant直接将
α
\alpha
α也作为一个中可以学习的变量融入 模型的整体训练过程 。参数的求解仍然使用链式法则。
随机化ReLU
随机化ReLU就是将 α \alpha α随机化。
指数化线性单元(ELU)
目标函数
深度网络中的目标函数是整个网络模型的“指挥棒”。
分类任务的目标函数
交叉熵损失函数
合页损失函数
坡道损失函数
合页损失函数的设计理念是“对错误越大的样本施加越严重的惩罚”。但合页损失函数对噪声的抵抗能力较差。如果某样本本身标记错误或者样本本身是离群点,则由于错分导致该样本分类误差会很大很大,会影响整个分类超平面的学习,从而降低模型泛化能力。非凸损失函数的引入很好地解决了这个问题。
坡道损失函数和Tukey’s biweight损失函数分别是分类任务和回归任务中非凸损失函数的代表。其针对噪声数据和离群点具有良好的抗造特性,因此常被称为“鲁棒损失函数”。
这类损失函数的共同特点是在分类(回归)误差较大的区域进行了“截断”,使得较大的误差不再大程度影响整个误差函数。
坡道损失函数的定义:
大间隔交叉熵损失函数
中心损失函数
大间隔交叉熵损失函数主要考虑增大类间距离。而中心损失函数则在考虑类间距离的同时还将一些注意力放在减小类内差异上。
因为中心损失函数本身考虑类内差异,因此,可以将该函数与其他考虑类间差异的函数结合起来使用,如交叉熵损失函数。
回归任务的目标函数
回归任务中,样本真实标记同样对应一条向量,但是与分类任务真实标记的区别在于,回归任务真实标记的每一维是实数,而不是仅仅有0和1.
残差的概念:
ℓ 1 \ell_1 ℓ1损失函数
ℓ 2 \ell_2 ℓ2损失函数
Turkey’s biweight 损失函数
超参数设定和网络训练
网络超参数设定
输入数据像素大小
使用卷积神经网络处理图像问题时,对不同输入图像为得到同规格输出,同时便于GPU设备并行,会统一将图像压缩到
2
n
2^n
2n大小。
汇合层参数的设定
汇合层的核大小一般也设为较小的值,如 2 × 2 2\times2 2×2, 3 × 3 3\times3 3×3等。常用的参数设定为 2 × 2 2\times2 2×2,汇合步长是2。为了不丢弃过多输入响应而损失网络性能,汇合操作极少使用超过 3 × 3 3\times3 3×3大小的汇合操作。
训练技巧
-
训练数据随机打乱
-
学习率的设定:一个理想的学习率会促进模型收敛,而不理想的学习率甚至会直接导致模型直接目标函数损失值“爆炸”无法完成训练。(初始学习率不应过大;训练过程中,学习率应随着轮数增加而减缓)
-
批规范化操作:批规范化操作不仅可以加快模型收敛速度,而且更重要的是在一定程度缓解了深层网络的一个难题“梯度弥散”,从而使得训练深层网络模型更加容易和稳定。并且,批规范化操作不仅适用于深层网络,对传统的较浅层网络而言,批规范化也能对网络泛化性能起到一定提升作用。
“批规范化”,即在模型每次随机梯度下降训练时,通过mini-batch来对相应的网络相应做规范化操作,使得结果向量的均值是0,方差是1.
-
网络模型优化算法选择:
- 随机梯度下降法:经典的随机梯度下降是最常见的神经网络优化方法,收敛效果稳定,不过收敛速度比较慢。
- 基于动量的随机梯度下降法:用于改善经典的随机梯度下降法更新时可能产生的震荡现象,通过积累前几轮的“动量”信息辅助参数更新: v t ← μ ⋅ v t − 1 − η ⋅ g v_t\leftarrow\mu \cdot v_{t-1}-\eta\cdot g vt←μ⋅vt−1−η⋅g w t ← w t − 1 + v t w_t\leftarrow w_{t-1}+v_t wt←wt−1+vt μ \mu μ是动量因子,控制动量信息对整体梯度更新的影响程度,一般设置为0.9。基于动量的随机梯度下降法除了可以抑制振荡,还可以在网络训练中后期趋于收敛、网络参数在局部最小值附近来回振荡时帮助其跳出局部限制,找到最优的网络参数。关于动量因子,除了设定为0.9的静态设定方式,还可以将其设置为动态因子。一种常用的动态设定方式是将动量因子初始值设置为0.5,之后随着训练轮数的增长逐渐变成0.9或者0.99。
- Nesterov型动量随机下降法:是在上述动量梯度下降法更新梯度时加入对当前梯度的校正。相比一般动量法,Nesterov型动量法对于凸函数在收敛性证明上有更强的理论保证,同时在实际应用中,Nesterov型动量法也有更好的表现
以上这些优化算法都是为了使梯度更新更加灵活,这对于优化神经网络这种拥有非凸且异常复杂函数空间的学习模型尤为重要。
不平衡样本的处理
数据层面的处理方法
数据层面的处理方法多借助数据采样法使整体训练集样本趋于平衡。
数据重采样
简单的数据重采样包括上采样和下采样。
对于样本较少类,,可以使用上采样,即复制该类图像,直到与样本最多类的样本数一致。也可以采用数据扩充方式替代简单的复制操作。
对于样本数较多的类别,可以使用下采样。对深度学习而言,下采样不能直接随机丢弃一部分图像,这样做会降低训练数据多样性从而影响模型的泛化能力。应该在批处理训练时,对每批随机抽取的图像严格控制其样本较多类别的图像数量。(二分的时候,应该令正例和反例的比例相同)
**仅适用上采样可能引起模型过拟合问题。更保险且有效的数据重采样是将上采样和下采样结合起来使用。
类别平衡采样
算法层面处理方法
代价敏感方法
代价敏感方法可以概括为两种:一个基于代价敏感矩阵,一个是基于代价敏感向量。
基于代价敏感矩阵的代价敏感
基于代价敏感向量的代价敏感
其实类似代价敏感矩阵,只是将每一个样本的代价单独摘出来,作为样本的一个属性。
代价敏感法中权重的指定方式
根据样本比例指定
根据混淆矩阵指定
混淆矩阵用来度量模型或学习算法在监督学习中预测能力的优劣。
混淆矩阵的每一列代表一个类类的实例预测,每一行代表其真实类别。
一种代价敏感矩阵如下:
更优的方案考虑各类的错分比例,并以此调整各类的错分权重:
模型集成方法
集成学习是机器学习中的一类学习方法,是指训练多个学习器并将它们组合起来使用的方法。深度模型的集成多从“数据层面”和“模型层面”两方面着手。
数据层面的集成方法
测试阶段数据扩充
“简单集成”法是针对不平衡样本问题的一种集成学习解决方案。“简单集成”法对于样本较多的类采取降采样,每次采样数依照样本数量最少的类别而定,这样没类取到的样本数可保持均等。采样结束后,针对每次采样得到的子数据集训练模型。最后对测试数据的测试依据训练得到若干个模型的解决取平均得到。
模型层面的集成方法
单模型集成
多层特征融合
深度卷积神经网络具有层次性的特点,不同层特征富含的语义信息可以相互补充,在图像语义分割、细粒度图像 检索,基于视频的表象性格分析等任务重常见多层特征融合策略的使用。
多层特征融合操作可时可以直接将不同层网络特征级联而对于特征融合应该选取哪些网络层,一个实践经验是:最好使用靠近目标函数的几层卷积特征,因为越深特征包含的高层语义性越强、分辨能力也越强;较浅层的特征较普适,用于特征融合很可能起不到作用甚至会起到反作用。
网络“快照”集成法
多模型集成
多模型生成策略
- 同一模型不同初始化
- 同一模型不同训练轮数
- 不同目标函数
- 不同网络结构
多模型集成方法
- 直接平均法
- 加权平均法
- 投票法(少数服从多数,但是多数必须是一般票数以上;或者直接听从多数投票)
- 堆叠法