深度学习实战(十五)——数据不够时训练深度学习的方法

      深度学习大牛吴恩达曾经说过:做 AI 研究就像造宇宙飞船,除了充足的燃料之外,强劲的引擎也是必不可少的。假如燃料不足,则飞船就无法进入预定轨道。而引擎不够强劲,飞船甚至不能升空。类比于 AI,深度学习模型就好像引擎,海量的训练数据就好像燃料,这两者对于 AI 而言同样缺一不可。

  随着深度学习技术在机器翻译、策略游戏和自动驾驶等领域的广泛应用和流行,阻碍该技术进一步推广的一个普遍性难题也日渐凸显:训练模型所必须的海量数据难以获取。

  以下是一些当前比较流行的机器学习模型和其所需的数据量,可以看到,随着模型复杂度的提高,其参数个数和所需的数据量也是惊人的。

                    深度学习实战(十五)——数据不够时训练深度学习的方法_第1张图片

在深度学习中,当数据量不够大时候,常常采用下面5中方法:

1. 人工增加训练集的大小.

通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augmentation(数据扩充)

这是解决过拟合最有效的方法,只要给足够多的数据,让模型「看见」尽可能多的「例外情况」,它就会不断修正自己,从而得到更好的结果:

       深度学习实战(十五)——数据不够时训练深度学习的方法_第2张图片
如何获取更多数据,可以有以下几个方法:

从数据源头获取更多数据:这个是容易想到的,例如物体分类,我就再多拍几张照片好了;但是,在很多情况下,大幅增加数据本身就不容易;另外,我们不清楚获取多少数据才算够;
根据当前数据集估计数据分布参数,使用该分布产生更多数据:这个一般不用,因为估计分布参数的过程也会代入抽样误差。
数据增强(Data Augmentation):通过一定规则扩充数据。如在物体分类问题里,物体在图像中的位置、姿态、尺度,整体图片明暗度等都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充;

      不同的任务背景下, 我们可以通过图像的几何变换, 使用以下一种或多种组合数据增强变换来增加输入数据的量. 这里具体的方法都来自数字图像处理的内容, 相关的知识点介绍, 网上都有, 就不一一介绍了.

  • 旋转 | 反射变换(Rotation/reflection): 随机旋转图像一定角度; 改变图像内容的朝向;
  • 翻转变换(flip): 沿着水平或者垂直方向翻转图像;
  • 缩放变换(zoom): 按照一定的比例放大或者缩小图像;
  • 平移变换(shift): 在图像平面上对图像以一定方式进行平移; 
    可以采用随机或人为定义的方式指定平移范围和平移步长, 沿水平或竖直方向进行平移. 改变图像内容的位置;
  • 尺度变换(scale): 对图像按照指定的尺度因子, 进行放大或缩小; 或者参照SIFT特征提取思想, 利用指定的尺度因子对图像滤波构造尺度空间. 改变图像内容的大小或模糊程度;
  • 对比度变换(contrast): 在图像的HSV颜色空间,改变饱和度S和V亮度分量,保持色调H不变. 对每个像素的S和V分量进行指数运算(指数因子在0.25到4之间), 增加光照变化;
  • 噪声扰动(noise): 对图像的每个像素RGB进行随机扰动, 常用的噪声模式是椒盐噪声和高斯噪声;
  • 颜色变换(color): 在训练集像素值的RGB颜色空间进行PCA, 得到RGB空间的3个主方向向量,3个特征值, p1, p2, p3, λ1, λ2, λ3. 对每幅图像的每个像素Ixy=[IRxy,IGxy,IBxy]T进行加上如下的变化:

                                        [p1,p2,p3][α1λ1,α2λ2,α3λ3]T

      其中:αi是满足均值为0,方差为0.1的随机变量.

参考资料:

深度学习中的Data Augmantation方法(转)基于keras :https://www.cnblogs.com/love6tao/p/5841648.html

2. Regularization(规范化、正则化). 

通过在Loss Function 后面加上正则项(规范化项)可以抑制过拟合的产生.。规范化有时候被称为权重衰减(weight decay)或者L2规范化。以 L2 regularization为例,L2 规范化的想法是增加一个额外的项到代价函数上,这个项叫做规范化项

                                                                         

      其中第一个项就是常规的代价函数的表达式第二个项就是所有权重的平方的和。然后使用一个因子 λ/2n 进行量化调整,其中 λ > 0 可以称为规范化参数,其中 n 就是训练集合的大小。需要注意的是,规范化项里面并不包含偏置

      规范化可以当做一种寻找小的权重和最小化原始的代价函数之间的折中。这两部分之前相对的重要性就由 λ 的值来控制了:λ 越小,就偏向于最小化原始代价函数,反之,倾向于小的权重

      训练过程需要降低整体的 Cost,这时候,一方面能降低实际输出与样本之间的误差  ,也能降低权值大小。缺点是引入了一个需要手动调整的hyper-parameter(超参数).

详见 https://www.wikiwand.com/en/Regularization_(mathematics)

3. Dropout(退出). 

           深度学习实战(十五)——数据不够时训练深度学习的方法_第3张图片

这也是一种正则化手段. 不过跟以上不同的是它通过随机将部分神经元的输出置零来实现。在训练时,每次随机(如50%概率)忽略隐层的某些节点;这样,我们相当于随机从2^H个模型中采样选择模型;同时,由于每个网络只见过一个训练数据(每次都是随机的新网络),所以类似 bagging 的做法,这就是我为什么将它分类到「结合多种模型」中;

此外,而不同模型之间权值共享(共同使用这 H 个神经元的连接权值),相当于一种权值正则方法,实际效果比 L2 regularization 更好。

详见 http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

关于Dropout的原理介绍(好):https://blog.csdn.net/program_developer/article/details/80737724

原理解释的一般:http s://blog.csdn.net/stdcoutzyx/article/details/49022443

Dropout 层应该加在什么地方:Dropout 层一般加在全连接层 防止过拟合 提升模型泛化能力。而很少见到卷积层后接Drop out (原因主要是 卷积参数少,不易过拟合)

https://blog.csdn.net/qq_27292549/article/details/81092653

4. Unsupervised Pre-training. 

用Auto-Encoder或者RBM的卷积形式一层一层地做无监督预训练, 最后加上分类层做有监督的Fine-Tuning.

参考 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.207.1102&rep=rep1&type=pdf

5.模型剪枝(Network Pruning)

      全连接有很强的逼近能力但是很容易导致过拟合。所以 机器学习与模式识别最核心的问题就是减小系统的复杂度(description -length【1】,VC-dimensions【2】),在神经网络中,这样的核心问题就变成了减少连接权值的数量。减小模型复杂度方面,很常见的方法是在损失函数后面加上惩罚项

论文中文翻译:https://blog.csdn.net/u013044310/article/details/80187998

理论介绍+代码:https://blog.csdn.net/jacke121/article/details/79450321

6、迁移学习

数据不够时的解决办法(一)——迁移学习

7、Early stopping:

      对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
      Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。这种做法很符合直观感受,因为accurary都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?并不是说validation accuracy一降下来便认为不再提高了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……

原文:https://blog.csdn.net/chen645096127/article/details/78990928

 

 

 

 

你可能感兴趣的:(深度学习)