在搭建神经网络,需要用到归一化层的时候,是否会纠结到底使用哪种归一化方式呢?下面就来看看batch normalization 与 layer normalization的区别,以便于选择正确的归一化方式。
假设有两个样本,分别是
样本index | x1 | x2 | label |
---|---|---|---|
1 | 0 | 10 | True |
2 | 2 | 0 | False |
这两个样本是由一个模型生成的。
batch normalization
如果做了batch normalization(只mean归一化),那么样本值分别为
样本index | x1 | x2 | label |
---|---|---|---|
1 | -1 | 5 | True |
2 | 1 | -5 | False |
batch norm抹去了x1和x2间原有的大小关系,所以导致利用特征维度间关系的模型失效;batch norm保留了不同样本间的大小关系,所以利用样本间不同的值的模型还能有效。
layer normalization
如果做了layer normalization(只mean归一化),那么样本值分别为
样本index | x1 | x2 | label |
---|---|---|---|
1 | -5 | 5 | True |
2 | 1 | -1 | False |
layer norm保留了x1和x2间原有的大小关系,所以导致利用特征维度间关系的模型可以有效;layer norm抹去了样本间的大小关系,所以利用样本间不同的值的模型无效。
结论
如果数据特征依赖于不同样本间的统计大小进行比较,那么batch norm是有效的(譬如CV任务);如果数据特征依赖于样本内部不同特征维度的比较,那么layer norm更有效(譬如NLP,不同batch样本的信息关联性不大)。
注意事项:不可batch norm和layer norm串行使用,会导致两个模型都无法拟合的情况