【卷积神经网络】对BN层的解释

前言

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.25的n次方,所以学习速率就慢,对于最后一层只需对自身求导1次,梯度就大,学习速率就快。 
这会造成的影响是在一个很大的深度网络中,浅层基本不学习,权值变化小,后面几层一直在学习,结果就是,后面几层基本可以表示整个网络,失去了深度的意义。

关于梯度爆炸,根据链式求导法, 
第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率n 
假如激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会指数增加。

How to use BN

先解释一下对于图片卷积是如何使用BN层。 
 
这是文章卷积神经网络CNN(1)中5x5的图片通过valid卷积得到的3x3特征图(粉红色)。特征图里的值,作为BN的输入,也就是这9个数值通过BN计算并保存γ与β,通过γ与β使得输出与输入不变。假设输入的batch_size为m,那就有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.通过不断迭代直到训练结束,求得关于不同层的γ与β。如网络有n个BN层,每层根据batch_size决定有多少个变量,设定为m,这里的mini-batcherB指的是特征图大小*batch_size,即m=特征图大小*batch_size,因此,对于batch_size为1,这里的m就是每层特征图的大小。 
4.不断遍历训练集中的图片,取出每个batch_size中的γ与β,最后统计每层BN的γ与β各自的和除以图片数量得到平均直,并对其做无偏估计直作为每一层的E[x]与Var[x]。 
5.在预测的正向传播时,对测试数据求取γ与β,并使用该层的E[x]与Var[x],通过图中11:所表示的公式计算BN层输出。 
注意,在预测时,BN层的输出已经被改变,所以BN层在预测的作用体现在此处

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

原文地址:https://www.cnblogs.com/kk17/p/9693462.html

时间: 2024-10-23 21:26:11

【卷积神经网络】对BN层的解释的相关文章

神经网络:卷积神经网络CNN

一.前言 这篇卷积神经网络是前面介绍的多层神经网络的进一步深入,它将深度学习的思想引入到了神经网络当中,通过卷积运算来由浅入深的提取图像的不同层次的特征,而利用神经网络的训练过程让整个网络自动调节卷积核的参数,从而无监督的产生了最适合的分类特征.这个概括可能有点抽象,我尽量在下面描述细致一些,但如果要更深入了解整个过程的原理,需要去了解DeepLearning. 这篇文章会涉及到卷积的原理与图像特征提取的一般概念,并详细描述卷积神经网络的实现.但是由于精力有限,没有对人类视觉的分层以及机器学习等

DeepLearning (六) 学习笔记整理:神经网络以及卷积神经网络

神经网络 神经网络模型 前向传播 反向传播 Neural Networds Tips and Tricks Gradient Check Regularization 激活函数 sigmoid 函数 Tanh Relu 稀疏编码 卷积神经网络 卷积 局部感知 权值共享 多通道卷积 卷积输出大小计算公式 池化pooling后的平移不变性 Dropout Learning rate AdaGrad python 实现 caffe 中的学习率 参考文献 [原创]Liu_LongPo 转载请注明出处[C

卷积神经网络(CNN)新手指南 1

http://blog.csdn.net/real_myth/article/details/52273930 卷积神经网络(CNN)新手指南 2016-07-29 18:22 Blake 1条评论 卷积神经网络(Convolutional Neural Network,CNN)新手指南 引言 卷积神经网络:听起来像是生物与数学还有少量计算机科学的奇怪结合,但是这些网络在计算机视觉领域已经造就了一些最有影响力的创新.2012年神经网络开始崭露头角,那一年Alex Krizhevskyj在Imag

神经网络:卷积神经网络(转)

一.前言 这篇卷积神经网络是前面介绍的多层神经网络的进一步深入,它将深度学习的思想引入到了神经网络当中,通过卷积运算来由浅入深的提取图像的不同层次的特征,而利用神经网络的训练过程让整个网络自动调节卷积核的参数,从而无监督的产生了最适合的分类特征.这个概括可能有点抽象,我尽量在下面描述细致一些,但如果要更深入了解整个过程的原理,需要去了解DeepLearning. 这篇文章会涉及到卷积的原理与图像特征提取的一般概念,并详细描述卷积神经网络的实现.但是由于精力有限,没有对人类视觉的分层以及机器学习等

卷积神经网络(CNN)基础介绍

本文是对卷积神经网络的基础进行介绍,主要内容包含卷积神经网络概念.卷积神经网络结构.卷积神经网络求解.卷积神经网络LeNet-5结构分析.卷积神经网络注意事项. 一.卷积神经网络概念 上世纪60年代.Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念.到80年代.Fukushima在感受野概念的基础之上提出了神经认知机的概念,能够看作是卷积神经网络的第一个实现网络,神经认知机将一个视觉模式分解成很多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其

卷积神经网络(3)

迁移学习(概念): 就是将一个问题上训练好的模型通过简单的调整使其适用于一个新的问题.根据论文DeCAF中的结论,可以保留训练好的Inception-3模型中所有卷积层的参数,只是替换最后一层全连接层,在最后这一层全连接层之前的网络层称之为瓶颈层. 将新的图像通过训练好的卷积神经网络直到瓶颈层的过程可以看成是对图像进行特征提取的过程.在训练好的Inception-3模型中,因为将瓶颈层的输出再通过一个单层的全连接层神经网络 原文地址:https://www.cnblogs.com/xiaocho

实现CNN卷积神经网络

以上是模型,下面是代码: 1 import tensorflow as tf 2 import numpy as np 3 import time 4 from tensorflow.examples.tutorials.mnist import input_data 5 6 import os 7 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 8 9 start = time.clock() 10 11 # 下载并载入MNIST 手写数字库 12 mnist

C++卷积神经网络实例:tiny_cnn代码具体解释(7)——fully_connected_layer层结构类分析

之前的博文中已经将卷积层.下採样层进行了分析.在这篇博文中我们对最后一个顶层层结构fully_connected_layer类(全连接层)进行分析: 一.卷积神经网路中的全连接层 在卷积神经网络中全连接层位于网络模型的最后部分,负责对网络终于输出的特征进行分类预測,得出分类结果: LeNet-5模型中的全连接层分为全连接和高斯连接,该层的终于输出结果即为预測标签,比如这里我们须要对MNIST数据库中的数据进行分类预測,当中的数据一共同拥有10类(数字0~9),因此全全连接层的终于输出就是一个10

C++卷积神经网络实例:tiny_cnn代码具体解释(6)——average_pooling_layer层结构类分析

在之前的博文中我们着重分析了convolutional_layer类的代码结构.在这篇博文中分析相应的下採样层average_pooling_layer类: 一.下採样层的作用 下採样层的作用理论上来说由两个,主要是降维,其次是提高一点特征的鲁棒性.在LeNet-5模型中.每一个卷积层后面都跟着一个下採样层: 原因就是当图像在经过卷积层之后.因为每一个卷积层都有多个卷积模板,直接导致卷积结果输出的特征矩阵相对于输入的数据矩阵其维数要提高数倍.再加上存在若干卷积层(谷歌的某些模型甚至超过100层)