什么是BatchNorm?

【基础算法】六问透彻理解BN(Batch Normalization)

从上述知乎文章了解到,BN的核心公式是:
μ B = 1 m ∑ i = 1 m x i \mu_B = \frac{1}{m}\sum_{i=1}^m x_i μB=m1i=1mxi σ B 2 = 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2 = \frac{1}{m}\sum_{i=1}^m (x_i-\mu_B)^2 σB2=m1i=1m(xiμB)2 x ~ i = x i − μ B σ B 2 + ϵ \widetilde{x}_i = \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} x i=σB2+ϵ xiμB y i = γ x ~ i + β y_i=\gamma\widetilde{x}_i +\beta yi=γx i+β
简单地说,BN层就是对输入数据 B B B做了一个Z-score标准化,使得数据分布标准化成均值为0方差为1的正态分布。但是标准化的具体操作过程和实现效果值得注意。

  1. BatchNorm1d()
    假设有形状为 [ 5 , 1 , 5 , 1 ] [5,1,5,1] [5,1,5,1]张量数据 B B B,表示有5个1行5列的单通道数据。
    [ 1 , 2 , 3 , 4 , 5 ] [ 2 , 3 , 4 , 5 , 6 ] [ 3 , 4 , 5 , 6 , 7 ] [ 4 , 5 , 6 , 7 , 8 ] [ 5 , 6 , 7 , 8 , 9 ] [1,2,3,4,5]\\ [2,3,4,5,6]\\ [3,4,5,6,7]\\ [4,5,6,7,8]\\ [5,6,7,8,9] [1,2,3,4,5][2,3,4,5,6][3,4,5,6,7][4,5,6,7,8][5,6,7,8,9]BatchNorm需要输入一个参数,这个参数表示批归一化层的尺寸,也就是我有多少个特征需要归一化。在这里,每一个张量都有5个特征,因此输入参数5,即BatchNorm(5)。
    当执行BatchNorm1d(5)( B B B)时,每一个特征(即每一列)会被执行Z-score标准化。例如,计算第一列的均值为3,标准差为1.4142,第一列标准化的结果为: [ − 1.4142 , − 0.7071 , 0 , 0.7071 , 1.4142 ] T [-1.4142,-0.7071,0,0.7071,1.4142]^T [1.4142,0.7071,0,0.7071,1.4142]T
    同理,张量数据 B B B的批归一化结果(标准化结果)为: [ − 1.4142 , − 1.4142 , − 1.4142 , − 1.4142 , − 1.4142 ] [ − 0.7071 , − 0.7071 , − 0.7071 , − 0.7071 , − 0.7071 ] [ 0.0000 , 0.0000 , 0.0000 , 0.0000 , 0.0000 ] [ 0.7071 , 0.7071 , 0.7071 , 0.7071 , 0.7071 ] [ 1.4142 , 1.4142 , 1.4142 , 1.4142 , 1.4142 ] [-1.4142,-1.4142,-1.4142,-1.4142,-1.4142]\\ [-0.7071,-0.7071,-0.7071,-0.7071,-0.7071]\\ [0.0000,0.0000,0.0000,0.0000,0.0000]\\ [0.7071,0.7071,0.7071,0.7071,0.7071]\\ [1.4142,1.4142,1.4142,1.4142,1.4142] [1.4142,1.4142,1.4142,1.4142,1.4142][0.7071,0.7071,0.7071,0.7071,0.7071][0.0000,0.0000,0.0000,0.0000,0.0000][0.7071,0.7071,0.7071,0.7071,0.7071][1.4142,1.4142,1.4142,1.4142,1.4142]
    由此可见,使用BatchNorm1d会使特征与特征之间的可比性消失,即列与列变得不可比了。但是,特征值的可比性得到保留。
  2. BatchNorm2d()

为什么要用BatchNorm?

BatchNorm详解之原理及为什么神经网络需要它

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐