批量归一化和层归一化

深度学习中的归一化

  • batch normalization
  • layer nomalization
  • 区分

为什么需要进行归一化?
如果将输入序列的每一维数值进行归一化,使其在一定范围之内,比如 0 0 0 1 1 1之间,可以加快基于梯度下降的学习的收敛速度
原因:梯度下降以相同的学习率对每一维进行最小化,如果取值范围差异很大,学习就很难在各个维度上同时收敛;如果将学习率取得很小,可以避免这个问题,但是学习效率会降低。

batch normalization

  1. 基本思想:对前馈神经网络的每一层(除输出层外)的净输入或输入在每个批量的样本上进行归一化

  2. 作用:防止内部协变量推移,加快学习收敛速度,在一定程度上防止梯度消失或梯度爆炸

内部协变量偏移:神经网络的学习过程中,对于神经网络中间的每一层,其前面层的参数在学习中会不断改变,导致其输出也在不断改变,不利于这一层及后面层的学习,学习收敛速度会变慢。这种现象在网络的各层都会发生

如果要学习第 t t t层的参数,输入 h ( t − 1 ) h^{(t-1)} h(t1)相对比较固定较好,但是 h ( t − 1 ) h^{(t-1)} h(t1)依赖于 t − 1 t-1 t1层及其前面层的参数,在学习中会动态变化,导致第 t t t层及其后面层的学习不容易收敛。

假设批量数据在当前层的净输入是 { z 1 , z 2 , ⋯   , z n } \{z_{1},z_{2},\cdots,z_{n}\} {z1,z2,,zn},其中 z j z_{j} zj是第 j j j个样本的净输入, n n n为批量大小。首先计算当前层的净输入的均值和反差(无偏估计):
u = 1 n ∑ j = 1 n z j σ 2 = 1 n − 1 ∑ j = 1 n ( z j − u ) 2 u=\frac{1}{n}\sum_{j=1}^{n}z_{j}\\ \sigma^{2}=\frac{1}{n-1}\sum_{j=1}^{n}(z_{j}-u)^{2} u=n1j=1nzjσ2=n11j=1n(zju)2
其中 u , σ 2 u,\sigma^{2} u,σ2分别表示均值向量和反差向量。然后对每个样本的净输入进行归一化,得到向量:
z ˉ j = z j − u σ 2 + ϵ , j = 0 , 1 , ⋯   , n \bar{z}_{j}=\frac{z_{j}-u}{\sqrt{\sigma^{2}+\epsilon}},j=0,1,\cdots,n zˉj=σ2+ϵ zju,j=0,1,,n
其中, ϵ \epsilon ϵ保证分母不为0,然后再进行仿射变换,得到向量
z ~ j = γ ⊙ z ˉ j + β \tilde{z}_{j}=\gamma \odot \bar{z}_{j}+\beta z~j=γzˉj+β
其中 γ , β \gamma,\beta γ,β是参数向量, ⊙ \odot 为向量的逐元素积。 z ~ j \tilde{z}_{j} z~j为当前层的输出

  • 批量归一化对于每一个批量,每一层(除输出层外)都有相同的结构。
  • 每一个批量在每一层有各自均值和反差 u , σ u,\sigma u,σ,当输入样本和网络参数确定时, u , σ u,\sigma u,σ也确定了
  • 每一层有各自的参数 γ , β \gamma, \beta γ,β归所有批量共有

layer nomalization

  1. 基本思想:在每一层的神经元上进行归一化,(与批量归一化的区别)而不是在每一批量的样本上
  2. 作用:防止内部协变量偏移
  3. 优点:实现简单,不需要调节超参数:批量大小

假设当前层的神经元的净输入时 z = ( z 1 , z 2 , ⋯   , z m ) T z=(z_{1},z_{2},\cdots,z_{m})^{T} z=(z1,z2,,zm)T,其中 z j z_{j} zj是第 j j j个神经元的净输入, m m m为神经元个数。训练时,首先计算这一层净输入的均值与反差(无偏估计):
u = 1 m ∑ j = 1 n z j σ 2 = 1 m − 1 ∑ j = 1 n ( z j − u ) 2 u=\frac{1}{m}\sum_{j=1}^{n}z_{j}\\ \sigma^{2}=\frac{1}{m-1}\sum_{j=1}^{n}(z_{j}-u)^{2} u=m1j=1nzjσ2=m11j=1n(zju)2
然后对每个神经元的净输入进行归一化,得到向量:
z ˉ j = z j − u σ 2 + ϵ , j = 0 , 1 , ⋯   , n \bar{z}_{j}=\frac{z_{j}-u}{\sqrt{\sigma^{2}+\epsilon}},j=0,1,\cdots,n zˉj=σ2+ϵ zju,j=0,1,,n
其中, ϵ \epsilon ϵ保证分母不为0,然后再进行仿射变换,得到向量
z ~ j = γ ⋅ z ˉ j + β \tilde{z}_{j}=\gamma \cdot \bar{z}_{j}+\beta z~j=γzˉj+β
其中 γ , β \gamma,\beta γ,β是参数向量,在每一层都做相同的处理(每一层均有两个参数 γ , β ) \gamma,\beta) γ,β)

区分

假设当前层的净输入矩阵如下:
X = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋯ ⋮ x n 1 x n 2 ⋯ x n m ] = ( x 1 , x 2 , ⋯   , x n ) T X=\begin{bmatrix} x_{11} & x_{12} & \cdots&x_{1m} \\ x_{21} & x_{22} & \cdots&x_{2m}\\ \vdots & \vdots & \cdots & \vdots\\ x_{n1} & x_{n2} & \cdots&x_{nm} \end{bmatrix}=(x_{1},x_{2},\cdots,x_{n})^{T} X= x11x21xn1x12x22xn2x1mx2mxnm =(x1,x2,,xn)T
其中, x i = ( x i 1 , x i 2 , ⋯   , x i m ) T x_{i}=(x_{i1},x_{i2},\cdots,x_{im})^{T} xi=(xi1,xi2,,xim)T 表示第 i i i个样本, x i j x_{ij} xij表示第 i i i个样本在第 j j j个神经网络的输入,一共含有m个神经元。

  • 批量归一化:
    u = 1 n ∑ i = 1 n x i ∈ R m σ 2 = 1 n − 1 ∑ i = 1 n ( x i − u ) 2 x ˉ i = x i − u σ 2 + ϵ u = \frac{1}{n}\sum_{i=1}^{n}x_{i}\in R^{m}\\ \sigma^{2}=\frac{1}{n-1}\sum_{i=1}^{n}(x_{i}-u)^{2}\\ \bar{x}_{i}=\frac{x_{i}-u}{\sqrt{\sigma^{2}+\epsilon}} u=n1i=1nxiRmσ2=n11i=1n(xiu)2xˉi=σ2+ϵ xiu
  • 层归一化:
    u i = 1 m ∑ j = 1 m x i j ∈ R σ i 2 = 1 m − 1 ∑ j = 1 m ( x i j − u i ) 2 x ˉ i j = x i j − u i σ i 2 + ϵ u_{i} = \frac{1}{m}\sum_{j=1}^{m}x_{ij}\in R\\ \sigma_{i}^{2}=\frac{1}{m-1}\sum_{j=1}^{m}(x_{ij}-u_{i})^{2}\\ \bar{x}_{ij}=\frac{x_{ij}-u_{i}}{\sqrt{\sigma_{i}^{2}+\epsilon}} ui=m1j=1mxijRσi2=m11j=1m(xijui)2xˉij=σi2+ϵ xijui

你可能感兴趣的:(算法工程师,人工智能,深度学习,神经网络)