
文章目录
- 一、Batch normalization 理论与应用
- 1. 理论解释
- 2. 数值例子
 
- 二、Layer normalization 理论与应用
- 1. 理论解释
- 2. 数值例子
 
- 三、Layer Normalization 和 Batch Normalization 的区别
- 四、《Transformers without Normalization》笔记
一、Batch normalization 理论与应用
1. 理论解释
Batch Normalization(批归一化)是一种用于深度学习的优化技术,由Sergey Ioffe和Christian Szegedy在2015年提出。它通过对每一层的输入进行归一化处理,加速训练并提升模型性能。
原理
- 归一化:
- 对每个小批量数据(mini-batch)的每个特征维度进行归一化,使其均值为0,方差为1。
- 公式为:
 x ^ i = x i − μ B σ B 2 + ϵ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i=σB2+ϵxi−μB
 其中, x i x_i xi是输入, μ B \mu_B μB是均值, σ B 2 \sigma_B^2 σB2是方差, ϵ \epsilon ϵ是防止除零的小常数。
- 缩放和平移:
- 归一化后,通过可学习的参数 γ \gamma γ和 β \beta β进行缩放和平移,恢复数据的表达能力。
- 公式为:
 y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
 其中, y i y_i yi是输出, γ \gamma γ和 β \beta β是可学习参数。
作用
- 加速训练: 
  - 归一化后的数据分布更稳定,减少了内部协变量偏移,允许使用更高的学习率,加快收敛。
 
- 防止梯度消失/爆炸: 
  - 归一化使激活值保持在合理范围内,缓解了梯度消失或爆炸问题。
 
- 正则化效果: 
  - 由于使用小批量数据的统计量,引入了噪声,起到轻微的正则化作用,减少过拟合。
 
- 减少对初始化的依赖: 
  - 归一化使网络对参数初始化的敏感性降低,简化了调参过程。
 
实现
在训练时,计算每个小批量的均值和方差;在测试时,使用训练数据的移动平均均值和方差。
 代码示例
import torch
import torch.nn as nn
# 定义一个带BatchNorm的层
batch_norm = nn.BatchNorm2d(num_features=64)
# 输入数据
input_data = torch.randn(32, 64, 128, 128)
# 前向传播
output = batch_norm(input_data)
总结
Batch Normalization通过对每层输入进行归一化,加速训练、防止梯度问题、提供正则化效果,并减少对初始化的依赖,是深度学习中的重要技术。
2. 数值例子
通过一个具体的数值例子来说明 Batch Normalization 的计算过程。
假设我们有一个 mini-batch,包含 3 个样本,每个样本有 2 个特征。数据如下:
 
      
       
        
        
          X 
         
        
          = 
         
         
         
           [ 
          
          
           
            
             
             
               1 
              
             
            
            
             
             
               2 
              
             
            
           
           
            
             
             
               3 
              
             
            
            
             
             
               4 
              
             
            
           
           
            
             
             
               5 
              
             
            
            
             
             
               6 
              
             
            
           
          
         
           ] 
          
         
        
       
         X = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \\ \end{bmatrix} 
        
       
     X= 
              135246 
              
 其中:
- 每一行是一个样本。
- 每一列是一个特征(例如,特征 1 和特征 2)。
Batch Normalization 的计算步骤
-  计算每个特征的均值和方差 Batch Normalization 是对每个特征分别进行归一化的。我们分别计算特征 1 和特征 2 的均值和方差。 
- 特征 1(第一列:1, 3, 5): 
  - 均值: μ 1 = 1 + 3 + 5 3 = 3 \mu_1 = \frac{1 + 3 + 5}{3} = 3 μ1=31+3+5=3
- 方差: σ 1 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(1−3)2+(3−3)2+(5−3)2=34+0+4=38
 
- 特征 2(第二列:2, 4, 6): 
  - 均值: μ 2 = 2 + 4 + 6 3 = 4 \mu_2 = \frac{2 + 4 + 6}{3} = 4 μ2=32+4+6=4
- 方差: σ 2 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(2−4)2+(4−4)2+(6−4)2=34+0+4=38
 
- 归一化
使用均值和方差对每个特征进行归一化。归一化公式为:
  
      
       
        
         
          
          
            x 
           
          
            ^ 
           
          
         
           i 
          
         
        
          = 
         
         
          
           
           
             x 
            
           
             i 
            
           
          
            − 
           
          
            μ 
           
          
          
           
            
            
              σ 
             
            
              2 
             
            
           
             + 
            
           
             ϵ 
            
           
          
         
        
       
         \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} 
        
       
     x^i=σ2+ϵxi−μ
 假设  
     
      
       
       
         ϵ 
        
       
         = 
        
       
         0.0001 
        
       
      
        \epsilon = 0.0001 
       
      
    ϵ=0.0001(一个很小的常数,防止除零)。
-  特征 1 的归一化: 
 x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.00011−3≈1.633−2≈−1.225
 x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.00013−3≈1.6330≈0
 x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.00015−3≈1.6332≈1.225
-  特征 2 的归一化: 
 x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.00012−4≈1.633−2≈−1.225
 x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.00014−4≈1.6330≈0
 x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.00016−4≈1.6332≈1.225
归一化后的数据为:
X ^ = [ − 1.225 − 1.225 0 0 1.225 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} X^= −1.22501.225−1.22501.225 
- 缩放和平移
Batch Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ 和 β \beta β。假设 γ = [ 1 , 1 ] \gamma = [1, 1] γ=[1,1] 和 β = [ 0 , 0 ] \beta = [0, 0] β=[0,0](初始值),则输出为:
y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γ⋅x^i+β
计算后结果与归一化结果相同:
Y = [ − 1.225 − 1.225 0 0 1.225 1.225 ] Y = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} Y= −1.22501.225−1.22501.225 
如果 γ = [ 2 , 2 ] \gamma = [2, 2] γ=[2,2] 和 β = [ 1 , 1 ] \beta = [1, 1] β=[1,1],则输出为:
Y = [ − 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 − 1.45 1 1 3.45 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & -1.225 \times 2 + 1 \\ 0 \times 2 + 1 & 0 \times 2 + 1 \\ 1.225 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & -1.45 \\ 1 & 1 \\ 3.45 & 3.45 \\ \end{bmatrix} Y= −1.225×2+10×2+11.225×2+1−1.225×2+10×2+11.225×2+1 = −1.4513.45−1.4513.45 
小结
- 归一化:将数据调整为均值为 0,方差为 1。
- 缩放和平移:通过 γ \gamma γ 和 β \beta β 恢复数据的表达能力。
- 最终输出:归一化后的数据经过缩放和平移,得到最终的输出。
 通过这个数值例子,可以清楚地看到 Batch Normalization 的计算过程及其作用。
二、Layer normalization 理论与应用
1. 理论解释
Layer Normalization(层归一化)是另一种归一化技术,由 Jimmy Lei Ba 等人在 2016 年提出。它与 Batch Normalization(批归一化)的目标类似,都是为了加速训练并提高模型性能,但它们的归一化方式和应用场景有所不同。
Layer Normalization 的原理
Layer Normalization 是对单个样本的所有特征进行归一化,而不是像 Batch Normalization 那样对整个 mini-batch 的每个特征进行归一化。具体步骤如下:
- 计算均值和方差:
- 对于每个样本,计算其所有特征的均值和方差。
- 假设输入为  
      
       
        
        
          ( 
         
        
          x 
         
        
          = 
         
        
          [ 
         
         
         
           x 
          
         
           1 
          
         
        
          , 
         
         
         
           x 
          
         
           2 
          
         
        
          , 
         
        
          … 
         
        
          , 
         
         
         
           x 
          
         
           d 
          
         
        
          ] 
         
        
       
         (x = [x_1, x_2, \dots, x_d] 
        
       
     (x=[x1,x2,…,xd]( 
      
       
        
        
          d 
         
        
       
         d 
        
       
     d是特征维度),则:
 μ = 1 d ∑ i = 1 d x i \mu = \frac{1}{d} \sum_{i=1}^d x_i μ=d1i=1∑dxi
 σ 2 = 1 d ∑ i = 1 d ( x i − μ ) 2 \sigma^2 = \frac{1}{d} \sum_{i=1}^d (x_i - \mu)^2 σ2=d1i=1∑d(xi−μ)2
- 归一化:
- 使用均值和方差对每个特征进行归一化:
 x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵxi−μ
 其中, ϵ \epsilon ϵ 是一个很小的常数,用于防止除零。
- 缩放和平移:
- 引入可学习的参数 
      
       
        
        
          γ 
         
        
       
         \gamma 
        
       
     γ 和  
      
       
        
        
          β 
         
        
       
         \beta 
        
       
     β,对归一化后的数据进行缩放和平移:
 y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
Layer Normalization 的特点
- 对单个样本操作: 
  - Layer Normalization 是对每个样本的所有特征进行归一化,而不是对整个 mini-batch 的每个特征进行归一化。
 
- 适用于变长数据: 
  - 由于不依赖于 mini-batch 的大小,Layer Normalization 更适合处理变长数据(如 NLP 中的序列数据)。
 
- 对 mini-batch 大小不敏感: 
  - Layer Normalization 的性能不受 mini-batch 大小的影响,即使 batch size 为 1 也能正常工作。
 
2. 数值例子
通过一个包含多个样本的例子来详细说明 Layer Normalization 的计算过程。
假设我们有一个 mini-batch,包含 2 个样本,每个样本有 3 个特征。数据如下:
X = [ 2 4 6 1 3 5 ] X = \begin{bmatrix} 2 & 4 & 6 \\ 1 & 3 & 5 \\ \end{bmatrix} X=[214365]
其中:
- 每一行是一个样本。
- 每一列是一个特征(例如,特征 1、特征 2 和特征 3)。
Layer Normalization 的计算步骤
Layer Normalization 是对每个样本的所有特征进行归一化。因此,我们需要分别对每个样本计算均值和方差,然后进行归一化。
-  对第一个样本[2, 4, 6]的计算 -  计算均值和方差: - 均值:
 μ 1 = 2 + 4 + 6 3 = 4 \mu_1 = \frac{2 + 4 + 6}{3} = 4 μ1=32+4+6=4
- 方差:
 σ 1 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(2−4)2+(4−4)2+(6−4)2=34+0+4=38
 
- 均值:
-  归一化: 
 使用公式:
 x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵxi−μ
 假设 ϵ = 0.0001 \epsilon = 0.0001 ϵ=0.0001。
-  特征 1: 
 x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.00012−4≈1.633−2≈−1.225 - 特征 2:
 x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.00014−4≈1.6330≈0
- 特征 3:
 x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.00016−4≈1.6332≈1.225
 归一化后的第一个样本: 
 x ^ 1 = [ − 1.225 , 0 , 1.225 ] \hat{x}_1 = [-1.225, 0, 1.225] x^1=[−1.225,0,1.225]
-  
-  对第二个样本[1, 3, 5]的计算 -  计算均值和方差: - 均值:
 μ 2 = 1 + 3 + 5 3 = 3 \mu_2 = \frac{1 + 3 + 5}{3} = 3 μ2=31+3+5=3
- 方差:
 σ 2 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(1−3)2+(3−3)2+(5−3)2=34+0+4=38
 
- 均值:
-  归一化: 
 使用公式: x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵxi−μ -  特征 1: 
 x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.00011−3≈1.633−2≈−1.225
-  特征 2: 
 x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.00013−3≈1.6330≈0
-  特征 3: 
 x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.00015−3≈1.6332≈1.225归一化后的第二个样本: 
 x ^ 2 = [ − 1.225 , 0 , 1.225 ] \hat{x}_2 = [-1.225, 0, 1.225] x^2=[−1.225,0,1.225]
 
-  
-  归一化后的结果 将所有样本的归一化结果组合起来: 
 X ^ = [ − 1.225 0 1.225 − 1.225 0 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} X^=[−1.225−1.225001.2251.225]
-  缩放和平移 
 Layer Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ 和 β \beta β。假设 γ = [ 1 , 1 , 1 ] \gamma = [1, 1, 1] γ=[1,1,1] 和 β = [ 0 , 0 , 0 ] \beta = [0, 0, 0] β=[0,0,0](初始值),则输出为:y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γ⋅x^i+β 计算结果与归一化结果相同: Y = [ − 1.225 0 1.225 − 1.225 0 1.225 ] Y = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} Y=[−1.225−1.225001.2251.225] 如果 γ = [ 2 , 2 , 2 ] \gamma = [2, 2, 2] γ=[2,2,2] 和 β = [ 1 , 1 , 1 ] \beta = [1, 1, 1] β=[1,1,1],则输出为: Y = [ − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 1 3.45 − 1.45 1 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & 1 & 3.45 \\ -1.45 & 1 & 3.45 \\ \end{bmatrix} Y=[−1.225×2+1−1.225×2+10×2+10×2+11.225×2+11.225×2+1]=[−1.45−1.45113.453.45] 
小结
- Layer Normalization 是对每个样本的所有特征进行归一化。
- 计算步骤包括: 
  - 计算每个样本的均值和方差。
- 归一化。
- 缩放和平移。
 
- 与 Batch Normalization 不同,Layer Normalization 不依赖于 mini-batch,适合处理变长数据(如 NLP 中的序列数据)。
通过这个包含多个样本的例子,可以清楚地看到 Layer Normalization 的计算过程及其作用。
三、Layer Normalization 和 Batch Normalization 的区别

 代码示例
以下是 PyTorch 中 Layer Normalization 的实现示例:
import torch
import torch.nn as nn
# 定义一个 LayerNorm 层
layer_norm = nn.LayerNorm(normalized_shape=64)  # normalized_shape 是特征维度
# 输入数据 (batch_size, sequence_length, feature_dim)
input_data = torch.randn(32, 10, 64)  # 假设 batch_size=32, sequence_length=10, feature_dim=64
# 前向传播
output = layer_norm(input_data)
总结
- Layer Normalization 是对单个样本的所有特征进行归一化,适用于变长数据(如 NLP 中的序列数据)。
- Batch Normalization 是对 mini-batch 中每个特征进行归一化,适合固定长度的数据(如图像)。
- 两者的主要区别在于归一化的维度和对 mini-batch 的依赖程度。选择哪种归一化方法取决于具体任务和数据特性。
四、《Transformers without Normalization》笔记
paper:https://arxiv.org/pdf/2503.10622
文章的核心思想是tanh代替了归一化层,这是因为作者做实验发现LN的输入输出曲线,很像tanh函数的“S”型曲线:
 
 tanh(x) 函数可视化:
 
∼ O n e p e r s o n g o f a s t e r , a g r o u p o f p e o p l e c a n g o f u r t h e r ∼ \sim_{One\ person\ go\ faster,\ a\ group\ of\ people\ can\ go\ further}\sim ∼One person go faster, a group of people can go further∼


















