tips/tricks in deep neural network

1、数据集的扩增

    现在数据集扩增成为训练深度网络的必须步骤

1.1 水平翻转,随机剪裁,颜色抖动(color jittering)(HSV空间中,改变s和v分量)

1.2 fancy pca

step1:

计算rgb三个分量的协方差(注意转为一维)

im = cv.imread('1_1.png')#读入图片数据

b,g,r = cv.split(im)#分离通道

b_f = b.flatten() #展平 每个通道

g_f = g.flatten()

r_f = r.flatten()

step2:

计算三个通道之间的协方差

b_cov = np.cov([b_f,g_f,r_f])

step3:

计算协方差矩阵的特征值和特征向量p1,p2,p3和对应的特征值a1,a2,a3。

并计算[p1,p2,p3][k1*a1,k2*a2,k3*a3].T,其中k1,k2,k3服从0均值,方差为0.1的高斯分布。

并且每个ki都不重复,这样即使抽取到相同的样本也,经过fancy pca后也不会产生相同的效

果。

2、预处理

2.1 0均值并且标准化(对于图像每个像素的范围为0-255,所以没有必要进行标准化)

2.2 pca白化

step1: pca,得到协方差矩阵的特征值和特征向量

tips/tricks in deep neural network

step2: 把特征向量除以对应特征值的方差归一化

tips/tricks in deep neural network

3、初始化

1、0均值初始化

每个神经元都输出相同的值,反向传播时候梯度都是相同的,而我们希望神经元之间不同,从而能学习到不同的特征。

2、用小随机数初始化

对于层次不深的网络ok,对于过深的网络发现**传递存存在阻碍(也就是**传递到后面发现已经是均值为0,方差为0的分布了)

tips/tricks in deep neural network

3、利用大的随机数初始化

tips/tricks in deep neural network

从上图可以看出,神经元输出不是1就是-1,很明显神经元已经饱和。

3.4、xavier初始化

参数随机初始化为一个小的随机数存在一个问题:一个神经元输出的方差会随着输入神经元数量的增多而变大。对于有n个输入单元的神经元来说,考虑χ2分布,每个输入的方差是1/n时,总的方差是1,因此,我们对每个输入的标准差乘以1/sqrt(n),每个神经元的参数初始化代码为:

w = np.random.randn(n) / sqrt(n)

以上的讨论都是基于sigmod,或者tanh**函数,对于relu**函数采用如下的初始化:

w = np.random.randn(nn_input_dim,nn_hdim) / sqrt(2.0/nn_input_dim)

4、训练

4.1

训练的图片大小最好是2的幂次方。在训练过程中,最好使用较小的卷积核,较小的步长,zero-padding,这样不仅减少参数,而且提高准确率。常用3x3卷积,2x2池化。

4.2 学习率

通过mini-batch的大小划分学习率,通常通过观察验证集的准确率修改学习率。

4.3 fine-tuning

第一种情况,自己的数据和预训练的数据相似,如果自己的数据量较少,可以只训练最后的分类器,如果自己的数据量相当大,可以训练更多的最后的几层。

第二种情况,如果自己的数据和预训练的数据相差比较大,那就要训练更多的层,如果自己数据比较少,那就gg了。

5、**函数

5.1 sigmod

tips/tricks in deep neural network

问题:输出易饱和,输出不是0均值

5.2tanh

tips/tricks in deep neural network

输出0均值,但是没有解决饱和问题。

5.3 relu

tips/tricks in deep neural network

计算简单,不会饱和,并且收敛速度快。

但是如果学习率过大,或者初始化不恰当,神经元变为负,那么反向传播时导数为0,这就是所说的dying relu问题。

下面的relu变体几乎都是为了解决这个问题。

5.4 leaky relu

tips/tricks in deep neural network

为了解决dying relu问题。

5.5 prelu

tips/tricks in deep neural network

在x<0的部分,增加了一个参数ai。

5.6 randomized relu

训练时随机确定ai,测试时固定ai。

tips/tricks in deep neural network

6、regularzations

6.1 L2正则化

倾向于使用更多的维度表示,防止过拟合。

6.2 L1正则化

稀疏性,一般而言L2效果更好。

6.3 max norm constrains

6.4 dropout

7、分析图

tips/tricks in deep neural network

首先使用比较高的学习率,再使用比较低的学习率

tips/tricks in deep neural network

上图中总体的趋势比较平,那么学习率就是太低,如果总体的趋势并没有减少,那么学习率过高,对应图1中的绿色的线。

曲线的宽度代表着每次mini batch的梯度变化,mini batch越大,所计算的梯度越接近于全部训练集梯度,此时曲线就越窄。

tips/tricks in deep neural network

红色的曲线代表训练集的准确率,绿色的曲线代表验证集的准确率,中间的gap越大,就证明已经过拟合了,这个时候需要增加正则的力度。如果没有gap,说明训练集和验证集对于这个网络没啥区别,网络并没有从训练集中学习到任何东西,说明网络的学习性能太差了。此时需要增加模型的容量。

8、集成学习

在机器学习中会训练多个学习器,然后把他们通过某个策略结合起来,取得比较好的效果。

8.1 相同的模型不同的初始化

8.2 通过交叉验证选择超参数,选择多个top model

8.3 单一的模型不同的检查点

8.4 多个模型通过不同的数据集进行训练

9、不均匀分布的数据集

对于类别之前数据量不同,对结果产生不良的影响。

9.1、通过过采样平衡数据集的数量

9.2、特殊的剪裁增加数据

9.3、对不同的分类数据,分步fine-tuning模型