RNN为什么不适合做BN?BN与LN的区别

此问题来自:https://www.zhihu.com/question/308310065
最近再看BN、LN、IN、GN的区别,看到LN的时候,一直没太看懂,只知道:首先,BN天然与batch size有关,batch size太小bn的效果不会太好,并且BN对于图像那样的固定尺寸的输入有效,对RNN这种输入时序列形式的网络效果不好,反而Layer Normlization(LN)派上了用场,为什么,下面的答案总结的很好,简单易懂

RNN是可以用BN的,只需要让每个Batch的长度相等,可以通过对每个序列做补长,截断来实现。RNN不适合用BN的原因:Normalize的对象(position)来自不同分布。CNN中使用BN,对一个batch内的每个channel做标准化。多个训练图像的同一个channel,大概率来自相似的分布。(例如树的图,起始的3个channel是3个颜色通道,都会有相似的树形状和颜色深度)RNN中使用BN,对一个batch内的每个position做标准化。多个sequence的同一个position,很难说来自相似的分布。(例如都是影评,但可以使用各种句式,同一个位置出现的词很难服从相似分布)所以RNN中BN很难学到合适的μ和σ,将来自不同分布的特征做正确变换,甚至带来反作用,所以效果不好。

BN是不适用于RNN这种动态结构的。如果将BN应用在RNN中,由于BN是以batch为单位统计归一化变量的,所以不同长度的样本的时间片如何计算将十分困难。在BN中我们需要根据训练数据保存两个统计量 μ和σ,如果在测试时一组样本的长度大于训练的所有样本,那么它的后面的时间片需要的μ和σ该怎么办?

其实对应RNN有专门的归一化策略,例如Hinton团队的Layer Normalization(LN)等。

在上图中每个颜色表示一个训练样本,每个样本都有自己的长度。BN是按与y轴平行的方向计算统计量(即[N,T])。由于BN中每个样本的长度都不一样,计算的 和 时就会非常不具有代表性,当t>3时,我们只能获得来自第二个样本的一个统计量,那么此时的均值和方差已经没有意义。

LN是按与x轴平行的方向做归一化(即[C,T]),这个被证明是在RNN中表现比较好的一种归一化方法,因为在每个时间片都会获得相同的数量(通道数)个数值的归一化统计量。LN中不同时间片的μ和σ是共享的。

如果上面的图你觉得还不够形象的话,看这个图你一定就懂了
图来源于:https://zhuanlan.zhihu.com/p/38755603

batch是“竖”着来的,各个维度做归一化,所以与batch size有关系。
layer是“横”着来的,对一个样本不同的神经元neuron间做归一化。

显示了同一层的神经元的情况。假设这个mini-batch一共有N个样本,则Batch Normalization是对每一个维度进行归一。而Layer Normalization对于单个的样本就可以处理。
在这里插入图片描述

Batch Normalization和Layer Normalization的对比分析

Batch Normalization 的处理对象是对一批样本, Layer Normalization 的处理对象是单个样本。
Batch Normalization 是对这批样本的同一维度特征(每个神经元)做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。
在这里插入图片描述
这几天会针对BN、LN、IN、GN 分析一下它们之间的区别,写一篇博文

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值