因为是自己看的总结,所以内容一部分是直接从各个地方复制的,一部分是自己写的,没有规范地引用,基本覆盖了NLP的大部分面试知识点吧。
传统机器学习我们经常会预处理数据,对训练数据进行标准化(Normalization,同均值和方差)甚至白化(Whitening,借助PCA分解去掉特征相关性),以此简化机器学习的问题。(可以设想一下在一个方差较大数据样本上梯度下降的图像)
但是在神经网络上因为层次的堆叠,比较深的层接受到的输入的方差和均值会偏差特别大(Internal Covariate Shift问题),影响模型的学习能力,所以做normalization可以缓解这个问题。
加入 Normalization 之后,不论底层的数据如何变化,对于某一层神经元 而言,其输入 x 永远保持标准的分布,这就使得高层的训练更加简单
1.1.1 Batch Normalization 按照样本,纵向地进行归一化,需要保存计算得到的均值和方差,用于inference,适用于batch-size较大,样本间分布较为集中的场景,不大适用于RNN等序列数据(为什么?因为自然语言比较灵活,同一个位置的词在不同样本里出现的分布差异会很大,这和BN要求的分布集中有冲突,所以效果比较差)
1.1.2 Layer Normalization 按照输入特征维度,在样本内部横向地进行归一化,不用保存均值和方差。
但这里暗含的要求是特征需要是相似的空间,比如词向量的各个特征,都是词向量空间的一部分。如果一些特征是词向量,一些特征是额外输入的变量(比如用户维度特征,性别年龄啥的),使用LN效果就不会太好了。
1.1.3 Instance Normalization 主要用在图像领域,不做关于channel的归一化,可以用于风格化迁移,因为认为一种channel代表的一种风格,其均值方差代表了整体的风格属性。
Group Normalization,介于LN和IN之间。