Batch Normalization原理与优点总结

1. 引言

    随着深度学习的发展,神经网络的模型的深度越来越大,虽然可以提取到数据中更加深层的特征信息,但是,也容易引起梯度消失或梯度爆炸等问题。当使用SGD优化函数时,我们经常会遇到以下两个问题:

  • 模型对参数初始化方式、学习率的设置特别敏感。
  • 随着网络深度的加深,参数的微小变动都会不断被放大。

    为了解决这两个问题,Sergey Ioffe等人在《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》 一文提出了Batch Normalization,本文将基于该文章,对Batch Normalization的原理进行解析,并对其优点进行总结和归纳。

2. Batch Normalization

2.1 mini-batch Normalization

    在介绍Batch Normalization的思想之前,先明确一个概念,即作者在文中提出的Internal Covariate Shift,其意思是:在训练过程中,深层网络内部节点分布的变化称为Internal Covariate Shift。

    假设某一层的输入为\mathrm { x } = \left( x ^ { ( 1 ) } \ldots x ^ { ( d ) } \right),其中d表示输入的维度,则对每一维进行标准化,有:

                                                                             \widehat { x } ^ { ( k ) } = \frac { x ^ { ( k ) } - \mathrm { E } \left[ x ^ { ( k ) } \right] } { \sqrt { \operatorname { Var } \left[ x ^ { ( k ) } \right] } }

其中,E \left[ x ^ { ( k ) } \right]\operatorname { Var } \left[ x ^ { ( k ) } \right]都是在整个训练集上计算得到的期望和方差。但是这种简单的标准化会存在一个问题,即可能会使得激活函数的非线性能力失效,导致整个网络的表现能力降低,因此,为例克服这个问题,作者对每一个维度的标准化引入了一对参数\gamma ^ { ( k ) } , \beta ^ { ( k ) },对标准化后的值进行变换和移动,即:

                                                                             y ^ { ( k ) } = \gamma ^ { ( k ) } \widehat { x } ^ { ( k ) } + \beta ^ { ( k ) }

特别地,当\gamma ^ { ( k ) } = \sqrt { \operatorname { Var } \left[ x ^ { ( k ) } \right] }\beta ^ { ( k ) } = \mathrm { E } \left[ x ^ { ( k ) } \right]时,则模型的表现能力与不采用Batch Normalization相同。

     由于在全部训练集上进行Batch Normalization是不实际的,因此,作者提出了在mini-batch上进行Batch Normalization。记\mathcal { B }为一个batch大小为m的数据集,为了便于表示,将k进行省略,即第k个维度一个batch数据的表示为:

                                                                                \mathcal { B } = \left\{ x _ { 1 \ldots m } \right\}

记Batch Normalization转换为:

                                                                           \mathrm { BN } _ { \gamma , \beta } : x _ { 1 \ldots m } \rightarrow y _ { 1 \dots m } 

其中,y _ { 1 \dots m }表示对每一维进行Batch Normalization后的结果,则Batch Normalization的算法步骤如下:

其中,\epsilon为一个常数,主要为了确保计算的稳定。 

2.2 推理阶段

   由于在训练时,Batch Normalization是基于每一个mini-batch计算的,所以在预测或推理阶段,怎么对单个数据进行标准化呢?因为这时没法计算数据的均值和方差。针对这个问题,作者提出了算法2,即将训练时每个batch数据对应的均值和方差记录下来,利用他们来推算整个训练集的均值和方差,公式如下:

                                                                                   \begin{array} { r l } { \mathrm { E } [ x ] } & { \leftarrow \mathrm { E } _ { \mathcal { B } } \left[ \mu _ { \mathcal { B } } \right] } \\ { \operatorname { Var } [ x ] } & { \leftarrow \frac { m } { m - 1 } \mathrm { E } _ { \mathcal { B } } \left[ \sigma _ { \mathcal { B } } ^ { 2 } \right] } \end{array}

其中,\mu_{\mathcal { B }}\sigma _ { \mathcal { B } } ^ { 2 }分别对应每个mini-batch的均值和方差。这样就可以对预测数据进行Batch Normalization,具体的算法过程如下:

2.3 对于卷积神经网络的Batch Normalization

    对于卷积神经网络,为了保持卷积的特性,标准化是对每个feature-map进行,即每个feature-map不同位置的标准化采取同样的操作,令\mathcal { B }是大小为m的mini-batch对应的某个feature-map的所有数据的集合,假设feature-map的大小为p \times q,则对该feature-map的Batch Normalization则相当于对大小为m ^ { \prime } = | \mathcal { B } | = m \cdot p q的特征的标准化。

2.4 为什么Batch Normalization可以使用更高的学习率

    当使用Batch Normalization后,假设参数W变化为a W,则容易得到: 

                                                                                \mathrm { BN } ( W \mathrm { u } ) = \mathrm { BN } ( ( a W ) \mathrm { u } )

即参数的更新对每一层的输出不影响,另外,在反向传播时,有:

                                                                           \begin{aligned} \frac { \partial \mathrm { BN } ( ( a W ) \mathrm { u } ) } { \partial \mathrm { u } } & = \frac { \partial \mathrm { BN } ( W \mathrm { u } ) } { \partial \mathrm { u } } \\ \frac { \partial \mathrm { BN } ( ( a W ) \mathrm { u } ) } { \partial ( a W ) } & = \frac { 1 } { a } \cdot \frac { \partial \mathrm { BN } ( W \mathrm { u } ) } { \partial W } \end{aligned}

即当设置不同大小的学习率时,在反向传播时,都会被抵消掉,使得参数的更新相对稳定,因此,可以使用较大的学习率。

3.Batch Normalization的优点

    最后,对Batch Normalization的优点进行总结,大概有以下几个方面:

  • 可以采用更高的学习率,提高模型训练的速度,并且可以有效避免梯度的消失和爆炸
  • 起到正则化的作用,类似dropout的功能
  • 不用太在意参数的初始化

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Batch Normalization和Layer Normalization都是常用的深度学习网络中的归一化技术,可以加速模型收敛,提高模型的泛化能力。它们的原理和公式如下: 1. Batch Normalization Batch Normalization(简称BN)是在每个Batch中对每个神经元的输出进行归一化,使得每个神经元的输出都服从标准正态分布,公式如下: $$\hat{x_i} = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}$$ 其中,$\hat{x_i}$是归一化后的神经元输出,$x_i$是未归一化的神经元输出,$\mu_B$是Batch中所有神经元输出的均值,$\sigma_B^2$是Batch中所有神经元输出的方差,$\epsilon$是一个极小值,防止分母为0。 在归一化后,还需要对神经元输出进行缩放和平移,即: $$y_i = \gamma \hat{x_i} + \beta$$ 其中,$\gamma$和$\beta$是可学习的参数,用于缩放和平移神经元输出。 2. Layer NormalizationBatch Normalization不同,Layer Normalization(简称LN)是对每个神经元的输入进行归一化,使得每个神经元的输入都服从标准正态分布,公式如下: $$\hat{x_i} = \frac{x_i - \mu_L}{\sqrt{\sigma_L^2 + \epsilon}}$$ 其中,$\hat{x_i}$是归一化后的神经元输入,$x_i$是未归一化的神经元输入,$\mu_L$是该层所有神经元输入的均值,$\sigma_L^2$是该层所有神经元输入的方差,$\epsilon$是一个极小值,防止分母为0。 在归一化后,还需要对神经元输入进行缩放和平移,即: $$y_i = \gamma \hat{x_i} + \beta$$ 其中,$\gamma$和$\beta$是可学习的参数,用于缩放和平移神经元输入。 3. 优缺点 Batch Normalization优点是可以加速模型收敛,提高模型的泛化能力,但它需要对每个Batch中的数据进行归一化,因此需要较大的Batch Size才能获得较好的效果;另外,BN对网络的最终表现有一定的贡献,但对于网络的可解释性来说,BN会使得网络的特征变得更加难以理解。 Layer Normalization优点是不需要较大的Batch Size即可获得较好的效果,同时LN可以使得每个神经元的输入都服从标准正态分布,因此可以提高模型的泛化能力;另外,LN对于网络的可解释性来说更好,因为它不涉及Batch的处理。 但是,Layer Normalization的缺点是在训练过程中,它只考虑了当前层的神经元输入,而忽略了上一层和下一层的影响,因此可能会导致模型收敛速度较慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值