深度学习中 BN、 LN 归一化的作用以及意义

之前一直对各种归一化只停留下会使用的阶段,后来研究了一下,写下此文章当做读后感,如有任何理解错误,还请评论区指正。

提出背景:

        总所周知,深度神经网络是很多层堆积而成,比如说一个网络有50层,第一层的参数更新,经过层层相乘,会使得第50层的输入变化非常剧烈,就要不断去适应,降低的收敛速度。

        其次底层输入过大或者过小,会使得输出落入饱和区(sigmoid),导致梯度消失,使得学习过早停止。所以将输入数据映射到非饱和区提高模型表达能力是一个非常重要的任务

       每层的更新都会影响其它层,因此每层的参数更新策略需要尽可能谨慎

计算框架:

        深度学习中 BN、 LN 归一化的作用以及意义_第1张图片

 但是这会带了一个问题,每次输入前都将输入调整到这个确定范围,那底层岂不是白玩了?

为了解决这个问题,又在上面框架上加了缩放参数和平移参数(这个两个参数才是可学习的),

这样就达到了尊重每一个神经元的劳动成果。

BN(批规范化)

比说说有10张图像(batch_size=10),每张图像10个通道(C1.....C10),计算方式:均值 =十张图像C1通道的像素和 / 10 *H*W  ,因为10张图像的C1通道上的值,都是和相同的卷积核,卷积出来的,也就是希望第一张图片的第一个通道和第二张图片的第一个通道均值,方差相同

缺点:容易受到batch内其他数据分布影响,如果batch_size小的话,计算的均值和方差不具有代表性。不适用于序列模型中。

API

 class torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True)

LN(层归一化)

还是假如说有10张图像,它是将所有通道的像素和 / 10*H*W

缺点:LN 是将一整层神经元训练得到同一个转换,如果不同输入特征不属于相似类别,那么LN会降低表达能力

API

torch.nn.LayerNorm(
        normalized_shape: Union[int, List[int], torch.Size],
        eps: float = 1e-05,
        elementwise_affine: bool = True)

如图所示:

 相当于让第一个卷积核 卷积原始图像和第二个卷积核卷积出来原始图像相同部分的分布一样。

Q: 为什么BN在Transformer中效果不好?

深度学习中 BN、 LN 归一化的作用以及意义_第2张图片

 

你可能感兴趣的:(计算机视觉,深度学习,神经网络,css)