精华内容
下载资源
问答
  • BN层原理作用

    千次阅读 2020-02-24 09:35:54
    BN:batchnorm 批量标准化。 解决的问题:输入的数据都具有不同的分布,会给下层网络的训练带来困难。 计算方法: 1.先求出此次批量数据x的均值 2.求出此次批量的方差 3.接下来就是对本次批量的x做归一化:xi-E...

    BN:batchnorm 批量标准化。

    解决的问题:输入的数据都具有不同的分布,会给下层网络的训练带来困难。

    计算方法:

    1.先求出此次批量数据x的均值

    2.求出此次批量的方差

    3.接下来就是对本次批量的x做归一化:xi-E(x)/(根号下批量方差-极小值(eps))防止分母为0.

    4.最后最重要,引入缩放和平移变量γ和β

    如果γ和β分别等于此batch的方差和均值,那么yi就还原到了归一化前的x,β 和γ分别称之为 平移参数和缩放参数 。这样就保证了每一次数据经过归一化后还保留的有学习来的特征,同时又能完成归一化这个操作,加速训练。

    展开全文
  • BN层原理解析

    万次阅读 多人点赞 2018-04-10 15:40:05
    前几天看了BN的那篇经典论文《《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》,心中留有很多疑惑,今天大概弄明白了,这里记录一下。1 训练数据为什么要测试...

    前几天看了BN的那篇经典论文《《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》,心中留有很多疑惑,今天大概弄明白了,这里记录一下。

    1 训练数据为什么要和测试数据同分布?

    看看下图,如果我们的网络在左上角的数据训练的,已经找到了两者的分隔面w,如果测试数据是右下角这样子,跟训练数据完全不在同一个分布上面,你觉得泛化能力能好吗?


    2 为什么白化训练数据能够加速训练进程

    如下图,训练数据如果分布在右上角,我们在初始化网络参数w和b的时候,可能得到的分界面是左下角那些线,需要经过训练不断调整才能得到穿过数据点的分界面,这个就使训练过程变慢了;如果我们将数据白化后,均值为0,方差为1,各个维度数据去相关,得到的数据点就是坐标上的一个圆形分布,如下图中间的数据点,这时候随便初始化一个w,b设置为0,得到的分界面已经穿过数据了,因此训练调整,训练进程会加快


    3 什么是梯度爆炸

    如果网络使用sigmod激活函数,误差在向前传递的时候,经过sigmod单元,需要乘sigmod的梯度,而sigmod的梯度最大是0.25,因此越向前传递,误差就越小了,这就是梯度消散,但是梯度爆炸是什么?注意误差在经过全连接或者卷积层时,也要乘以权重w,如果w都比较大,大过sigmod造成的减小,这样越往前误差就越来越大,梯度爆炸了!

    4 为什么BN层可以加速网络收敛速度

    原理如上面2类似,BN层的计算图如下面所示,x是输入数据,到xhat均值方差归一化,也就是类似2中白化的加速的原理,后面xhat到y其实就是普通的一个线性变换,类似全连接但是没有交叉,将这个线性变换和后面的网络看成一体的,是不是就跟2中情况一样了?如果没有BN层,x直接输入后面的网络,训练过程中x分布的变换必然导致后面的网络去调整学习以来适应x的均值和方差,映入了BN层,xhat是一个归一化的数据,代价就是网络中多了一个线性层y,但是前者带来的性能更加大,因此加速了。



    后面想想,感觉还是有点不清楚,虽然xhat是个归一化分布,但是y不一定是啊,最终是y输入到子网络,对原网络不一定有效吧?这里怀疑真正对加速起作用的是xhat到y的变换,这种单独对维度的线性变换只是在全连接的基础上少了输入输出间的交叉连接,这种形式的变换可能非常有利于分布的调整,如果在网络输入最前端加入这样一层,那岂不是无需对输入进行归一化了?后面有时间进行验证。那是不是x到xhat的变换就可以去掉了呢?不是,x到xhat的变换作用是缓解梯度弥散,这一点可以看下下面一点

    5 为什么BN层可以改善梯度弥散

    下面xhat到x的梯度公式,可以表示为正常梯度乘一个系数a,再加b,这里加了个b,整体给梯度一个提升,补偿sigmod上的损失,改善了梯度弥散问题。


    6 为什么BN层一般用在线性层和卷积层后面,而不是放在非线性单元后

    原文中是这样解释的,因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对他们进行归一化会产生更加稳定的分布。其实想想也是的,像relu这样的激活函数,如果你输入的数据是一个高斯分布,经过他变换出来的数据能是一个什么形状?小于0的被抑制了,也就是分布小于0的部分直接变成0了,这样不是很高斯了。


    作者在一个mnist上面也做了一个实验,用三个100个神经元的全连接隐藏层,每个输出接sigmoid非线性化,初始化W为小高斯值,最后隐藏层连接一个输出10个值的全连接,交叉熵损失。BN层用在每个全连接层的输出上,最后统计了训练速度和sigmoid的输入分布变化如下图,可以看到没有用BN的时候,sigmoid的输入分布是有剧烈调整的,正是这种剧烈调整拖慢了训练速度。最后训练完毕时,方差和均值都不在有大的变化,直接取一个均值用在推断上就可以了


    展开全文
  • 神经网络中BN层原理作用

    千次阅读 2020-09-28 15:06:04
    BN层介绍 BN,全称Batch Normalization,是2015年提出的一种方法,在进行深度网络训练时,大都会采取这种算法。 原文链接:Batch Normalization: Accelerating Deep Network Training ...BN层和卷积层,池化层一样都是一

    BN层介绍

    BN,全称Batch Normalization,是2015年提出的一种方法,在进行深度网络训练时,大都会采取这种算法。

    原文链接:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

    BN解决的问题:深度神经网络随着网络深度加深,训练起来越困难,收敛越来越慢。

    这个问题出现的原因:

    深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。
    Google 将这一现象总结为 Internal Covariate Shift,简称 ICS.

    机器学习领域有个很重要的假设:独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。而ICS现象的存在,导致输入的分布老是变化,不符合独立同分布的假设,因此网络模型很难稳定的去学习。

    那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的

    因此,BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的输入值(就是那个y=Wx+B,x是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近,所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,网络的输出就不会很大,可以得到比较大的梯度,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度

    BN层的实现

    在这里插入图片描述
    从论文中给出的伪代码可以看出来BN层的计算流程是:

    1.计算样本均值。

    2.计算样本方差。

    3.样本数据标准化处理。

    4.进行平移和缩放处理。引入了γ和β两个参数。来训练γ和β两个参数。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。
    BN就是对不同样本的同一特征做归一化。

    BN层的作用

    BN层的作用主要有三个:
    1.加快网络的训练和收敛的速度;
    2.控制梯度爆炸防止梯度消失;
    3.防止过拟合。
    接下来就分析一下为什么BN层有着三个作用。

    加快网络的训练和收敛的速度

    在深度神经网络中中,如果每层的数据分布都不一样的话,将会导致网络非常难收敛和训练,而如果把 每层的数据都在转换在均值为零,方差为1 的状态下,这样每层数据的分布都是一样的训练会比较容易收敛。

    控制梯度爆炸防止梯度消失

    梯度消失:在深度神经网络中,如果网络的激活输出很大,其对应的梯度就会很小,导致网络的学习速率就会很慢,假设网络中每层的学习梯度都小于最大值0.25,网络中有n层,因为链式求导的原因,第一层的梯度将会小于0.25的n次方,所以学习速率相对来说会变的很慢,而对于网络的最后一层只需要对自身求导一次,梯度就大,学习速率就会比较快,这就会造成在一个很深的网络中,浅层基本不学习,权值变化小,而后面几层网络一直学习,后面的网络基本可以表征整个网络,这样失去了深度的意义。(使用BN层归一化后,网络的输出就不会很大,梯度就不会很小)

    梯度爆炸:第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率n,假如激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会指数增加。(使用bn层后权值的更新也不会很大

    防止过拟合

    在网络的训练中,BN的使用使得一个minibatch中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个batch的其他样本,而每次网络都是随机取batch,这样就会使得整个网络不会朝这一个方向使劲学习。一定程度上避免了过拟合。

    为什么BN层一般用在线性层和卷积层后面,而不是放在非线性单元后

    原文中是这样解释的,因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对他们进行归一化会产生更加稳定的分布。其实想想也是的,像relu这样的激活函数,如果你输入的数据是一个高斯分布,经过他变换出来的数据能是一个什么形状?小于0的被抑制了,也就是分布小于0的部分直接变成0了,这样不是很高斯了。

    参考文献:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

    展开全文
  • BN(Batch Normalization)层原理作用

    千次阅读 2021-01-20 01:54:41
    BN层最重要的作用是让加速网络的收敛速度,同时让网络训练变得更容易;另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等,而没有使用BN的话,更大的学习率就可能导致训练发散,大学习率又...

    BN层的作用

    BN层最重要的作用是让加速网络的收敛速度,BN的论文名字也很清晰的说明了这个点《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,同时BN让网络训练变得更容易;另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等,而没有使用BN的话,更大的学习率就可能导致训练发散,大学习率又反过来作用到训练速度上,加速了收敛速度,两者相辅相成。
    此外,也有一种说法是BN层可以提高网络的泛化能力,抑制过拟合,不过这个说法一直存在争议。

    BN层计算过程

    BN层需要计算一个minibatch input feature( x i x_i xi)中所有元素的均值 μ \mu μ和方差 σ \sigma σ,然后对 x i x_i xi减去均值除以标准差,最后利用可学习参数 γ \gamma γ β \beta β进行仿射变换,即可得到最终的BN输出 y i y_i yi,具体过程如下:
    在这里插入图片描述
    具体过程为:
    1.计算样本均值。
    2.计算样本方差。
    3.样本数据标准化处理。
    4.进行平移和缩放处理。引入了 γ \gamma γ β \beta β两个参数。来训练γ和β两个参数。引入了这个可学习重构参数 γ \gamma γ β \beta β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。

    需要注意的是,既然BN是在batch维度上做normalization,那么BN涉及的几个变量的维度就应该是一个feature map的size,比如BN layer的输入是 N × C × W × H N \times C \times W \times H N×C×W×H,那么BN的参数维度就应该是 C × W × H C \times W \times H C×W×H,也就是说BN计算的是batch内feature map每个点的均值,方差,以及 γ \gamma γ β \beta β

    为什么BN能加速训练收敛

    Internal Covariate Shift

    提到训练收敛的问题,需要先解释一个现象,叫做内部协变量偏移(Internal Covariate Shift),对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”,Internal指的是深层网络的隐层,是发生在网络内部的事情,而不是covariate shift问题只发生在输入层。

    固定输入分布

    而BatchNorm的基本思想就是,能不能让每个隐层节点的激活输入分布固定下来呢?这样就避免了“Internal Covariate Shift”问题了。所以就有了BN中的数据标准化处理,BN 其实就是在做 feature scaling,而且它的目的也是为了在训练的时候避免这种 Internal Covariate Shift 的问题。

    batch normalization

    顺着这个思路想下去,如果要限制到一个固定的输入,那应该是什么样子。BN选择了normalization,也就是一种白化操作,这个很好理解,我们在原始图像输入到网络之前都会做减均值,除标准差的操作,这个操作有时单独做,有时和第一层卷积组合起来做,但是不管哪种都必须要有的。图像处理中对输入图像进行白化(Whiten)可以有效加快神经网络的收敛,而对多层网络中的每一层输出做白化,就是我们看到的在CNN中加入BN层的样子。

    γ \gamma γ& β \beta β

    但是到这里还没有结束,简单直接白化引入了太多的人工设计,使输入强行归一化,对于原始图像来说这样直接处理还行,但是越是到了网络的深层,CNN提取出来的特征就越是无法解释,那么同样的白化操作就变得不合理,所以BN在白化之后引入了两个参数控制白化的程度,它刚刚好使白化的逆过程,而且,这两个参数是参与训练的,那么一种极端的可能就是,白化如果对结果没有作用,那么 γ \gamma γ& β \beta β 很有可能将白化后的结果恢复成原来的样子。

    为什么BN能抑制过拟合

    BN层抑制过拟合抑制存在争议,《UNDERSTANDING DEEP LEARNING REQUIRES RETHINKING GENERALIZATION》实验出BN层加入使得overfitting再更多的training epoch后出现,但并不能阻止。
    如果硬要说是防止过拟合,可以这样理解:BN每次的mini-batch的数据都不一样,但是每次的mini-batch的数据都会对moving mean和moving variance产生作用,可以认为是引入了噪声,这就可以认为是进行了data augmentation,而data augmentation被认为是防止过拟合的一种方法。因此,可以认为用BN可以防止过拟合。

    BN层与卷积层的融合

    一般情况下BN层都是直接接到卷积操作之后,训练结束后,卷积和的参数和BN层的参数都会固定下来。同时上面介绍了,BN是对输入特征图的每一个像素点归一化后的线性变换,并且变换的参数相同。满足了这些特点,BN层在网络inference过程中,其实可以融合进卷积层中,具体的方式就是用BN的参数改变卷积核中每一个位置的参数。
    假设卷积变化如下:
    在这里插入图片描述
    我们将卷积公式代入到BN的公式中,有:
    在这里插入图片描述
    另:
    在这里插入图片描述
    在这里插入图片描述
    则有:
    在这里插入图片描述
    即重新计算后的卷积核参数,融合了固定参数的BN层。

    Sync BN

    在一般的视觉问题上,单卡的batchsize其实已经够大,没必要把所有卡上的都统计一遍。然而到了现在的检测或者分割问题上,有些大模型单卡只能bz=1,这样的话BN完全无法发挥作用,所以我们需要在更多的卡上同步bn。
    PyTorch-Encoding
    Synchronized-BatchNorm-PyTorch
    pytorch-syncbn

    展开全文
  • 5、BN层作用原理

    千次阅读 2020-06-03 14:53:03
    Normalization是数据标准化...(4)BN层一般用在线性层卷积层后面,而不是放在非线性单元后 因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接卷积层的输出一般是一个
  • 上图详细描述了BN层计算原理以及如何融合卷积层和BN层,这里进行验证: 定义三个模型: 定义模型1 : 一层卷积层一层BN层网络 import numpy as np import math import torch import torch.nn .
  • BN 层原理解析

    万次阅读 2018-08-11 10:40:24
    1 训练数据为什么要测试数据同分布? 看看下图,如果我们的网络在左上角的数据训练的,已经找到了两者的分隔面w,如果测试数据是右下角这样子,跟训练数据完全不在同一个分布上面,你觉得泛化能力能好吗? 2 ...
  • 文章目录一、BN算法概念二、Covariate Shift问题三、BN算法产生的背景四、BN算法的实现优点4.1 BN算法的实现4.2 BN算法在网络中的作用五、参考文献 一、BN算法概念 传统的神经网络,只是在将样本x输入到输入之前...
  • BN层 LN层 WN层作用介绍

    万次阅读 2017-06-02 14:36:38
    一:BN层李宏毅视频讲解BN(Batch Normalization)层的作用(1)加速收敛(2)控制过拟合,可以少用或不用Dropout正则(3)降低网络对初始化权重不敏感(4)允许使用较大的学习率 链接:... What is BN?...
  • BN层总结与实际作用

    千次阅读 2018-10-30 11:28:35
    提出BN层的目的 深度学习的一个重要假设是独立同分布假设(IID),这个假设不仅适用于训练集测试集,也适用于同一网络的不同层之间,即假设每一层的输入在经过与权重相乘非线性激活后,输出(即下一层的输入)...
  • 基础知识掌握情况决定研究的高度,我们刚开始接触深度学习时,一般都是看到别人的概括,这个方法很好能让我们快速上手,但是也有一个很大的缺点, 知识理解的不透彻,导致我们对算法优化时一头... 一、BN算法产生...
  • BN层原理分析

    2019-07-25 09:41:22
    前几天看了BN的那篇经典论文《《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》,心中留有很多疑惑,今天大概弄明白了,这里记录一下。 ...
  • 合并BN层到卷积层的原理及实验

    万次阅读 热门讨论 2018-08-01 21:14:22
    1. 为什么要合并BN层 在训练深度网络模型时,BN(Batch Normalization)层能够加速网络收敛,并且能够控制过拟合,一般放在卷积层之后。BN 层将数据归一化后,能够有效解决梯度消失与梯度爆炸问题。虽然 BN 层在...
  • BN层的可学习参数4. infer时BN的处理5. BN的具体计算步骤以及公式6. BNL2参数权重正则化的区别 1. BN的原理 BN就是在激活函数接收输入之前对数据分布进行规范化,具体计算就是去均值归一化,将数据的分布都规范...
  • 作用 1.解决反向传播时的梯度爆炸/消失 2.加快网络训练时的收敛速度 3.缓解过拟合 原理 1.将样本规范化至0均值,1方差 μB=1m∑i=1Nxiμ_B=\frac 1 m\sum_{i=1}^N{x_i}μB​=m1​∑i=1N​xi​ 2.使每一激活函数的...
  • BN层原理作用

    千次阅读 2021-11-20 23:12:21
    从论文中给出的伪代码可以看出来BN...BN层作用主要有三个: 1.加快网络的训练收敛的速度; 2.控制梯度爆炸防止梯度消失; 3.防止过拟合。 接下来就分析一下为什么BN层有着三个作用。 加快网络的训练收敛的速度 在
  • 归一化的作用 毫无疑问,这个是能加速训练的 并且能避免受到量纲的影响 2.单层神经网络中 图片上面的是单一网络 肯定ok的 那么,对于深层网络如何呢? 我们看第三网络的参数w[3]、b[3] 能否通过归一化a[2]呢来...
  • 基础知识(梯度爆炸梯度消失): 梯度爆炸:可以用这个图直观呈现,也就是梯度变化为正无穷或者负无穷(个人理解)。 梯度消失: 简单来说就是梯度接近0,神经网络的权重不再...BN(batch norm)的原理: 将样.
  • 深度学习BN层总结.pdf

    2019-12-11 14:25:47
    2019-9-23-batch_normalization.md 12/11/2019 layout: post title: "BN层原理及TF 中调用方法" data: 2019年9月23 日 20:59:05 permalink: batch_normalization.html categories: 深度学习 tags: batch_...
  • BN层和Dropout层

    2020-11-07 14:13:34
    原理 batch的训练方法: 按照batch来更新梯度,减少了梯度下降时的随机性; 与遍历整个数据集相比,减少计算量。 ...尺度缩放偏移 (变换回数据原始分布,减少) ...BN层放在卷积层后,用于重新调整数据分布 ...
  • 原 合并bn层到conv或FC层原理介绍及代码实现 2017年11月09日 17:38:27 crazy-ye 阅读数:5932更多 <div class="tags-box space&...
  • BN原理与使用过程详解

    万次阅读 多人点赞 2019-08-14 15:20:34
    Batch Normalization是由google提出的一种训练优化方法。参考论文:Batch Normalization ...网上对BN解释详细的不多,大多从原理上解释,没有说出实际使用的过程,这里从what, why, how三个角度去解释BN。 Wh...
  • merge卷积和bn层原理

    千次阅读 2020-12-10 21:36:31
    《merge卷积和bn层原理》   这是一个在移动端非常实用的技巧,而且丝毫不会影响模型的精度,而提高模型的运算速度,就是把BN层离线的时候做好,放在权重值偏执项中就可以了。 Key Words:merge卷积层和BN层 ...
  • 2. BN作用 但是我们以前在神经网络训练中,只是对输入数据进行归一化处理,却没有在中间进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过σ ( W X + b ) σ(W
  • Batch Normalization(BN层)详解

    千次阅读 2019-12-27 23:00:53
    其实网络一旦训练完毕,参数都是固定的,这个时候即使是每批训练样本进入网络,那么BN层计算的均值u、标准差都是固定不变的。我们可以采用这些数值来作为测试样本所需要的均值、标准差,于是最后测试阶段的uσ...
  • 1. 为什么要合并BN层 在训练深度网络模型时,BN(Batch Normalization)层能够加速网络收敛,并且能够控制过拟合,一般放在卷积层之后。BN 层将数据归一化后,能够有效解决梯度消失与梯度爆炸问题。虽然 BN 层在...
  • Dropout和BN(归一化)详解

    千次阅读 2020-05-03 20:03:44
    数据层面一般是使用数据增强手段,算法层面不外乎是:正则化、模型集成、earlystopping、dropout、BN等,本文重点详细讲解一下dropout和BN。 Dropout 背景 在2012年,Hinton在其论文《Improving neural networks by ...
  • 1 训练数据为什么要测试数据同分布? 看看下图,如果我们的网络在左上角的数据训练的,已经找到了两者的分隔面w,如果测试数据是右下角这样子,跟训练数据完全不在同一个分布上面,你觉得泛化能力能好吗? 2 为...
  • BN层

    2019-02-23 20:13:00
    论文名字:Batch Normalization: Accelerating Deep Network Training by Reducing ...BN被广泛应用于深度学习的各个地方,由于在实习过程中需要修改网络,修改的网络在训练过程中无法收敛,就添加了BN层进去...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,512
精华内容 3,004
关键字:

bn层的原理和作用