不同特征之间的量纲一般是不同的,为了消除不同量纲之间的影响,一般需要归一化或标准化。
说白了,都是对某个特征进行缩放
标准化
标准化是将同一特征下的数值缩放成均值为0,方差为1的数值。
![在这里插入图片描述](https://img-blog.csdnimg.cn/68c16ea7e1ea40cfadfb3bd6336eeabe.png
标准化更好的保持了样本之间的间距,比如在某一特征下有个异常点,在归一化之后很可能会将正常的数值挤到一起去,从而很难将正常数据分类。
归一化
归一化是将同一特征下数值缩放成[0,1]之间的数值。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9fc9878de3844bf88d5eafe64c66000e.png
1.如果不进行归一化,不同特征间的取值相差比较大,这会使得目标函数变扁,在进行梯度下降时,梯度方向会偏离最小值的方向,会走很多弯路,训练时间变长。
2.归一化之后,目标函数变圆,梯度下降的方向会贴合最小值的方向,加快网络的收敛。
Batch Normlization & Layer Normlization
BN:nlp中将batch内相同位置的词作为一个特征进行缩放
LN:将每个样本作为一个特征进行缩放
Transformer为什么使用LN
1.对于文本来说,将每个样本作为特征来缩放更好,因为每个样本所表达的语义是不同的,用语义信息来作为该样本的特征,把样本内的每个单词归为语义信息特征下。
nlp中每个单词语义都可以归到句子的语义信息中,因为常用的句子表示都是由单词的词向量加权而成的,词袋法
2.由于每个样本的长度不一致,如果使用BN的话,在长句子的后面位置batchsize会退化成1,导致BN几乎起不到作用。除此之外,在测试时,模型是以单个样本进行处理的,如果在训练期间模型并没见过特别长句子,预测时遇到一个很长句子的时候,导致模型不知道句子后面位置的均值和方差。