二维输入
batchnorm:每一次把每个列,也就是每个特征,把它在一个mini-batch里面,均值变为0方差变为1。训练的时候可以做小批量,在预测的时候,可以把全局的均值算出来
layernorm:每一次把每个行,也就是每个样本,把它均值变为0方差变为1。
三维输入
看图 ,跟二维差不多解释
为什么layernorm用得多一点?
1. 在持续的这些序列模型里面,每个样本的长度可能会发生变化,在算均值和方差的时候,会发现如果你的样本长度变化比较大的时候,每次做小批量,算出来的均值方差,它的抖动相对来说是比较大的。
2.在做预测的时候,是没有batch的,batchnorm我们要把全局的均值和方差记录下来,如果是batchnorm,这个全局的均值和方差如果碰到一个新的预测样本,如果特别特别长,在训练的时候没见过,那么在之前计算的均值和方差可能不那么好用的,但对layernorm没有这个问题,因为它是对每个样本自己来算,也不需要去存全局的均值和方差
![](https://i-blog.csdnimg.cn/blog_migrate/d23ebeb830ac3b35b2f0ac2816d0cf9d.png)
沐神B站之图