目录

  BN的由来

  BN的作用

  BN的操作阶段

  BN的操作流程

  BN可以防止梯度消失吗

  为什么归一化后还要放缩和平移

  BN在GoogLeNet中的应用

  参考资料


BN的由来

BN是由Google于2015年提出,论文是《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》,这是一个深度神经网络训练的技巧,主要是让数据的分布变得一致,从而使得训练深层网络模型更加容易和稳定。所以目前BN已经成为几乎所有卷积神经网络的标配技巧了。

返回目录

BN的作用

Internal Convariate shift是BN论文作者提出来的概念,表示数据的分布在网络传播过程中会发生偏移,我们举个例子来解释它,假设我们有一个玫瑰花的深度学习网络,这是一个二分类的网络,1表示识别为玫瑰,0则表示非玫瑰花。我们先看看训练数据集的一部分:

直观来说,玫瑰花的特征表现很明显,都是红色玫瑰花。 再看看训练数据集的另一部分:

很明显,这部分数据的玫瑰花各种颜色都有,其特征分布与上述数据集是不一样的。

通俗地讲,刚开始的数据都是同一个分布的,模型学习过程中,模型的参数已经适合于一种分布,突然又要适应另一种分布,这就会让模型的参数发生很大的调整,从而影响到收敛速度和精度,这就是Internal covariate shift。

而BN的作用就是将这些输入值或卷积网络的张量进行类似标准化的操作,将其放缩到合适的范围,从而加快训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性。

返回目录

BN的操作阶段

某一批次的张量通过卷积层并加上偏置后,relu激活之前,即

返回目录

BN的操作流程

假设某一批次的数据为2个2行2列2深度的张量,BN的过程如下:

第一步:

计算每一层深度的均值和方差

第二步:

对每一层设置2个参数,γ和β。假设第1深度γ=2、β=3;第2深度γ=5、β=8。

计算公式:

返回目录

BN可以防止梯度消失吗

BN可以防止学习过程中梯度消失,这一点论文中有阐述,作者说可以如果使用sigmod激活函数的时候,如果不用BN的话,会让反向传播的过程中梯度消失(当输出值较大或较小时,sigmod函数就会进入饱和区域,导致其导数几乎为零),但是可以通过使用Relu激活函数来解决,那就意味着BN主要还是让数据分布变为一致。

返回目录

为什么归一化后还要放缩和平移

减均值除方差得到的分布是正态分布,我们能否认为正态分布就是最好或最能体现我们训练样本的特征分布呢?

非也,如果激活函数在方差为1的数据上,没有表现最好的效果,比如Sigmoid激活函数。这个函数在-1~1之间的梯度变化不大。假如某一层学习到特征数据本身就分布在S型激活函数的两侧,把它归一化处理、标准差也限制在了1,把数据变换成分布于s函数的中间部分,就没有达到非线性变换的目的,换言之,减均值除方差操作后可能会削弱网络的性能。

不光是Sigmoid激活函数,Tanh函数在零附近也变成线性

而Relu activation函数,则将一半的输入清零。

因此,必须进行一些转换才能将分布从0移开。使用缩放因子γ和移位因子β来执行此操作。

随着训练的进行,这些γ和β也通过反向传播学习以提高准确性。这就要求为每一层学习2个额外的参数来提高训练速度。

这个最终转换因此完成了批归一算法的定义。缩放和移位是算法比较关键,因为它提供了更多的灵活性。假设如果我们决定不使用BatchNorm,我们可以设置γ=σ和β= mean,从而返回原始值。

PS:γ和β也是待学习的参数,在网络学习的过程中会被更新

返回目录

BN在GoogLeNet中的应用

在slim中,BN已经用在了InceptionV1中了,如下图所示。

BN是2015年提出的,InceptionV1是2014年提出的,但是slim的代码是2016年完成的。在Inception的其他版本中也有应用BN。

返回目录

参考资料

《图解深度学习与神经网络:从张量到TensorFlow实现》_张平

Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift

《深-度-学-习-核-心-技-术-与-实-践》

【深度学习】批归一化(Batch Normalization)

https://www.cnblogs.com/skyfsm/p/8453498.html

深度学习基础系列(七)| Batch Normalization

https://www.cnblogs.com/hutao722/p/9842199.html
深度学习 --- 优化入门四(Batch Normalization(批量归一化)一)

https://blog.csdn.net/weixin_42398658/article/details/84560411

批归一化Batch Normalization的原理及算法

https://baijiahao.baidu.com/s?id=1612936475591914473&wfr=spider&for=pc

返回目录

深度学习面试题21:批量归一化(Batch Normalization,BN)的更多相关文章

  1. 深度学习(二十九)Batch Normalization 学习笔记

    Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce 一.背景意义 ...

  2. 深度学习基础系列(七)| Batch Normalization

    Batch Normalization(批量标准化,简称BN)是近些年来深度学习优化中一个重要的手段.BN能带来如下优点: 加速训练过程: 可以使用较大的学习率: 允许在深层网络中使用sigmoid这 ...

  3. 从头学pytorch(十九):批量归一化batch normalization

    批量归一化 论文地址:https://arxiv.org/abs/1502.03167 批量归一化基本上是现在模型的标配了. 说实在的,到今天我也没搞明白batch normalize能够使得模型训练 ...

  4. 吴恩达深度学习笔记(十二)—— Batch Normalization

        主要内容: 一.Normalizing activations in a network 二.Fitting Batch Norm in a neural network 三.Why does ...

  5. 深度学习面试题29:GoogLeNet(Inception V3)

    目录 使用非对称卷积分解大filters 重新设计pooling层 辅助构造器 使用标签平滑 参考资料 在<深度学习面试题20:GoogLeNet(Inception V1)>和<深 ...

  6. 深度学习面试题27:非对称卷积(Asymmetric Convolutions)

    目录 产生背景 举例 参考资料 产生背景 之前在深度学习面试题16:小卷积核级联卷积VS大卷积核卷积中介绍过小卷积核的三个优势: ①整合了三个非线性激活层,代替单一非线性激活层,增加了判别能力. ②减 ...

  7. 深度学习面试题13:AlexNet(1000类图像分类)

    目录 网络结构 两大创新点 参考资料 第一个典型的CNN是LeNet5网络结构,但是第一个引起大家注意的网络却是AlexNet,Alex Krizhevsky其实是Hinton的学生,这个团队领导者是 ...

  8. 深度学习面试题24:在每个深度上分别卷积(depthwise卷积)

    目录 举例 单个张量与多个卷积核在深度上分别卷积 参考资料 举例 如下张量x和卷积核K进行depthwise_conv2d卷积 结果为: depthwise_conv2d和conv2d的不同之处在于c ...

  9. 深度学习面试题25:分离卷积(separable卷积)

    目录 举例 单个张量与多个卷积核的分离卷积 参考资料 举例 分离卷积就是先在深度上分别卷积,然后再进行卷积,对应代码为: import tensorflow as tf # [batch, in_he ...

随机推荐

  1. MySQL DataType--当整数列遇到小数

    初始化数据: ## 创建测试表 CREATE TABLE `tb002` ( `c1` ) NOT NULL AUTO_INCREMENT, `c2` ) DEFAULT NULL, `c3` ) D ...

  2. 学习python的日常6

    错误.调试和测试: 错误处理: try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivisionError as e: p ...

  3. Centos 7.6 双网卡绑定实现高可用

    Centos 7.6 双网卡绑定实现高可用 作者:尹正杰 版权声明:原创作品, 谢绝转载!否则将追究法律责任. 一.Bond模式概述 当linux系统上有多个单独网卡,又想充分利用这些网卡,同时对外提 ...

  4. 《少年先疯队》第八次团队作业:Alpha冲刺第四天

    前言    第四天冲刺会议    时间:2019.6.17    地点:宿舍 4.1 今日完成任务情况以及遇到的问题.   4.1.1今日完成任务情况 姚玉婷:管理员功能模块中,收费管理功能的实现. ...

  5. c# DES 加密解密方法

    #region 密钥 private static string key = "abcd1234"; //密钥(长度必须8位以上) #endregion #region DES加密 ...

  6. Coins in a Line

    Description There are n coins in a line. Two players take turns to take one or two coins from right ...

  7. Java【基础学习】 之调用构造方法顺序【坑】

    解释:这里的super()仅仅是用来占位的,实际上,必须是严格按照分层初始化的过程:1.先初始化父类X的成员变量,即初始化成员变量Y,打印出:Y2.初始化父类X的构造方法,打印出:X3.父类初始化完成 ...

  8. 数据库Count 语句详解

    数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查.在数据库的增删改查操作中,使用最频繁的就是查询操作.而在所有查询操作中,统计数量操作更是 ...

  9. 洛谷 P3372 【模板】线段树 1 题解

    Analysis 新学了一种很骚气的线段树写法,就是把整个线段树放到一个struct里面,然后可以直接调用里面的函数 #include<iostream> #include<cstd ...

  10. 使用Django实现发邮件功能

    django实现发送邮件功能   django实现邮件发送功能 1)首先注册一个邮箱,这里以163邮箱为例 2)注册之后登录,进行如下修改 找到设置,设置一个授权码,授权码的目的仅仅是让你有权限发邮件 ...