老饼讲解-深度学习 机器学习 神经网络 深度学习
CNN入门教程

【原理】批归一化BN

作者 : 老饼 发表日期 : 2024-01-26 18:08:41 更新日期 : 2024-03-07 14:36:55


本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com



BN批归一化层是一种常用的深度学习技术,它通过解决内部协变量偏移问题来加速网络训练的速度

本文简单介绍BN批归一化层的原理并详细讲述BN批归一化层的计算公式




    01. BN批归一化层简介   




本节介绍批归一化层是什么,用来干什么,BN的计算公式等




       批归一化层简介      


 BN批归一化层在Inception-V2的原文中提出:
 《
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
BN批归一化层解决什么问题

由于前层的权重发生变化会导致后一层的输入发生变化,
而当深度学习网络很多层的时候,前几层的变化会经过层层传播、扩大,
 内部协变量偏移
在训练时调整前层的权重时,很容易令后层网络的输入发生极大的变化,
上述现象称为内部协变量偏移,它导致后层的神经元出现饱和等各种问题,并给训练造成困难,
因此提出BN批归一化来hold住输入的分布,消除内部协变量偏移,加速多层神经网络的训练
BN批归一化层一般嵌入到其他层的神经元值之后、激活函数之前的位置
 BN层的使用场景
BN层主要的目的是解决一般神经网络层之中的协变量偏移问题,
通过加入BN层,可以一定程度抑制神经元值的内部协变量偏移,加速网络的训练




      BN批归一化层的结构与计算公式     


BN批归一化层的结构与计算公式
批归一化层由归一化与仿射两部分组成,如下:
 BN批归一化层结构
 由于批归一化一般是嵌入在神经元值N和激活函数之间,因此我们用N来表示这里的输入
BN批归一化层的计算公式     
  批归一化BN层的具体计算公式如下:
 
  BN层计算公式详细解说如下:
 1. 归一化中的                                                                                
  是输入N的期望值,是N的方差                                      
 两者都通过整体样本进行估算 ,估算公式如下:                            
                       
   ,n是样本数                                                    
                       
                                                     
 
 2. 归一化中的 ε                                                                                                     
 
是一个较小的数,在分母中加入是为了防止分母过小                    
  3. 仿射部分的                                                                                               
 是待优化的参数,跟着模型一起训练                                
 
 BN层的运算是针对每一个神经元而言的,即每个神经元各自进行归一化,不同的神经元对应的参数是不一样的







    02. BN层应用于模型    




本节介绍BN层应用于模型时的完整结构以及期望、方差的估算方法




     BN层应用于模型时的完整结构    


BN层一般嵌入到神经网络层的神经元值之后、激活函数之前的位置,
  BN批归一化的完整示图与计算公式如下:
 批归一化的计算公式 
从图中可以看到,批归一化层先将神经元值WX+B的值进行归一化,再进行仿射(缩放与平衡)还原
      BN层中的期望与方差的估算方法    
 
在BN层的归一化计算部分,涉及到神经元值N的期望与方差的估算:
 
BN批归一期望与方差的计算 
  
在训练阶段与使用阶段分别采取不同的方法估算
具体如下:
 
1. 训练阶段                                                                                  
在训练阶段,归一化使用当前批训练数据的期望与方差    
 
2. 模型应用阶段                                                                        
在模型应用时,可以使用所有训练数据的期望与方差      
也可采用抽取最后K次批训练数据的期望与方差进行估算   
 
                                  
 
                        
         
分别是第i次批训练时的期望和方差               




    关于BN应用于卷积层   


BN应用于卷积层,基本与应用于全连接层时是类似的,
唯一不同的是, 考虑到卷积层单个通道(featureMap)内的各个神经元与周边神经元是相关联的
 BN应用于卷积层
在归一化时需要保持这个特征,因此,归一化整个过程对单通道的神经元应使用统一的参数
即:1.同一通道的神经元使用相同的               
 例如一个通道的featureMap为h×w, 共有n个样本
    则用这n×h×w个神经元值来估算 
    
2.同一通道的神经元使用相同的                      
总的来说,BN应用于卷积层时,所有归一化参数是相对通道而言的,而非独立神经元






    03. 批归一化BN-总结    




本节总结批归一化BN到底是怎么一回事




    批归一化BN-总结    


总的来说,一般在激活函数之前加入BN层,目的是通过归一化来加速网络的训练
加入BN层之后,相当于先作如下计算,再传给激活函数
  
其中,是待训练的参数,则是一个固定的、极小的常数
期望和方差可以理解为“非训练的、但在训练阶段不断调整的常数”
✍️关于期望与方差 
在训练期间,用"当前批"的数据评估期望和方差,并以其作为模型当前的
同时,用当前批数据的来更新模型永久的、固定的
 
当模型训练完后,用于评估时,则使用这个在训练期间得到的永久的、固定的模型固定的
 在pytorch中,model.train()状态时,则代表按输入数据来评估
  model.eval()时,则使用模型固定的






好了,BN层的相关计算公式与算法就介绍到这里了~






 End 





联系老饼