Batch、Layer、Instance、Group四种Norm

归一化Normalization#

BatchNorm 的初衷是解决 Internal Covariate Shift 问题。尽可能将 mini-batch 归一化到标准正态分布,使得网络层的输出分布趋于稳定。

Internal Covariate Shift 问题简单来说,是网络学习更新权重后可能会改变输出的分布,导致下一层总是迟一步适应这次的分布。后来的实验与探究证明,BatchNorm 并不能解决 ICS 问题。

在网络层之间引入归一化层,有以下优势:

  • 缓解过拟合,起到正则化效果
  • 改善梯度传递,避免梯度弥散和梯度爆炸,模型适应更大的学习率
  • 避免像是 Sigmoid 这样的激活函数出现饱和问题

BatchNorm#

若输入维度为 [batch, channel, hw],BatchNorm 是在 [batch, hw] 维度进行归一化。换句话说,会进行 channel 次归一化。

带有 BatchNorm 层的网络训练受 batch_size 大小影响较大(例如 batch_size 过小时会严重影响网络训练效果)。接下来的 LayerNorm、InstanceNorm 和 GroupNorm 能够避免 batch 维度上的归一化,回避了这个问题。

LayerNorm#

若输入维度为 [batch, channel, hw],LayerNorm 是在 [channel, hw] 维度进行归一化。换句话说,会进行 batch 次归一化。

可见,不同于 BatchNorm,这里 LayerNorm 不受 batch 变化的影响。

InstanceNorm#

InstanceNorm 仅在 hw 维度进行归一化。换句话说,会进行 batch * channel 次归一化。

GroupNorm#

GroupNorm 会将 channel 划分为多个组。若输入维度为 [batch, channel, hw],GroupNorm 可以说是将之视为 [batch, group, channel // group, hw],然后在 [channel // group, hw] 维度进行归一化。

当 group=channel 时,GroupNorm 等价于 InstanceNorm;当 group=1 时,GroupNorm 等价于 LayerNorm。

GroupNorm 会进行 batch * group 次归一化。

总结#

BatchNorm 很强大。但如果 batch_size 的影响过分恶劣(例如 batch_size 小于 8),使用 GroupNorm 值得一试。

LayerNorm 更适合 RNN 和 NLP 领域;BatchNorm 更适合计算机视觉。

参考来源#

作者:chirp

出处:https://www.cnblogs.com/chirp/p/18111753

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   倒地  阅读(546)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示