Group Normalization 论文理解

Batch Normalization是一个里程碑式的工作,使得大量cnn可以正常训练,Kaiming He等人提出Group Normalization又做了进一步提升

paper:: Group Normalization
linkGN paper
code引入GN实现训练的Mask-RCNN

摘要

  • 文中提出一种新的CNN训练优化技术:
    • BN现存问题:随着batch size的减小,由不准确的批量统计估计造成的BN的错误率上升;
    • BN受限领域:由于计算mem的限制在detection、segmentation、video等领域模型的训练需要小batch size;
    • 提出GN:GN以channel为group计算均值和方差,独立于batch size,在batch size小的时候优于BN,batch size大的时候和BN效果相似;

简介

  • 由于BN对网络训练时候的batch size有要求所以引申出的问题是:在训练中引入BN时由于mem的限制需要在网络设计和batch size之间进行妥协;
  • GN是作为BN的简单代替方法提出的,不仅在视觉任务上适用,同时也可以在序列模型和生成模型上适用;

相关知识

  • 模型主要是学习训练数据的分布,对输入数据进行normalization可以提升模型的训练速度;但是数据在经过一层layer的计算后会出现Internal Covariate Shift,即数据的分布会改变是的后续学习变得困难;
  • 简单回顾一下BN的计算原理:
    • Internal Covariate Shfit是指发生在模型内部的数据分布变化,Covariate Shift表示训练数据和测试数据存在的分布差异;
    • batch normalization的含义是对一个batch中的数据进行normalization,假设 输入数据为 m = n × h × w m = n \times h \times w m=n×h×w(会得到channel组数据):
      • 首先求出数据的均值: μ β = 1 m ∑ i = 1 m x i \mu _ { \beta } = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } x _ { i } μβ=m1i=1mxi
      • 然后求出数据的方差: σ β 2 = 1 m ∑ i = 1 m ( x i − μ β ) 2 \sigma _ { \beta } ^ { 2 } = \frac { 1 } { m } \sum _ { i = 1 } m \left( x _ { i } - \mu _ { \beta } \right) ^ { 2 } σβ2=m1i=1m(xiμβ)2
      • 然后对数据进行归一化: x ^ i = x i − μ B σ B 2 + ϵ \widehat { x } _ { i } = \frac { x _ { i } - \mu _ { \mathcal { B } } } { \sqrt { \sigma _ { \mathcal { B } } ^ { 2 } + \epsilon } } x i=σB2+ϵ xiμB
      • 最后进行平移缩放计算: y i = γ x ^ i + β y _ { i } = \gamma \widehat { x } _ { i } + \beta yi=γx i+β
    • 如果对网络的输出做单纯归一化会破坏网络学习到的数据分布, γ \gamma γ β \beta β平移缩放参数是为了保证每一次计算出来的数据经过归一化后还可以保留学习到特征,但此时已经完成归一化操作;
  • 由于batch的减小会batch统计数据产生很大影响因此后续提出一些不在batch维度做norm的方法:
    • LN:在channel维度做norm;
    • IN:方法和BN类似不过只在一个sample中做norm;

Group Normalization

  • GN算法构建思路:
    • 常规的特征归一化计算公式:
      • x ^ i = 1 σ i ( x i − μ i ) \hat { x } _ { i } = \frac { 1 } { \sigma _ { i } } \left( x _ { i } - \mu _ { i } \right) x^i=σi1(xiμi)
      • 其中 μ i = 1 m ∑ k ∈ S i x k , σ i = 1 m ∑ k ∈ S i ( x k − μ i ) 2 + ϵ \mu _ { i } = \frac { 1 } { m } \sum _ { k \in \mathcal { S } _ { i } } x _ { k } , \quad \sigma _ { i } = \sqrt { \frac { 1 } { m } \sum _ { k \in \mathcal { S } _ { i } } \left( x _ { k } - \mu _ { i } \right) ^ { 2 } + \epsilon } μi=m1kSixk,σi=m1kSi(xkμi)2+ϵ ϵ \epsilon ϵ是一个小常量
      • ( N , C , H , W ) ( N , C , H , W ) (N,C,H,W)tensor中 i = ( i N , i C , i H , i W ) i = \left( i _ { N } , i _ { C } , i _ { H } , i _ { W } \right) i=(iN,iC,iH,iW)
    • BN计算过程: S i = { k ∣ k C = i C } \mathcal { S } _ { i } = \{ k | k _ { C } = i _ { C } \} Si={kkC=iC} ( N , H , W ) ( N , H , W ) (N,H,W)维度做norm计算;
    • LN计算过程: S i = { k ∣ k N = i N } \mathcal { S } _ { i } = \{ k | k _ { N } = i _ { N } \} Si={kkN=iN} ( C , H , W ) ( C , H , W ) (C,H,W)维度做norm计算;
    • BN计算过程: S i = { k ∣ k N = i N , k ∣ k C = i C } \mathcal { S } _ { i } = \{ k | k_{ N } = i_{ N }, \quad k | k _ { C } = i _ { C } \} Si={kkN=iN,kkC=iC} ( H , W ) ( H , W ) (H,W)维度做norm计算;
    • y i = γ x ^ i + β y _ { i } = \gamma \hat { x } _ { i } + \beta yi=γx^i+β 通过线性变换来弥补表达能力可能的损失
    • GN计算过程: S i = { k ∣ k N = i N , ⌊ k C C / G ⌋ = ⌊ i C C / G ⌋ } \mathcal { S } _ { i } = \{ k | k _ { N } = i _ { N } , \left\lfloor \frac { k _ { C } } { C / G } \right\rfloor = \left\lfloor \frac { i _ { C } } { C / G } \right\rfloor \} Si={kkN=iN,C/GkC=C/GiC} ( C / G , H , W ) ( C/G , H , W ) (C/G,H,W)维度做norm计算
  • GN在tensorflow中的实现:

实验结果show

  • 具体实验结果展示可见原文,在此不就不做额外展示啦~

总结

  • 本文提出不利用batch维度的norm方式GN用来优化模型的训练,但是由于BN影响力太多目前许多先进的系统都为其设计了超参数,但是这个对于基于GN的模型来说可能不是最优的,后续可能会重新设计系统或者探索新的超参数;
  • 文中展示了GN的LN以及IN的相关性,说明GN在序列模型和生成模型领域也适用,后续应该会对GN在这些领域的应用加强研究,同时作者提到还出探索GN在RL任务中学习表征的性能;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值