精华内容
下载资源
问答
  • 为什么数据要做归一化处理,什么是批归一化
    2020-12-21 10:24:39

    原因:

    我们知道网络一旦train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。

    批归一化

    批归一化(BN)是由Google于2015年提出,这是一个深度神经网络训练的技巧,它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散”的问题,从而使得训练深层网络模型更加容易和稳定。所以目前BN已经成为几乎所有卷积神经网络的标配技巧了。

    从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化,确实如此,对于训练中某一个batch的数据{x1,x2,...,xn},注意这个数据是可以输入也可以是网络中间的某一层输出。在BN出现之前,我们的归一化操作一般都在数据输入层,对输入的数据进行求均值以及求方差做归一化,但是BN的出现打破了这一个规定,我们可以在网络中任意一层进行归一化处理,因为我们现在所用的优化方法大多都是min-batch SGD,所以我们的归一化操作就成为Batch Normalization。

    更多相关内容
  • 批归一化(Batch Normalization)的详细解释​ 以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过矩阵乘法以及非...

    批归一化(Batch Normalization)的详细解释

    ​ 以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是肯定的。

    ​ 这种在神经网络中间层也进行归一化处理,使训练效果更好的方法,就是批归一化Batch Normalization(BN)。

    1. 批归一化(BN)算法的优点

    下面总结一下BN算法的优点:

    减少了人为选择参数。在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更小的 L2 正则项约束参数;

    减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;

    可以不再使用局部响应归一化。BN 本身就是归一化网络(局部响应归一化在 AlexNet 网络中存在)

    破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高 1% 的精度)。

    减少梯度消失,加快收敛速度,提高训练精度。

    2. 批归一化(BN)算法流程

    下面给出 BN 算法在训练时的过程

    输入:上一层输出结果 X = x 1 , x 2 , . . . , x m X = {x_1, x_2, ..., x_m}X=x1​,x2​,...,xm​,学习参数 γ , β \gamma, \betaγ,β

    算法流程:

    计算上一层输出数据的均值

    μ β = 1 m ∑ i = 1 m ( x i ) \mu_{\beta} = \frac{1}{m} \sum_{i=1}^m(x_i)μβ​=m1​i=1∑m​(xi​)

    其中,m是此次训练样本 batch 的大小。

    计算上一层输出数据的标准差

    σ β 2 = 1 m ∑ i = 1 m ( x i − μ β ) 2 \sigma_{\beta}^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_{\beta})^2σβ2​=m1​i=1∑m​(xi​−μβ​)2

    归一化处理,得到

    x ^ i = x i + μ β σ β 2 + ϵ \hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon}x^i​=σβ2​​+ϵxi​+μβ​​

    其中 ϵ \epsilonϵ 是为了避免分母为 0 而加进去的接近于 0 的很小值

    重构,对经过上面归一化处理得到的数据进行重构,得到

    y i = γ x ^ i + β y_i = \gamma \hat x_i + \betayi​=γx^i​+β

    其中,γ , β \gamma, \betaγ,β 为可学习参数。

    注:上述是 BN 训练时的过程,但是当在投入使用时,往往只是输入一个样本,没有所谓的均值 μ β \mu_{\beta}μβ​ 和标准差 σ β 2 \sigma_{\beta}^2σβ2​。此时,均值 μ β \mu_{\beta}μβ​ 是计算所有 batch μ β \mu_{\beta}μβ​ 值的平均值得到,标准差 σ β 2 \sigma_{\beta}^2σβ2​ 采用每个batch σ β 2 \sigma_{\beta}^2σβ2​ 的无偏估计得到。

    3. 批归一化和群组归一化比较

    名称

    特点

    批量归一化(Batch Normalization,以下简称 BN)

    可让各种网络并行训练。但是,批量维度进行归一化会带来一些问题——批量统计估算不准确导致批量变小时,BN 的误差会迅速增加。在训练大型网络和将特征转移到计算机视觉任务中(包括检测、分割和视频),内存消耗限制了只能使用小批量的 BN。

    群组归一化 Group Normalization (简称 GN)

    GN 将通道分成组,并在每组内计算归一化的均值和方差。GN 的计算与批量大小无关,并且其准确度在各种批量大小下都很稳定。

    比较

    在 ImageNet 上训练的 ResNet-50上,GN 使用批量大小为 2 时的错误率比 BN 的错误率低 10.6% ;当使用典型的批量时,GN 与 BN 相当,并且优于其他标归一化变体。而且,GN 可以自然地从预训练迁移到微调。在进行 COCO 中的目标检测和分割以及 Kinetics 中的视频分类比赛中,GN 可以胜过其竞争对手,表明 GN 可以在各种任务中有效地取代强大的 BN。

    4. Weight Normalization和Batch Normalization比较

    ​ Weight Normalization 和 Batch Normalization 都属于参数重写(Reparameterization)的方法,只是采用的方式不同。

    ​ Weight Normalization 是对网络权值W WW 进行 normalization,因此也称为 Weight Normalization;

    ​ Batch Normalization 是对网络某一层输入数据进行 normalization。

    ​ Weight Normalization相比Batch Normalization有以下三点优势:

    Weight Normalization 通过重写深度学习网络的权重W的方式来加速深度学习网络参数收敛,没有引入 minbatch 的依赖,适用于 RNN(LSTM)网络(Batch Normalization 不能直接用于RNN,进行 normalization 操作,原因在于:

    RNN 处理的 Sequence 是变长的;

    RNN 是基于 time step 计算,如果直接使用 Batch Normalization 处理,需要保存每个 time step 下,mini btach 的均值和方差,效率低且占内存)。

    Batch Normalization 基于一个 mini batch 的数据计算均值和方差,而不是基于整个 Training set 来做,相当于进行梯度计算式引入噪声。因此,Batch Normalization 不适用于对噪声敏感的强化学习、生成模型(Generative model:GAN,VAE)使用。相反,Weight Normalization 对通过标量g gg和向量v vv对权重W WW进行重写,重写向量v vv 是固定的,因此,基于 Weight Normalization 的 Normalization 可以看做比 Batch Normalization 引入更少的噪声。

    不需要额外的存储空间来保存 mini batch 的均值和方差,同时实现 Weight Normalization 时,对深度学习网络进行正向信号传播和反向梯度计算带来的额外计算开销也很小。因此,要比采用 Batch Normalization 进行 normalization 操作时,速度快。 但是 Weight Normalization 不具备 Batch Normalization 把网络每一层的输出 Y 固定在一个变化范围的作用。因此,采用 Weight Normalization 进行 Normalization 时需要特别注意参数初始值的选择。

    5. Batch Normalization在什么时候用比较合适

    ​ 在CNN中,BN应作用在非线性映射前。在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。

    ​ BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。

    展开全文
  • 批归一化的本质和意义 算法 1:批归一化变换,在一个 mini-batch 上应用于激活 x。 批归一化是一种用于训练神经网络模型的有效方法,是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。 ...

    论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

    Internal Covariate Shift

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

    Google 将这一现象总结为 Internal Covariate Shift,简称 ICS.

    BatchNorm的基本思想:能不能让每个隐层节点的激活输入分布固定下来呢?这样就避免了“Internal Covariate Shift”问题了。

    Mini-Batch SGD

    BatchNorm是基于Mini-Batch SGD的。SGD训练的缺点:超参数调起来很麻烦。

    所谓“Mini-Batch”,是指的从训练数据全集T中随机选择的一个训练数据子集合。假设训练数据集合T包含N个样本,而每个Mini-Batch的Batch Size为b,于是整个训练数据可被分成N/b个Mini-Batch。在模型通过SGD进行训练时,一般跑完一个Mini-Batch的实例,叫做完成训练的一步(step),跑完N/b步则整个训练数据完成一轮训练,则称为完成一个Epoch。完成一个Epoch训练过程后,对训练数据做随机Shuffle打乱训练数据顺序,重复上述步骤,然后开始下一个Epoch的训练,对模型完整充分的训练由多轮Epoch构成(参考图1)。

    在拿到一个Mini-Batch进行参数更新时,首先根据当前Mini-Batch内的b个训练实例以及参数对应的损失函数的偏导数来进行计算,以获得参数更新的梯度方向,然后根据SGD算法进行参数更新,以此来达到本步(Step)更新模型参数并逐步寻优的过程。

    批归一化的本质和意义

    算法 1:批归一化变换,在一个 mini-batch 上应用于激活 x。

    批归一化是一种用于训练神经网络模型的有效方法,是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。

    BatchNorm的目标是对特征进行归一化处理(使每层网络的输出都经过激活),得到标准差为 1 的零均值状态。所以其相反的现象是非零均值。这将如何影响模型的训练: 首先,这可以被理解成非零均值是数据不围绕 0 值分布的现象,而是数据的大多数值大于 0 或小于 0。结合高方差问题,数据会变得非常大或非常小。在训练层数很多的神经网络时,这个问题很常见。如果特征不是分布在稳定的区间(从小到大的值)里,那么就会对网络的优化过程产生影响。我们都知道,优化神经网络将需要用到导数计算。其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

    假设一个简单的层计算$y = (W_{x} + b)$,y 在 W 上的导数就是这样:$d_{y}=dW_{x}$。因此,x 的值会直接影响导数的值(当然,神经网络模型的梯度概念不会如此之简单,但理论上,x 会影响导数)。因此,如果 x 引入了不稳定的变化,则这个导数要么过大,要么就过小,最终导致学习到的模型不稳定。而这也意味着当使用批归一化时,我们可以在训练中使用更高的学习率。

    批归一化可帮助我们避免 x 的值在经过非线性激活函数之后陷入饱和的现象。也就是说,批归一化能够确保激活都不会过高或过低。这有助于权重学习——如果不使用这一方案,某些权重可能永远不会学习。这还能帮助我们降低对参数的初始值的依赖。

    批归一化也可用作正则化(regularization)的一种形式,有助于实现过拟合的最小化。使用批归一化时,我们无需再使用过多的 dropout;这是很有助益的,因为我们无需担心再执行 dropout 时丢失太多信息。但是,仍然建议组合使用这两种技术。

    均值为0,方差为1的标准正态分布代表什么含义:

    这意味着在一个标准差范围内,也就是说64%的概率x其值落在[-1,1]的范围内,在两个标准差范围内,也就是说95%的概率x其值落在了[-2,2]的范围内。那么这又意味着什么?我们知道,激活值x=WU+B,U是真正的输入,x是某个神经元的激活值,假设非线性函数是sigmoid,那么看下sigmoid(x)其图形:

    图:Sigmoid(x)

    sigmoid(x)的导数为:G’=f(x)*(1-f(x)),因为f(x)=sigmoid(x)在0到1之间,所以G’在0到0.25之间,其对应的图如下:

    假设没有经过BN调整前x的原先正态分布均值是-6,方差是1,那么意味着95%的值落在了[-8,-4]之间,那么对应的Sigmoid(x)函数的值明显接近于0,这是典型的梯度饱和区,在这个区域里梯度变化很慢,为什么是梯度饱和区?请看下sigmoid(x)如果取值接近0或者接近于1的时候对应导数函数取值,接近于0,意味着梯度变化很小甚至消失。而假设经过BN后,均值是0,方差是1,那么意味着95%的x值落在了[-2,2]区间内,很明显这一段是sigmoid(x)函数接近于线性变换的区域,意味着x的小变化会导致非线性函数值较大的变化,也即是梯度变化较大,对应导数函数图中明显大于0的区域,就是梯度非饱和区。

    批归一化的局限性

    局限1:BN是严重依赖Mini-Batch中的训练实例的

    如果Batch Size比较小则任务效果有明显的下降。在小的BatchSize意味着数据样本少,因而得不到有效统计量,也就是说噪音太大。

    局限2:对于有些像素级图片生成任务来说,BN效果不佳

    对于图片分类等任务,只要能够找出关键特征,就能正确分类,这算是一种粗粒度的任务,在这种情形下通常BN是有积极效果的。但是对于有些输入输出都是图片的像素级别图片生成任务,比如图片风格转换等应用场景,使用BN会带来负面效果,这很可能是因为在Mini-Batch内多张无关的图片之间计算统计量,弱化了单张图片本身特有的一些细节信息。

    局限3:RNN等动态网络使用BN效果不佳且使用起来不方便 !

    对于RNN来说,尽管其结构看上去是个静态网络,但在实际运行展开时是个动态网络结构,因为输入的Sequence序列是不定长的,这源自同一个Mini-Batch中的训练实例有长有短。对于类似RNN这种动态网络结构,BN使用起来不方便,因为要应用BN,那么RNN的每个时间步需要维护各自的统计量,而Mini-Batch中的训练实例长短不一,这意味着RNN不同时间步的隐层会看到不同数量的输入数据,而这会给BN的正确使用带来问题。假设Mini-Batch中只有个别特别长的例子,那么对较深时间步深度的RNN网络隐层来说,其统计量不方便统计而且其统计有效性也非常值得怀疑。另外,如果在推理阶段遇到长度特别长的例子,也许根本在训练阶段都无法获得深层网络的统计量。综上,在RNN这种动态网络中使用BN很不方便,而且很多改进版本的BN应用在RNN效果也一般。

    局限4:训练时和推理时统计量不一致

    对于BN来说,采用Mini-Batch内实例来计算统计量,这在训练时没有问题,但是在模型训练好之后,在线推理的时候会有麻烦。因为在线推理或预测的时候,是单实例的,不存在Mini-Batch,所以就无法获得BN计算所需的均值和方差,一般解决方法是采用训练时刻记录的各个Mini-Batch的统计量的数学期望,以此来推算全局的均值和方差,在线推理时采用这样推导出的统计量。虽说实际使用并没大问题,但是确实存在训练和推理时刻统计量计算方法不一致的问题。

    综上,共同点就是BN要求计算统计量的时候必须在同一个Mini-Batch内的实例之间进行统计,因此形成了Batch内实例之间的相互依赖和影响的关系。如何从根本上解决这些问题?一个自然的想法是:把对Batch的依赖去掉,转换统计集合范围。在统计均值方差的时候,不依赖Batch内数据,只用当前处理的单个训练数据来获得均值方差的统计量,这样因为不再依赖Batch内其它训练数据,那么就不存在因为Batch约束导致的问题。在BN后的几乎所有改进模型都是在这个指导思想下进行的。

    但是这个指导思路尽管会解决BN带来的问题,又会引发新的问题,新的问题是:我们目前已经没有Batch内实例能够用来求统计量了,此时统计范围必须局限在一个训练实例内,一个训练实例看上去孤零零的无依无靠没有组织,怎么看也无法求统计量,所以核心问题是对于单个训练实例,统计范围怎么算?

    ====> 请看下一篇:

    展开全文
  • 批归一化技术(Batch Normalization)是深度学习中最近出现的一个有效的技术,已经被广泛证明其有效性,并很快应用于研究和应用中去。这篇文章假设读者知道什么是批归一化,并对批归一化有一定程度的了解,知道它是...

    批归一化技术(Batch Normalization)是深度学习中最近出现的一个有效的技术,已经被广泛证明其有效性,并很快应用于研究和应用中去。这篇文章假设读者知道什么是批归一化,并对批归一化有一定程度的了解,知道它是如何工作的。如果你是刚刚接触这个概念,或者需要复习一下,您可以在后面的链接地址找到批归一化的简要概述(http://blog.csdn.net/malefactor/article/details/51476961)。

    本文使用两种不同方法实现了一种神经网络。每一步都输入相同的数据。网络具有完全相同的损失函数、完全相同的超参数和完全相同的优化器。然后在完全相同数量的 GPU 上进行训练。结果是其中一个版本的分类准确度比另一种低2%,并且这种性能的下降表现地很稳定。

    我们拿一个简单的 MNIST 和 SVHN 的分类问题为例。

    在***种实现中,抽取一批 MNIST 数据和一批 SVHN 数据,将它们合并到一起,然后将其输入网络。

    在第二种实现中,创建两个副本的网络,并共享权重。一个副本输入 MNIST 数据,另一个副本输入 SVHN 数据。

    请注意,在这两种实现里,一半的数据是 MNIST,另一半是 SVHN。另外由于第二种实现共享权重,使得两个模型的参数数量相同,且其更新方式也相同。

    简单地想一下,这两个模型的训练过程中梯度应该是相同的。事实也是如此。但是在加入批归一化之后情况就不同了。在***种实现中,同一批数据中同时包含 MNIST 数据和 SVHN 数据。而在第二种方法中,该模型分两批进行训练,一批只训练 MNIST 数据,另一批只训练 SVHN 数据。

    导致这个问题的原因就是:在训练的时候,在两个网络共享参数的同时,其数据集均值和方差的移动平均也是被共享的。这个参数的更新也是应用在两套数据集上的。在第二种方法中,图中上方的网络用来自 MNIST 数据的平均值和方差的估计值进行训练,而下方的网络用 SVHN 数据平均值和方差的估计值进行训练。但是由于移动平均在两个网络之间共享,所以移动平均收敛到 MNIST 和 SVHN 数据的平均值。

    因此,在测试时,测试集使用的批归一化的缩放和平移(某一种数据集的平均值)与模型预期的(两种数据集的平均值)是不同的。当测试的归一化与训练的归一化不同时,模型会得到如下结果。

    该图是在另一个相似数据集上(不是例子中的 MNIST 或 SVHN)用五个随机种子的得到的***、中间和最差的模型的性能。当使用两个共享权重的网络时,不仅性能下降明显,而且输出结果的方差也增加。

    每当单个小批次(minibatch)的数据不能代表整个数据的分布时,都会遇到这样的问题。这就意味着忘记将输入随机打乱顺序的情况下使用批归一化是很危险的。这在最近流行的生成对抗网络(GAN)里也是非常重要的。GAN中的判别器通常是对假数据和真实数据的混合进行训练。如果在判别器中使用了批归一化,在纯假数据的批次或纯真实数据批次之间进行交替是不正确的。每个小批次需要是两者的均匀混合(各 50%)。

    值得一提的是,在实践中,使用分离批归一化变量而共享其他变量的网络结构得到了***的结果。虽然这样实现起来比较复杂,但的确是比其他方法有效的(见下图)。

    批归一化:万恶之源

    纵观上述问题,作者得出了能不用就不用批归一化的结论。

    这个结论是从工程的角度来分析的。

    大体来讲,当代码出问题的时候,原因往往不外乎下面两个:

    很明显的错误。比如变量名输错了,或忘记调用某个函数。

    代码对与其交互的其他代码的行为有没有写明的依赖条件,并且的确有些条件没有满足。这些错误往往更加有害,因为一般需要花很长时间来弄清楚代码依赖什么样的条件。

    这两个错误都是不可避免的。第二类错误可以依靠使用更简单的方法和重用已有代码来减少。

    批归一化的方法有两个基本的性质:

    在训练时,单个输入 xi 的输出受制于小批次中的其他 xj 。

    在测试时,模型的计算路径发生了变化。因为现在它使用移动平均值而不是小批次平均值来进行归一化。

    几乎没有其他优化方法有这些性质。这样的话,对于实现批归一化代码的人,很容易假设以下的前提:输入的小批次内是不相关的,或者训练时与测试时做的事情是一样的。没有人会质疑这种做法。

    当然,你可以将批归一化看作***归一化黑盒,而且还挺好用的。但是在实践中,抽象泄漏总是存在的,批归一化也不例外,而且其特性使它更容易泄漏。

    为什么大家还不放弃批归一化?

    计算机学界有一封著名的文章: Dijkstra 的“ GoTo 语句是有害的”。在其中,Dijkstra 认为应该避免使用 goto 语句,因为它使得代码更难阅读,任何使用 goto 的程序都可以换种不用 goto 语句的方法重写。

    作者想要声明“批归一化是有害的”的观点,但无奈找不到太好的理由,毕竟批归一化实在太有用了。

    没错,批归一化的确存在问题。但当你做的一切都正确时,模型的确训练地快的多。批归一化的论文有超过 1400 次的引用不是白来的。

    批归一化有很多的替代方法,但它们也有自己的不足。层归一化(Layer Normalization)与 RNN 合用才更有效,而且用于卷积层有时会有问题。权重归一化(Weight Normalization)和余弦归一化(Cosine Normalization)都是比较新型的归一化方法。权重归一化文章中表示,权重归一化能够适用于一些批归一化不起作用的问题上。但是这些方法迄今为止并没有太多应用,或许这只是个时间问题。层归一化,权重归一化和余弦归一化都解决了上述批归一化的问题。如果你在做一个新问题而且想冒点险的话,推荐试一下这些归一化方法。毕竟不论用哪一种方法,都需要做超参数调整。调整好后,各种方法之间的区别应该是不大的。

    (如果你足够勇敢的话,甚至可以尝试批重归一化(Batch Renormalization),不过它仍然只在测试时使用移动平均值。 )

    使用批归一化可以看作是深度学习中的“魔鬼的契约”。换来的是高效的训练,失去的是可能的不正常的结果(insanity)。每个人都在签着这个契约。

    译者注

    作者关于”批归一化是有害的“,以及“尽可能不使用批归一化”的观点不免有些偏激。但文中提到的批归一化的陷阱的确是不得不防的。因为批归一化的有效性,很多深度学习的研究者的确将其当作是“魔法黑箱”,将其应用到每一个可以用的地方。因为这种简单粗暴的方法对于训练速度的提高是很有效的。但大家很难将准确率的降低归咎于批归一化,毕竟从没有见人提到过批归一化会降低训练准确率。

    但这种训练测试时数据集不一致的情况的确是很常见的。译者做的人工模拟训练数据集的方法中就会遇到这种问题。建议大家在使用批归一化之前仔细考虑这样几个问题:

    我的训练数据集的每批样本是否平均?

    我的训练数据集的每批均值是否和测试时的移动平均一致?

    否则的话,就有必要使用下面中的一种或几种方法来避免文中的问题:

    随机采样训练数据集来确保批次平均;

    像文中的例子一样修改模型来避免上述问题;

    使用层归一化,权重归一化或者余弦归一化来替代批归一化;

    不使用归一化方法。

    【责任编辑:枯木 TEL:(010)68476606】

    点赞 0

    展开全文
  • BN是由Google于2015年提出,这是一个深度神经网络训练的技巧,它不仅可以加快了模型的收敛...从字面意思看来Batch Normalization(简称BN)就是对每一数据进行归一化,确实如此,对于训练中某一个batch的数据{x1,x...
  • 批量归一化

    2022-02-16 17:29:44
    批量规范(batch normalization)[Ioffe & Szegedy, 2015],这是一种流行且有效的技术,可持续加速深层网络的收敛速度。再结合残差块,批量规范使得研究人员能够训练100层以上的网络。 ...
  • 原标题:批归一化Batch Normalization的原理及算法一、BN提出的背景意义本文的背景文献是:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,Batch ...
  • 深度学习_批量归一化

    2021-10-06 17:12:16
    在本节中,我们将介绍批量归一化(batch normalization),这是一种流行且有效的技术,可持续加速深层网络的收敛速度。在结合之后将介绍的残差快,批量归一化使得研究人员能够训练100层以上的网络。 训练深层网络 为...
  • Batch Normalization(批量归一化)的作用

    千次阅读 2020-08-06 10:42:07
    (4) BN具有一定的正则效果 在Batch Normalization中,由于我们使用mini-batch的均值与方差作为对整体训练样本均值与方差的估计,尽管每一个batch中的数据都是从总体样本中抽样得到,但不同mini-batch的均值与方差...
  • BN的作用就是将这些输入值或卷积网络的张量进行类似标准的操作,将其放缩到合适的范围,从而加快训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性 3.操作阶段 4.操作...
  • 零基础理解批量归一化(batch normalization)

    千次阅读 多人点赞 2019-08-27 22:19:24
    研读:Batch Normalization: Acceleration Deep Network Training by ...1.批量正则简要介绍 1.1 相关背景知识:深度学习 我们知道,神经网络是如图所示的结构,具有输入层、输出层以及中间的隐含层。 ...
  • 在深度神经网络训练中,Batch...批量归一化(BN)是神经网络的标准化方法/层通常BN神经网络输入被归一化[0,1]或[-1,1]范围,或者意味着均值为0和方差等于1。BN对网络的中间层执行白化本文只关注BN为什么工作的这么好,...
  • 1.简明 https://www.jianshu.com/p/fcc056c1c200 2.详细 https://blog.csdn.net/hjimce/article/details/50866313
  • 动手学深度学习——批量归一化

    千次阅读 2022-03-09 16:33:26
    1、批量归一化 损失出现在最后,后面的层训练较快; 数据在最底部,底部的层训练的慢;底部层一变化,所有都得跟着变;最后的那些层需要重新学习多次;导致收敛变慢; 固定小批量里面的均差和方差: 然后再做...
  • 批量归一化 BN 在过往训练中,因为损失在最后面,后面的层训练和更新较快,但是数据在最底部,底部训练较慢,底部更新一遍之后后面的也需要重新更新一次,所以导致整体的收敛很慢。 问题:我们在学习底部的时候如何...
  • 批量归一化(Batch Normalization)

    万次阅读 多人点赞 2019-06-23 12:00:34
    对输入数据进行标准化处理的原因? 使输入数据各个特征的分布相近: 神经网络学习的本质就是学习数据的分布,如果...为什么要使用批量归一化? 使用浅层模型时,随着模型训练的进行,当每层中参数更新时,靠近...
  • 10. 批量归一化 对于 “Kaggle比赛:预测房价” 的场景,可以对输入数据做标准化处理,使得: 处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。 标准化处理输入数据使各个特征的分布相近:这往往更...
  • (BN)批量归一化全面解析

    万次阅读 多人点赞 2018-10-03 11:53:36
    (3)再也不需要使用使用局部响应归一化层了(局部响应归一化是Alexnet网络用到的方法,搞视觉的估计比较熟悉),因为BN本身就是一个归一化网络层; (4)可以把训练数据彻底打乱(防止每训练的时候,某一个样本都...
  • Batch Normalization(BN)的作用 通常来说,数据标准预处理对于浅层模型就足够有效了:处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准处理输入数据使各个特征的分布相近:这往往更容易...
  • 在深度神经网络训练中,Batch ... 批量归一化(BN)是神经网络的标准化方法/层 通常BN神经网络输入被归一化[0,1]或[-1,1]范围,或者意味着均值为0和方差等于1。 BN对网络的中间层执行白化本文只关注BN为什么工作的这...
  • 批量归一化2.1批量归一化和权重初始化2.2 批量归一化与梯度消失2.3批量归一化算法2.4批量归一化算法改进2.5单样本测试 1.为什么需要批量归一化   在训练过程中,每层输入的分布不断的变化,这使得下一层需要不断的...
  • Recently, many deep architectures use "batch normalization" for training.What is "batch normalization"? What does it do mathematically? In what way does it help the training process?...
  • BN在深层神经网络的作用非常明显:若神经网络训练时遇到收敛速度较慢,或者“梯度爆炸”等无法训练的情况发生时都可以尝试用BN来解决。同时,常规使用情况下同样可以加入BN来加速模型训练,甚至提升模型精度。
  • BN批量归一化操作

    2022-03-03 23:54:21
    BN(Batch-Normal)批量归一化是一个非常常见的步骤了,很多卷积神经网络都使用了批量归一化。 先回顾一下传统的的神经网络前向传播的过程,之前在这篇文章里详细描述过全连接神经网络的输入输出尺寸变化。 通过...
  • 我们需要先将特征x1、x2…进行归一化,因为如果w1取值范围[100,1000],而w2取值范围只有[0.1,1],会使得w1在分类过程中起主导作用,这并不是我们希望的。虽然神经网络可以通过参数的调整来适应不同特征的取值范围,...
  • 所以BN的提出者就想能否将每层的激活值都进行归一化,将它们拉到均值为0方差为1的区域,这样大部分数据都从梯度趋于0的区域变换至激活函数中间梯度较大的区域,从而解决了梯度消失的问题。这样梯度变大了,网络更新...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,258
精华内容 4,503
关键字:

批归一化作用