什么是批归一化Batch Normalization
训练神经网络的时候,如果只对输入层数据进行归一化处理,当数据经过wx+b这样的矩阵乘法以及非线性运算之后,其数据分布很可能会被改变,随着层数越来越深,数据分布变化越来越大,为了让激活函数的输入层更合理分布,所以我们考虑在网络的中间层也进行归一化,这就是BN

Batch Normalization的流程
设定上一层的输出结果是X= x 1 , x 2 . . . , x m x_1,x_2...,x_m x1​,x2​...,xm​,
第一步 计算上一层输出的均值:
常量 u β = ( x 1 + x 2 + . . . + x m ) / m u_{\beta}=(x_1+x_2+...+x_m)/m uβ​=(x1​+x2​+...+xm​)/m;其中m是batch size大小

第二步 计算上一层输出数据的标准差:
常量 σ β 2 = ∑ i = 1 m ( x i − u β ) 2 / m {\sigma}^2_{\beta}={\sum}_{i=1}^m(x_i-u_{\beta})^2/m σβ2​=∑i=1m​(xi​−uβ​)2/m

第三步 进行标准差标准化
x ‘ = x − u β σ 2 + ϵ x^{`} = \frac{x-u_{\beta}}{\sigma^2+\epsilon} x‘=σ2+ϵx−uβ​​ 其中 ϵ \epsilon ϵ是一个微小常数,只是为了让分母不等于0 。

第四步 重构x。得到每一层新的输入分布
y = γ ∗ x ‘ + β y=\gamma*x^` + \beta y=γ∗x‘+β,其中 学习的参数是 γ , β {\gamma},{\beta} γ,β.

上述是训练过程的批归一化,但是在测试过程中,基本只有一个测试样本,此时 u β u_\beta uβ​是从计算的所有批次batch 的 u β u_\beta uβ​加起来平均得到的,而标准差 σ β 2 {\sigma}^2_{\beta} σβ2​是根据每个批次 σ β 2 {\sigma}^2_{\beta} σβ2​的无偏估计得到的。所以当模型训练完毕的时候,测试阶段需要的参数也已经固定了。
其中固定的均值和方差就是
E [ x ] = E B [ u β ] E[x]=E_B[u_\beta] E[x]=EB​[uβ​]
V a r [ x ] = m m − 1 E B [ σ 2 ] Var[x]=\frac{m}{m-1}E_B[\sigma^2] Var[x]=m−1m​EB​[σ2]

测试时候,输入的分布就是
x ‘ = x − E [ x ] V a r [ x ] + ϵ x^`=\frac{x-E[x]}{\sqrt{}Var[x]+\epsilon} x‘= ​Var[x]+ϵx−E[x]​

每一层的分布就变成

批归一化BN的优点
1是为了加快模型训练
2是每一层的归一化避免了梯度消失或者梯度爆炸
3是关于BN能否解决过拟合的问题,这个问题网上讨论很多,我认为一种比较好的解答如下:个人认为BN不能解决过拟合,根据paper中的实验来说,是无法阻止过拟合的。但是BN可以在某些情况下对过拟合有抑制作用,使得过拟合在更多的 train epoch之后才出现。不能解决但是能缓解
BN的核心思想不是为了防止梯度消失或者是防止过拟合,其核心思想是通过系统参数搜索空间进行约束来增加系统鲁棒性,这种约束压缩了搜索空间,约束也改善了系统的结构合理性,这会带来一些列的性能改善,比如加速收敛、保证梯度、缓解过拟合等等,这也是为什么很多模型使用BN就不用dropout了。

归一化的意义
训练归一化的意义,缓解深层网络的梯度弥散问题,加快模型训练。
那么在深度学习模型中,越深的层数据分布变化的越剧烈,导致之前底层学习到的参数很难适应当前的数据分布。这样会导致
1 训练速度变慢;
2 前一层的剧烈变化可能导致后一层陷入饱和区,提前结束训练;
3层与层之间相互影响,优化很难进行。
常见的两种归一化
第一种 线性归一化
x ‘ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x^`=\frac{x-min(x)}{max(x)-min(x)} x‘=max(x)−min(x)x−min(x)​
第二种 标准差标准化
x ‘ = x − u σ x^`=\frac{x-u}{\sigma} x‘=σx−u​
标准差标准化让处理后的数据符合标准正态分布,也就是均值0,标准差1

Batch Normalization介绍相关推荐

  1. 深度神经网络中的Batch Normalization介绍及实现

    之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时,网络中会有BN层,即Batch Normalization,在每个Dense ...

  2. 『教程』Batch Normalization 层介绍

    原文链接 思考 YJango的前馈神经网络--代码LV3的数据预处理中提到过:在数据预处理阶段,数据会被标准化(减掉平均值.除以标准差),以降低不同样本间的差异性,使建模变得相对简单. 我们又知道神经 ...

  3. Batch Normalization (BN)简洁介绍

    提出BN的文献: Ioffe, S., & Szegedy, C. (2015). Batch normalization: Accelerating deep network trainin ...

  4. 【华为云技术分享】Batch Normalization (BN) 介绍

    Batch Normalization(BN)解决的是Internal Covariate Shift (ICS)的问题. Internal Covariate Shift在文中定义为 The cha ...

  5. batch normalization

    20210702 深度学习中的五种归一化(BN.LN.IN.GN和SN)方法简介 https://blog.csdn.net/u013289254/article/details/99690730 h ...

  6. 详解Batch Normalization及其反向传播

    ↑ 点击蓝字 关注视学算法 作者丨风行天上@知乎 来源丨https://zhuanlan.zhihu.com/p/45614576 极市导读 本文介绍了Batch Normalization的过程及其 ...

  7. Batch Normalization的诅咒

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:Sahil Uppal 编译:ronghuaiyang 导读 ...

  8. Batch Normalization应该放在ReLU非线性激活层的前面还是后面?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编辑:CVDaily  转载自:计算机视觉Daily https: ...

  9. Lesson 14.3 Batch Normalization综合调参实战

    Lesson 14.3 Batch Normalization综合调参实战   根据Lesson 14.2最后一部分实验结果不难看出,带BN层的模型并不一定比不带BN层模型效果好,要充分发挥BN层的效 ...

最新文章

  1. spring boot 1.5.4 整合 mybatis(十二)
  2. 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s
  3. js中(function(){…})()立即执行函数写法理解
  4. ACCESS常用数字类型的说明和取值范围
  5. 阿里云云计算 10 ECS的使用
  6. 计算机三级数据库技术复习资料总结
  7. 定积分计算(谭浩强c语言第5版p272)
  8. [Crypto/CTF]CTF Crypto 包函数和工具总结[ 2021/10/30更新]
  9. 深度学习中常用的激励函数
  10. 第二课 Python Web企业门户网站-框架搭建
  11. 数据流程分析【停车场管理系统】
  12. 180/360度舵机控制方法
  13. Python——魔方方法
  14. springboot实现读取excel插入数据库
  15. MATLB|多微电网及分布式能源交易
  16. [运放滤波器]5_滤波器的分类
  17. Win7与Ubuntu双系统时【卸载Ubuntu】
  18. linux网卡接收raw,网络数据接收过程分析(三)---RAW数据接收(1)
  19. 产品经理常用的软件可推荐的有哪些?
  20. android支付平台集成调研 .

热门文章

  1. idea双击打不开我的解决方法
  2. 解决maven打包 无法加载本地lib/下的jar包问题(程序包XXX不存在)
  3. SDUT 2021 Winter Individual Contest - J(Gym-101879)
  4. 一份风控模型性能提升秘籍奉上|附视频+实操(详版)
  5. because an app is obscuring a permission request,无法开启USB调试
  6. 阿里云ACP云计算错题集101-120
  7. 采用HTML,CSS,JAVASCRIPT的前端网页设计的内容展示
  8. 使用双标记写html代码时如何进行嵌套,【2020Python修炼记】前端开发之 前端基础和HTML入门...
  9. Go语言设计与实现 -- 内存管理器
  10. 阿里云HaaS100物联网开发板学习笔记(六)做个智能灯---一个完整的开发例子