深度学习(九)dropout与Batch norm

一、Dropout,大部分实验表明其具有一定的防止过拟合的能力。

最早的Dropout可以看Hinton的这篇文章 

Improving neural networks by preventing co-adaptation of feature Detectors

如上图左,为没有Dropout的普通2层全连接结构,记为 r=a(Wv),其中a为激活函数。

如上图右,为在第2层全连接后添加Dropout层的示意图。即在模型训练时随机让网络的某些节点不工作(输出置0,其它过程不变。

下面理解一下为什么可以防止过拟合:

1Dropout可以看做训练了多个模型,实际使用时采用了模型平均作为输出 三个臭皮匠顶过一个诸葛亮

2)随机的让一些节点不工作了,因此可以避免由噪声等影响下生成的特征,有意识地让网络去学习一些普遍的共性(而不是某些训练样本的一些特性);同时,输入不变,节点变少了,也意味着用来规范loss的训练数据集变多了。

二、Batch norm

前言

Batch Normalization是由google提出的一种训练优化方法。参考论文:Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift 

个人觉得BN层的作用是加快网络学习速率,论文中提及其它的优点都是这个优点的副产品。 

网上对BN解释详细的不多,大多从原理上解释,没有说出实际使用的过程,这里从what, why, how三个角度去解释BN

What is BN

Normalization是数据标准化(归一化,规范化),Batch 可以理解为批量,加起来就是批量标准化。 

先说Batch是怎么确定的。在CNN中,Batch就是训练网络所设定的图片数量batch_size

Normalization过程,引用论文中的解释: 

 

输入:输入数据x1..xm(这些数据是准备进入激活函数的数据) 

计算过程中可以看到

1.求数据均值; 

2.求数据方差; 

3.数据进行标准化(个人认为称作正态化也可以) 

4.训练参数γβ 

5.输出y通过γβ的线性变换得到新的值 

在正向传播的时候,通过可学习的γβ参数求出新的分布值

在反向传播的时候,通过链式求导方式,求出γβ以及相关权值 

Why is BN

解决的问题是梯度消失与梯度爆炸。 

关于梯度消失,以sigmoid函数为例子,sigmoid函数使得输出在[0,1]之间。 

 

事实上x到了一定大小,经过sigmoid函数的输出范围就很小了,参考下图 

 

如果输入很大,其对应的斜率就很小,我们知道,其斜率(梯度)在反向传播中是权值学习速率。所以就会出现如下的问题, 

 

在深度网络中,如果网络的激活输出很大,其梯度就很小,学习速率就很慢。假设每层学习梯度都小于最大值0.25,网络有n层,因为链式求导的原因,第一层的梯度小于0.25n次方,所以学习速率就慢,对于最后一层只需对自身求导1次,梯度就大,学习速率就快。 

这会造成的影响是在一个很大的深度网络中,浅层基本不学习,权值变化小,后面几层一直在学习,结果就是,后面几层基本可以表示整个网络,失去了深度的意义。

关于梯度爆炸,根据链式求导法, 

第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率

假如激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会指数增加。

How to use BN

先解释一下对于图片卷积是如何使用BN层。 

 

这是文章卷积神经网络CNN1)中5x5的图片通过valid卷积得到的3x3特征图(粉红色)。特征图里的值,作为BN的输入,也就是这9个数值通过BN计算并保存γβ,通过γβ使得输出与输入不变。假设输入的batch_sizem,那就有m*9个数值,计算这m*9个数据的γβ并保存。正向传播过程如上述,对于反向传播就是根据求得的γβ计算梯度。 

这里需要着重说明2个细节: 

1.网络训练中以batch_size为最小单位不断迭代,很显然,新的batch_size进入网络,机会有新的γβ,因此,在BN层中,有总图片数/batch_sizeγβ被保存下来。 

2.图像卷积的过程中,通常是使用多个卷积核,得到多张特征图,对于多个的卷积核需要保存多个的γβ

结合论文中给出的使用过程进行解释 

 

输入:待进入激活函数的变量 

输出: 

1.对于K维的输入,假设每一维包含m个变量,所以需要K个循环。每个循环中按照上面所介绍的方法计算γβ。这里的K维,在卷积网络中可以看作是卷积核个数,如网络中第n层有64个卷积核,就需要计算64次。 

需要注意,在正向传播时,会使用γβ使得BN层输出与输入一样。 

2.在反向传播时利用γβ求得梯度从而改变训练权值(变量)。 

3.通过不断迭代直到训练结束,求得关于不同层的γβ。如网络有nBN层,每层根据batch_size决定有多少个变量,设定为m,这里的mini-batcherB指的是特征图大小*batch_size,即m=特征图大小*batch_size,因此,对于batch_size1,这里的m就是每层特征图的大小。 

4.不断遍历训练集中的图片,取出每个batch_size中的γβ,最后统计每层BNγβ各自的和除以图片数量得到平均直,并对其做无偏估计直作为每一层的E[x]Var[x] 

5.在预测的正向传播时,对测试数据求取γβ,并使用该层的E[x]Var[x],通过图中11:所表示的公式计算BN层输出。 

注意,在预测时,BN层的输出已经被改变,所以BN层在预测的作用体现在此处

至此,BN层的原理与使用过程就解释完毕,给出的解释都是本人觉得值得注意或这不容易了解的部分,如有錯漏,请指正。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值