本文主要介绍neural networks中使用的normalization的方法
Normalization的一般形式为
y
=
a
σ
(
x
−
μ
)
+
b
y=\frac{a}{\sigma}(x-\mu)+b
y=σa(x−μ)+b
x x x为normalization layer的输入, μ \mu μ为均值, σ \sigma σ为标准差, a a a和 b b b为待学习的参数,主要作用是为了使得normalization layer的输出大小依然可以处于任何范围。
那么问题来了,均值为谁的均值,方差为谁的方差呢?
答案是这是因不同的normalization策略而异的,那么下面我们来看看都有哪些normalization的策略
Batch Norm
是目前使用最多的normalization方法,分别对每一个channel做normalization,均值为所有样本在所有位置的输入的均值,方差为所有样本在所有位置的输入的方差。
Layer Norm
分别对每一个样本,对所有channel的所有位置的输入做normalization,均值和方差每个样本各不相同,均值为所有channel在所有位置的输入的均值,方差为所有channel在所有位置的输入的方差。
这种方法不总是work,建议在目前有人用该方法做过成功实验的任务上去用。
Instance Norm
分别对每一个样本,对每一个channel的所有位置的输入做normalization,均值和方差每个样本每个channel各不相同,均值为该channel在所有位置的输入的均值,方差为该channel在所有位置的输入的方差。
Group Norm
Group Norm与Layer Norm的区别在于不是针对所有channel做,而是针对在一开始就分好组的channel group做。
每组包含的channels的个数是需要去调的超参数,一般可以设置为32。
- 对于Batch/Instance Norm,在训练结束后,均值和方差就要被确定下来,在验证/测试的时候直接使用;而对于Layer/Group Norm则不用。
参考资料:NYU《Deep Learning》2020