[总结] 该如何设计神经网络 [1] - 模块方法功能汇总

查询列表

  • 经典的网络结构
    • 卷积层(Convolution):提取特征
    • 池化层 (Pooling): 减少参数
    • 全连接层:实现分类
    • Dropout 的机制:预防过拟合
    • 正则化(Regularization) : 防止过拟合
    • 白化(Whitening): 加速收敛
    • Batch Normalization:加速收敛
    • 数据增强: 模型范化
  • 常用的概念
    • Batch
    • Internal Covariate Shift(ICS)
  • 学习模型的评价

近来看看神经网络,有很多经典的神经网络结构,包括2D 的神经网络和3D点云的,但是不理解该如何设计自己的神经网络。当然每一个点都可以有很长的论证和描述,这里只是定性的总结一下,以供自己复习和大家参考。本人愚钝,欢迎大家批评

想要设计新的网络,先总结一下经典网络中的算法的作用

经典的网络结构

卷积层(Convolution):提取特征

  • 训练卷积网络实际上是训练一系列用于特征检测的滤波器
  • 训练初始时卷积核是完全随机,不具有任何特征。
  • stride(步长) 每次向右或者向上的移动像素个数
  • padding: 给边界填充 0,由于卷积会减少图像的大小。可以通过增加0使得前后图像大小不变(same padding)
  • 多过滤与多激活: 权值的纵维深度和输入图像的深度是相同的。假设有一个 32323 的输入图像,一般会设计一个同样的三维的卷积和,如n 个 553的卷积核, 则输出变为n 个 二维的 28*28。

池化层 (Pooling): 减少参数

  • 池化的唯一目的是减少图像的空间大小

全连接层:实现分类

  • Fully connected layer(FC), 卷积层(提取特征),池化层减少参数,全连接层具有分类类似的交叉熵的损失函数,用于计算误差
  • 全连接层起到将学到的分布式特征层表示映射到样本标记空间的作用
  • 若上层的输出为 3*3*5, 则用3*3*5*4096 个卷积核,卷积生成了一个 1*4096 特征完成降维分类任务。每一个卷积核都提出了全部的特征。

Dropout 的机制:预防过拟合

  • 如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低
  • 防止过拟合,可以通过阻止特征检测器的共同作用来提高神经网络的性能
  • Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。
  • 减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
  • 当前Dropout被大量利用于全连接网络,而且一般认为设置为0.5或者0.3,而在卷积网络隐藏层中由于卷积自身的稀疏化以及稀疏化的ReLu函数的大量使用等原因,Dropout策略在卷积网络隐藏层中使用较少。
  • dropout是一种将模型进行集成的算法,每一个不完整的网络,都可以看成是一个弱分类器。由于要引入随机性,dropout适合本身就相对复杂的网络

正则化(Regularization) : 防止过拟合

  • 防止过拟合的另外一种方式就是降低模型的复杂度,怎么降低?一种方式就是在cost函数中加入正则化项,正则化项可以理解为复杂度,cost越小越好,但cost加上正则项之后,为了使cost小,就不能让正则项变大,也就是不能让模型更复杂,这样就降低了模型复杂度,也就降低了过拟合。这就是正则化。正则化也有很多种,常见为两种L2和L1。
  • L2 Regularization
    在这里插入图片描述
    相比于cross-entropy函数,这里多了最后一项,也就是正则化项。该项就是神经网络中的权重之和,其中λ>0为Regularization参数,n为训练集包含的实例个数。L2正则化项这里是指最后一项的w的平方项
  • Regularization的cost偏向于让神经网络学习比较小的权重w,否则第一项的C0明显减小。正则化网络更倾向于小的权重,在权重小的情况下,数据x随机的变化不会对神经网络的模型造成太大的影响,所以可能性更小的受到数据局部噪音的影响。而未加入正则化的神经网络,权重大,容易通过较大的模型改变来适应数据,更容易学习到局部的噪音。
  • L1 Regularization
    在这里插入图片描述
    对C关于w求偏导得:
    在这里插入图片描述
    sgn(w)表示为符号函数,w为正,结果为1,w为负结果为-1。权重的更新法则为:
    在这里插入图片描述
  • L1减少一个常量(η,λ,n根据输入都是固定的,sgn(w)为1或-1,故为常量),而L2减少的是权重的一个固定的比例;如果权重本身很大的话,L2减少的比L1减少的多,若权重小,则L1减少的更多。多以L1倾向于集中在少部分重要的连接上(w小)
  • 参考博客: 【神经网络九:Regularization(正则化)与Dropout】
  • Dropout的目的也是用来减少overfitting(过拟合)。而和L1,L2Regularization不同的是,Dropout不是针对cost函数,而是改变神经网络本身的结构

白化(Whitening): 加速收敛

  • 白化(Whitening)是机器学习里面常用的一种规范化数据分布的方法,主要是PCA白化与ZCA白化。白化是对输入数据分布进行变换,进而达到以下两个目的:
    1. 使得输入特征分布具有相同的均值与方差。其中PCA白化保证了所有特征分布均值为0,方差为1;而ZCA白化则保证了所有特征分布均值为0,方差相同;
    2. 去除特征之间的相关性。
  • 通过白化操作,我们可以减缓ICS(Internal Covariate Shift)的问题,进而固定了每一层网络输入分布,加速网络训练过程的收敛(LeCun et al.,1998b;Wiesler&Ney,2011)。

Batch Normalization:加速收敛

  • BN 的优势:
    1. BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度.BN通过规范化与线性变换使得每一层网络的输入数据的均值与方差都在一定范围内,使得后一层网络不必不断去适应底层网络中输入的变化,从而实现了网络中层与层之间的解耦,允许每一层进行独立学习,有利于提高整个神经网络的学习速度
    2. BN使得模型对网络中的参数不那么敏感,简化调参过程(学习率设置太高时,会使得参数更新步伐过大,容易出现震荡和不收敛),使得网络学习更加稳定
    3. BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题
    4. BN具有一定的正则化效果。由于我们使用mini-batch的均值与方差作为对整体训练样本均值与方差的估计,尽管每一个batch中的数据都是从总体样本中抽样得到,但不同mini-batch的均值与方差会有所不同,这就为网络的学习过程中增加了随机噪音,与Dropout通过关闭神经元给网络训练带来噪音类似,在一定程度上对模型起到了正则化的效果
  • 原作者通过也证明了网络加入BN后,可以丢弃Dropout,模型也同样具有很好的泛化效果。
  • 参考资料: 【Batch Normalization原理与实战】

数据增强: 模型范化

  • 数据增强,比如将原始图像翻转平移拉伸,从而是模型的训练数据集增大。数据增强已经是深度学习的必需步骤了,其对于模型的泛化能力增加普遍有效,但是不必做的太过,将原始数据量通过数据增加增加到2倍可以,但增加十倍百倍就只是增加了训练所需的时间,不会继续增加模型的泛化能力了

常用的概念

Batch

  • 在深度学习中,由于采用full batch的训练方式对内存要求较大,且每一轮训练时间过长;我们一般都会采用对数据做划分,用mini-batch对网络进行训练。

Internal Covariate Shift(ICS)

  • 网络中层与层之间存在高度的关联性与耦合性
  • 在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift。带来的问题是:
    1. 上层网络需要不停调整来适应输入数据分布的变化,导致网络学习速度的降低
    2. 网络的训练过程容易陷入梯度饱和区,减缓网络收敛速度
      对于激活函数梯度饱和问题,有两种解决思路。第一种就是更为非饱和性激活函数,例如线性整流函数ReLU可以在一定程度上解决训练进入梯度饱和区的问题。另一种思路是,我们可以让激活函数的输入分布保持在一个稳定状态来尽可能避免它们陷入梯度饱和区,这也就是Normalization的思路。
  • 参考资料: 【Batch Normalization原理与实战】

学习模型的评价

  • 看Training Curve 和 Validation Curve; 理想情况下 Training Accuracy 高而 Validation Accuracy 可能过拟合,可以减少网络的层数。若Training Accuracy 低则证明模型学习能力或参数不好,可增加层数或宽度。

你可能感兴趣的:(计算机视觉)