BatchNorm和LayerNorm——通俗易懂的理解
可能很多人都知道BatchNorm一般用于CV领域,而LayerNorm一般用于NLP领域,但并不理解其中的原因。
这篇文章会以一种通俗易懂的方式对BatchNorm和LayerNorm进行解释。
举个栗子
假设把中国的收入水平进行标准化(变成标准正态分布),这时中国高收入人群的收入值接近3,中收入人群的收入值接近0,低收入人群接近-3。不难发现,标准化后的相对大小是不变的,即中国富人的收入水平在标准化前和标准化后都比中国穷人高。
把中国的收入水平看成一个分布的话,我们可以说一个分布在标准化后,分布内的样本还是可比较的
假设把中国和印度的收入水平分别进行标准化,这时中国和印度的中收入人群的收入值都为0,但是这两个0可比较吗?印度和中国的中等收入人群的收入相同吗?不难发现,中国和印度的收入水平在归一化后,两国间收入值已经失去了可比性。
把中国和印度的收入水平各自看成一个分布的话,我们可以说,不同分布分别进行标准化后,分布间的数值不可比较
BatchNorm的理解
- 先摆上一在别的博客找的图
- 以及我自己画的图
上图画的是一个batch_size为N的图像特征张量。
- BatchNorm把一个batch中同一通道的所有特征(如上图红色区域)视为一个分布(有几个通道就有几个分布),并将其标准化。这意味着:
- 不同图片的的同一通道的相对关系是保留的,即不同图片的同一通达的特征是可以比较的
- 同一图片的不同通道的特征则是失去了可比性
有一些可解释性方面的观点认为,feature的每个通道都对应一种特征(如低维特征的颜色,纹理,亮度等,高维特征的人眼,鸟嘴特征等)。BatchNorm后不同图片的同一通道的特征是可比较的,或者说A图片的纹理特征和B图片的纹理特征是可比较的;而同一图片的不同特征则是失去了可比性,或者说A图片的纹理特征和亮度特征不可比较。
这其实是很好理解的,视觉的特征是比较客观的,一张图片是否有人跟一张图片是否有狗这两种特征是独立,即同一图片的不同特征是不需要可比性;而人这种特征模式的定义其实是网络通过比较很多有人的图片,没人的图片得出的,因此不同图片的同一特征需要具有可比性。
LayerNorm的理解
-
先摆上一在别的博客找的图
-
以及我自己画的图
上图画的是一个N个句子的语义特征张量。
- 如上图LayerNorm把一个样本的所有词义向量(如上图红色部分)视为一个分布(有几个句子就有几个分布),并将其标准化。这意味着:
- 同一句子中词义向量(上图中的V1, V2, …, VL)的相对大小是保留的,或者也可以说LayerNorm不改变词义向量的方向,只改变它的模。
- 不同句子的词义向量则是失去了可比性。
考虑两个句子,“教练,我想打篮球!” 和 “老板,我要一打包子。”。通过比较两个句子中 “打” 的词义我们可以发现,词义并非客观存在的,而是由上下文的语义决定的。
因此进行标准化时不应该破坏同一句子中不同词义向量的可比性,而LayerNorm是满足这一点的,BatchNorm则是不满足这一点的。且不同句子的词义特征也不应具有可比性,LayerNorm也是能够把不同句子间的可比性消除。
最后补充一下,nlp中也有一个词向量作为一个分布的,这样一个词的embedding就不会随着上下文的变化而变化。pytorch官网的layernorm例程就是这样搞的,所以nlp中一个词作为一个分布的做法还要多一点。
总结
BatchNorm适用于CV,而LayerNorm适用于NLP,这是由两个任务的本质差异决定的,视觉的特征是客观存在的特征,而语义特征更多是由上下文语义决定的一种统计特征,因此他们的标准化方法也会有所不同。
至于为什么训练神经网络需要将特征向量进行标准化这个问题,网上很容易找到很多解释,这里不在过多赘述。
本文是我学习过程中的个人理解,有不对的地方希望大家帮忙指出。希望可以抛砖引玉,欢迎大家在评论区和我交流。