正则化:

  • DropOut
  • DropConnect
  • DropPath
  • Spatial DropOut
  • DropBlock

BN:

  • Batch Normalization (BN)
  • GN,BN和LN、Adaptive BN(AdaBN)、Weight Normalization(WN)
  • Cross-GPU Batch Normalization (CGBN or SyncBN)
  • Filter Response Normalization (FRN)
  • Cross-Iteration Batch Normalization (CBN)

Dropout的理解

我们先来看看在Dropout在全连接层上的行为

Dropout on fully-connected layers

一个n层的全连接网络(假设忽略bias),可以描述为如下:

其中,ϕᵢ 为非线性激活函数,(e.g., ReLU),Wᵢ fori ∈{1, …,n} 为权重矩阵 andx 为输出. 考虑一个单隐藏层的全连接网络f(x): ℝ⁹ → ℝ⁹,其没有非线性激活函数和bias,则我们可以将网络描述为:

则下图可以代表我们的单隐藏层网络

图3 单隐藏层

现在,我们加入dropout到该网络中,让 r ∈ {0,1}⁹为独立等概率伯努利分布 (iid)随机变量组成的向量 . 则加入dropout后的可以表示为:

其中,  has been collapsed to for space.考虑极端情况下,r = (1, 0, 0, … , 0)ᵀ. 则网络结构将变为如下

图4 Drop在单隐藏层中的作用

我们可以看出dropout在全连接神经网络中的作用相当于将权重矩阵中的某些列置为0,使得网络中的某些神经元被丢弃。

Dropout in convolutional neural networks

一个n层的卷积神经网络(忽略bias)可以表示为如下:

其中 ∗ 为卷积操作, ϕᵢ 为非线性激活函数, Kᵢ for i ∈{1, … , n} 为卷积核 , x 为输入. 为了简单起见,我们假设x ∈ ℝ³ ˣ ³ , K ∈ ℝ² ˣ ². 则K ∗ x 可以写为:

我们可以将卷积输入改写为列(img2col),并对卷积核做相应的改动

同全连接网络一样,假设g(x): ℝ³ ˣ ³ → ℝ³ ˣ ³ 为没有非线性激活层和bias的双卷积层, g 可以表示为:

其中,u, v ∈ ℝ³ ˣ ³ 为卷积核, x ∈ ℝ³ ˣ ³ 为图像. 为了简单起见,且不影响分析,设 h = v ∗ x. 为了使g的尺寸同x的尺寸一致,我们需要对输入图进行zero-padding,使得h的尺寸同x保持一致,当然我也可以将权重矩阵改写如下(证明很简单):

现在我们加入dropout,让U 为上述的大矩阵 (i.e., the expanded convolutional kernel with zero-padding) 且r ∈ {0,1}⁹ iid伯努利随机变量向量:

我们观察上述大矩阵的左上角:

可以发现,权重值u, u, u 在分别都在不同列中出现,即每个列之间存在相关性, 因此如果 r₁ = 0, r₂=1 或者r₁ = 1, r₂=0, 我们依然可以更新权重值 u₅ 和 u₄ (r₃为值对其没有影响).

从上面看出,在卷积层中引入dropout似乎对网络没什么作用,如果硬要说作用的话,那无非就是在feature map中引入了Bernoulli noise,然而并没有理论证明引入这种噪声能够带来实质性的作用。在全连接层中引入Dropout是有理论支撑的(相当于引入了正则化)。

当然,其实很多人根据dropout做了很多工作,包括许多dropout的变体(DropPath, SpatialDropout, Variational dropout[7]),也有很多工作直接在卷积层中加入dropout,并取得了性能提升,因此dropout在卷积层中确实还是有用的[8][9]。

Dropout的各种变体版本

DropConnect

DropConnect [11]:只在连接处扔,神经元不扔:即在网络层与层之间的Weight中随机失活

图5 Dropout和DropConnect的区别图(a(.)为激活函数,m(.)为掩码mask)

Training部分和Dropout的training部分很相似,不过在使用DropConnect时,需要对每个example, 每个epoch都随机sample一个M矩阵(元素值都是0或1, 俗称mask矩阵)。Training和Inference的算法流程如下:

图6 (a)train阶段,(b)inference阶段

注意:因为DropConnect只能用于全连接的网络层(和dropout一样),如果网络中用到了卷积,则用patch卷积时的隐层节点是不使用DropConnect的,因此上面的流程里有一个Extract feature步骤,该步骤就是网络前面那些非全连接层的传播过程,比如卷积+pooling. DropConnect的Inference部分和Dropout不同,在Dropout网络中进行Inference时,是将所有的权重W都scale一个系数p(作者证明这种近似在某些场合是有问题的,具体见其paper)。而在对DropConnect进行推理时,采用的是对每个输入(每个隐含层节点连接有多个输入)的权重进行高斯分布的采样。该高斯分布的均值与方差与前面的概率值p有关,即满足的高斯分布:

                    

由上面的过程可知,在进行Inference时,需要对每个权重都进行Sample,所以DropConnect速度会慢些。根据作者的观点,Dropout和DropConnect都类似模型平均,Dropout是2|m|个模型的平均,而DropConnect是2|M|个模型的平均(m是向量,M是矩阵,取模表示矩阵或向量中对应元素的个数),从这点上来说,DropConnect模型平均能力更强(因为|M|>|m|))。但是reddit上有人提过DropConnect这种方式其实并没有对Dropout有所改进。

Spatial Dropout

Spatial Dropout[12]: 随机drop一个 CHW 的特征;即:按channel随机扔

图7 Standard Dropout和SpatialDropout

图8 SpatialDropout

Stochastic Depth

4. Stochastic Depth [13]:即按resnet block随机扔

图9 Stochastic Depth

Cutout

5. Cutout [14]:在Input层按spatial块随机扔,也可以看成一种数据增强

DropBlock

6. DropBlock[15]: 随机Drop一个 C[HW]part 特征, [HW]part 是在HW上取一个region,跟group norm的group比较像;即每个Feature Map上按Spatial块随机扔,相当于弄了一个结构化的Dropout, 使得在Feature Map中的连续区域(相关性很强的区域)可以被同时丢弃。

图10 DropBlock

其算法如下:

r 的计算依赖于keep_prob,其计算如下:

上面keep_prob可以解释为传统的dropout保留激活单元的概率, 则有效的 seed region 为 (feat_size - block_size + 1) 2 ,feat_size 为feature map的size. 实际上DropBlock中的dropblock可能存在重叠的区域, 因此上述的公式仅仅只是一个估计. 实验中keep_prob设置为(between 0:75 and 0:95), 并以此计算 r 的值。这里为了防止解释不清楚为什么 r 需要这么取值,我直接摘录原文如下:

Drop Path

说道Drop out,可能大家都不陌生,一般用来使得神经元随机失活,来减少模型的过拟合。那么这个Drop Path又是个啥?其实Drop Path和Drop out很类似,只不过它不是让神经元随机失活,而是让路径随机失活。也就是说在多个不同深度的层进行联合时,模型会以一个比例随机的让某些路径的输入关闭,但最少保证有一个输入。那么这么做究竟有什么好处呢。

第一、减少过拟合。
第二、强化每条路径的输出。
第三、是作者重点提出,也是我认为非常值得学习的一点,那就是不同路径的联合,在Drop Path的机制下,起到了一种简单的教师—学生的学习方式。也就是说,如果某一条路径学到了对最终分类起到非常重要的特征时,假如在某一次迭代中,该路径被关闭掉了,那么通过loss 的反向传播中,可能就会指导和该路径进行联合的另一条路径也学到这种重要的特征。那么通过模型内部的这种不断的教师—学生的学习方式,不仅可以提高整个模型的效果,并且当提取出其中的任意一条路径出来单独使用时,也能够达到非常好的效果。作者在后面也证明了,对于plain Network,在深度达到40层以上时会出现退化的问题,但是在FractalNet中完全不会,从整个模型中提出其中最深的路径来单独使用时可以达到和整个FractalNet接近的效果。

作者一共使用了两种Drop Path方式:
Local:在每一个联合层以固定几率舍弃每个输入,但保证至少保留一个输入。
Global:在整个网络中随机只保留一条完整的路径进行学习。

总结

从上面的各种变体中,我们可以看出,Dropout从最开始的阶段全连接网络中的Co-Adaptation问题,到试图通过一定的手段解决由于卷积层中激活单元存在很强的空间相关性,Dropout应用到卷积网络中效果不佳的的问题。Spatial Dropout通过直接将某些channel的Feature Map抛弃(当然这样很暴力,相当于快刀斩乱麻!),Stochastic Depth则从Layer层面来操作,直接抛弃某些Layers(ResBlock),这更像是剪枝。目前来看,最合理的应该是DropBlock,因为其通过在一个Feature Map将某些关联的激活单元全部丢弃,使得模型可以有机会真正不依赖这些相关单元。因此,我单独开一个专题介绍DropBlock.

类型使用场景特点DropoutFC层随机失活激活单元ConnectDropoutFC层在权重矩阵中随机zero某些权值,且需要对每个example, 每个epoch都随机sample一个M矩Spatial Connect卷积层按channel随机失活某些Feature MapStochastic DepthResBlock随机失活某些ResBlock,但skip connect连接保留CutoutInput在Input层按spatial块随机扔,也可以看成一种数据增强DropBlock卷积层其通过在一个Feature Map将某些关联的激活单元全部丢弃,使得模型可以有机会真正不依赖这些相关单元

当然,什么时候该用,什么时候不该用,这个其实到目前为止还没有明确的说明,一般来说,当相对较大的模型用在较小的数据集时,通过Dropout的一些方法可以防止过拟合,并提高泛化性。

参考文献

[1] kdnuggets.com/2018/09/d

[2] wiszhipu.com/?

[3] segmentfault.com/a/1190

[4] arxiv.org/pdf/1207.0580

[5] jmlr.org/papers/v15/sri

[6] towardsdatascience.com/

[7] arxiv.org/abs/1701.0536

[8] arxiv.org/abs/1506.0215

[9] arxiv.org/abs/1810.1289

[10-a] Improving neural networks by preventing co-adaptation of feature detectors

[10-b] Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever, and Ruslan Salakhutdinov. Dropout: A simple way to prevent neural networks from overfitting. The Journal of Machine Learning Research, 15(1):1929–1958, 2014.

[11] Li Wan, Matthew Zeiler, Sixin Zhang, Yann LeCun, Rob Fergus, Regularization of Neural Network using DropConnect, International Conference on Machine Learning, 2013

[12] Jonathan Tompson, Ross Goroshin, Arjun Jain, Yann LeCun, and Christoph Bregler. Efficient object localization using convolutional networks. In CVPR, 2015.

[13] Gao Huang, Yu Sun, Zhuang Liu, Daniel Sedra, and Kilian Q Weinberger. Deep networks with stochastic depth. In ECCV, pages 646–661. Springer, 2016.

[14] Terrance DeVries and Graham W Taylor. Improved regularization of convolutional neural networks with cutout. CoRR, abs/1708.04552, 2017.

[15] Golnaz Ghiasi, Tsung-Yi Lin, Quoc V. Le, DropBlock: A regularization method for convolutional networks. NIPS 2018.

BN:

1. Batch Normalization,其论文:https://arxiv.org/pdf/1502.03167.pdf

2. Layer Normalizaiton,其论文:https://arxiv.org/pdf/1607.06450v1.pdf

3. Instance Normalization,其论文:https://arxiv.org/pdf/1607.08022.pdf

4. Group Normalization,其论文:https://arxiv.org/pdf/1803.08494.pdf

5. Switchable Normalization,其论文:https://arxiv.org/pdf/1806.10779.pdf

二. 介绍

在介绍各个算法之前,我们先引进一个问题:为什么要做归一化处理?

神经网络学习过程的本质就是为了学习数据分布,如果我们没有做归一化处理,那么每一批次训练数据的分布不一样,从大的方向上看,神经网络则需要在这多个分布中找到平衡点,从小的方向上看,由于每层网络输入数据分布在不断变化,这也会导致每层网络在找平衡点,显然,神经网络就很难收敛了。当然,如果我们只是对输入的数据进行归一化处理(比如将输入的图像除以255,将其归到0到1之间),只能保证输入层数据分布是一样的,并不能保证每层网络输入数据分布是一样的,所以也需要在神经网络的中间层加入归一化处理。

BN、LN、IN和GN这四个归一化的计算流程几乎是一样的,可以分为四步:

1.计算出均值

2.计算出方差

3.归一化处理到均值为0,方差为1

4.变化重构,恢复出这一层网络所要学到的分布

训练的时候,是根据输入的每一批数据来计算均值和方差,那么测试的时候,平均值和方差是怎么来的?

对于均值来说直接计算所有训练时batch 均值的平均值;然后对于标准偏差采用每个batch 方差的无偏估计

接下来,我们先用一个示意图来形象的表现BN、LN、IN和GN的区别(图片来自于GN这一篇论文),在输入图片的维度为(NCHW)中,HW是被合成一个维度,这个是方便画出示意图,C和N各占一个维度

 Batch Normalization:

1.BN的计算就是把每个通道的NHW单独拿出来归一化处理

2.针对每个channel我们都有一组γ,β,所以可学习的参数为2*C

3.当batch size越小,BN的表现效果也越不好,因为计算过程中所得到的均值和方差不能代表全局

Layer Normalizaiton:

1.LN的计算就是把每个CHW单独拿出来归一化处理,不受batchsize 的影响

2.常用在RNN网络,但如果输入的特征区别很大,那么就不建议使用它做归一化处理

Instance Normalization

1.IN的计算就是把每个HW单独拿出来归一化处理,不受通道和batchsize 的影响

2.常用在风格化迁移,但如果特征图可以用到通道之间的相关性,那么就不建议使用它做归一化处理

Group Normalizatio

1.GN的计算就是把先把通道C分成G组,然后把每个gHW单独拿出来归一化处理,最后把G组归一化之后的数据合并成CHW

2.GN介于LN和IN之间,当然可以说LN和IN就是GN的特列,比如G的大小为1或者为C

Switchable Normalization

1.将 BN、LN、IN 结合,赋予权重,让网络自己去学习归一化层应该使用什么方法

2.集万千宠爱于一身,但训练复杂

注:四种归一化的理解

  • BatchNorm:batch方向做归一化,计算N*H*W的均值
  • LayerNorm:channel方向做归一化,计算C*H*W的均值
  • InstanceNorm:一个channel内做归一化,计算H*W的均值
  • GroupNorm:先将channel方向分group,然后每个group内做归一化,计算(C//G)*H*W的均值
  • GN与LN和IN有关,这两种标准化方法在训练循环(RNN / LSTM)或生成(GAN)模型方面特别成功。

FRN

Filter Response Normalization Layer

一.概述

目前主流的深度学习模型都会采用BN层(Batch Normalization)来加速模型训练以及提升模型效果,对于CNN模型,BN层已经上成为了标配。但是BN层在训练过程中需要在batch上计算中间统计量,这使得BN层严重依赖batch,造成训练和测试的不一致性,当训练batch size较小,往往会恶化性能。GN(Group Normalization)通过将特征在channel维度分组来解决这一问题,GN在batch size不同时性能是一致的,但对于大batch size,GN仍然难以匹敌BN。这里我们要介绍的是谷歌提出的一种新的归一化方法FRN,和GN一样不依赖batch,但是性能却优于BN和GN。

FRN的效果如下图所示:

本文的主要工作如下:

  1. FRN是一种pre-channel的归一化方法,提升了准确率
  2. 提出了TLU,在大的batchsize上表现超过了BN,是FRN的一部分

在related work中,几种方法已经被提出去解决小batch_size效果不好的情况:

1.Methods reducing train-test discrepancy in batch normalization

减少模型训练和测试时候batch_size的差异.

  1. 由于mini-batch的随机性和有些样本非独立同分布所导致的。采用Batch Renormalization (BR) 的方法,即为通过限制mini-batch到一个确定的范围内和通过限制训练期间小批量统计数据的变化.该方案的一个关键的好处即为模型在测试时和传统的BN一样.
  2. 训练过程不变,对于测试过程做出改变.法1和法2对于小的batch_size仍然表现出性能下降
  3. 多卡BN

2.Methods avoiding normalization using mini-batches

避免使用min-batch来进行归一化。方法有LN,IN,GN等。

3.Other approaches

  1. Weight Normalization
  2. Normalization Propagation

BN的一个问题是训练时batch size一般较大,但是测试时batch size一般为1,而均值和方差的计算依赖batch,这将导致训练和测试不一致。BN的解决方案是在训练时估计一个均值和方差量来作为测试时的归一化参数,一般对每次mini-batch的均值和方差进行指数加权平均来得到这个量。虽然解决了训练和测试的不一致性,但是BN对于batch size比较敏感,当batch size较小时,模型性能会明显恶化。对于一个比较大的模型,由于显存限制,batch size难以很大,比如目标检测模型,这时候BN层可能会成为一种限制。

二.详解

FRN旨在于消除batch_size对于归一化的影响,但是不能牺牲BN在大的batch_size上所获得性能.

谷歌的提出的FRN层包括归一化层FRN(Filter Response Normalization)和激活层TLU(Thresholded Linear Unit),如下图所示。FRN层不仅消除了模型训练过程中对batch的依赖,而且当batch size较大时性能优于BN。

其中FRN的操作是(H, W)维度上的,即对每个样例的每个channel单独进行归一化,这里 x 就是一个N维度(HxW)的向量,所以FRN没有BN层对batch依赖的问题。BN层采用归一化方法是减去均值然后除以标准差,而FRN却不同,这里没有减去均值操作,公式中的 是x 的二次范数的平均值。这种归一化方式类似BN可以用来消除中间操作(卷积和非线性激活)带来的尺度问题,有助于模型训练。 公式里的是一个很小的正常量,以防止除0。FRN是在H,W两个维度上归一化,一般情况下网络的特征图大小N=HxW较大,但是有时候可能会出现1x1的情况,比如InceptionV3和VGG网络,此时就比较关键,下图给出了当N=1时不同下归一化的结果。

值较小时,归一化相当于一个符号函数(sign function),这时候梯度几乎为0,严重影响模型训练;当值较大时,曲线变得更圆滑,此时的梯度利于模型学习。对于这种情况,论文建议采用一个可学习的。对于不含有1x1特征的模型,论文中采用的是一个常量值1e-6。值得说明的是IN也是在H,W维度上进行归一化,但是会减去均值,对于N=1的情况归一化的结果是0,但FRN可以避免这个问题。

归一化之后同样需要进行缩放和平移变换,这里的也是可学习的参数(参数大小为C):

FRN缺少去均值的操作,这可能使得归一化的结果任意地偏移0,如果FRN之后是ReLU激活层,可能产生很多0值,这对于模型训练和性能是不利的。为了解决这个问题,FRN之后采用的阈值化的ReLU,即TLU:

这里的是一个可学习的参数。论文中发现FRN之后采用TLU对于提升性能是至关重要的。

FRN层的实现也是极其容易,在TensorFlow中的实现代码如下所示:

三.实验

1.ImageNet Classification

 2.Object Detection on COCO

参考文献:https://blog.csdn.net/bestrivern/article/details/103739463

https://blog.csdn.net/Bruce_0712/article/details/106695591

优化策略(三)正则化和BN方式相关推荐

  1. CUDA 并行计算优化策略总结

    作者 | LustofLife@知乎 来源 | https://zhuanlan.zhihu.com/p/297201517 编辑 | 极市平台 导读 并行计算为了提高算法运行效率,本文通过以矩阵乘法 ...

  2. webpack4.0打包优化策略(二)

    打包优化策略 webpack4.0打包优化策略(一) webpack4.0打包优化策略(二) webpack4.0打包优化策略(三) 区分开发和生产环境 通常我们在开发网页时需要区分构建环境 开发环境 ...

  3. CUDA|并行计算优化策略

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨LustofLife@知乎(已授权) 来源丨https://zhuanlan.zhihu.co ...

  4. NLP(七):前馈神经网络基础回顾(NN模型及其正则化,dropout,各种梯度求解算法等模型优化策略)

    目录 1.前馈神经网络及其相关概念 2.前馈神经网络的Tensorflow实现 2.1tensorflow的图模式下的NN实现 2.2tf.keras实现 3.1Sigmoid 3.2Tanh​ 3. ...

  5. 数据结构与算法 / 冒泡排序及其优化的三种方式

    一.一般写法 统一使用交换函数: void swap(int& a, int& b) {int tmp = a;a = b;b = tmp;return; } void BubbleS ...

  6. 视频提取关键帧工具类KeyFramesExtractUtils.py,动态支持三种取帧方式,关键参数可配置,代码经过优化处理,效果和性能更好。

    同步上一期视频关键帧提取方法: 视频提取关键帧的三种方式[已调通]_君临天下tjm的博客-CSDN博客_视频关键帧提取关键代码如下:# -*- coding: utf-8 -*-"" ...

  7. YOLO系列优化策略与电力巡检案例

    目录 前言 一.PP-YOLO深度解析 YOLOv3及优化模型 PP-YOLO深度解析 PP-YOLO模型结构 二.YOLO优化策略详解 0. 目标检测模型优化方法 1. YOLOv3-DarkNet ...

  8. 卷积神经网络参数优化策略(一)

    前言 最近卷积神经网络(CNN)很火热,它在图像分类领域的卓越表现引起了大家的广泛关注.本文总结和摘录了Michael Nielsen的那本Neural Network and Deep Learni ...

  9. YOLO-V5-超参数介绍及优化策略

    这里写自定义目录标题 yaml文件 超参数 优化策略 yaml文件 模型深度&宽度 nc: 3 # 类别数量 depth_multiple: 0.33 # model depth multip ...

最新文章

  1. Linux Wi-Fi 编程API介绍
  2. android onpause时动画出错,Android生命周期之onPauseonStop
  3. java jfreechart下载_jfreechart下载-JFreeChart下载安装[java图表插件]-PC下载网
  4. 团队行为心理学读书笔记(6)沟通背后的行为心理学
  5. Java环境配置及第一个HelloWord(Win)
  6. ubuntu安装mysql报错_解决Ubuntu 12.04中更改MySQL默认编码报错
  7. ulimit: command not found 问题解决
  8. oracle not in 改为 not exist
  9. js对象合并属性_深入 JS 对象属性
  10. 如何恢复录音删除的录音文件_如何把录音转成文字?推荐这款录音转文字app软件!...
  11. 计算机主板故障检测维修,主板故障!教你如何用主板诊断卡检测维修电脑主板故障...
  12. 国内外实行HACCP情况(转载)
  13. 联想台式计算机 恢复出厂设置,lenovo电脑如何恢复出厂设置_lenovo台式电脑恢复出厂设置操作方法-win7之家...
  14. 最迷你的瑞典大学,如何建立起了影响全球的游戏发展体系
  15. c语言志愿者信息管理系统,基于C/S架构的青年志愿者管理系统
  16. yigo2.0定时器集合
  17. 【转载】为什么要用50欧姆?
  18. 状态码中400错误和405错误怎么解决
  19. [转]JavaScript和html5 canvas生成圆形印章
  20. ios修改根视图控制器

热门文章

  1. uni H5微信内自定义分享朋友圈/好友带图片 标题
  2. 分布式事务之Seata常见异常
  3. linux通过interfaces配置DHCP和静态IP,配置ubuntu的双网卡
  4. Skitch 图片注释软件(推荐)
  5. 智慧城市推进政策对安防行业影响
  6. 照片转成3D效果怎么做?建议收藏这些方法
  7. 使用Qpython3制作老版天翼飞TP路由器拨号脚本
  8. 移动端--(flex布局携程旅行)
  9. (笔记3)输入输出函数,控制语句,循环语句,辅助控制关键词,一维数组。
  10. 论网站核心用户的价值