nn.LayerNorm()的计算原理详解,如果有用的话,请记得点赞+关注哦。
学习前言
一起来学习nn.LayerNorm()的原理
nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, device=None, dtype=None)
normalized_shape:归一化的维度,int(最后一维)list(list里面的维度)
eps:加在方差上的数字,避免分母为0
elementwise_affine:bool,True的话会有一个默认的affine参数
layernorm对单个batch进行归一化,在每个样本的每个特征维度上进行归一化,使得每个特征的均值为0,方差为1,从而有助于提高模型的训练效果和泛化能力。
与 Batch Normalization (批归一化)既有相似之处又有不同:从公式上看,都是减去均值除以标准差,也存在两个可训练的参数 gamma 和 beta
但是,BN 是对一个 batch 数据的每个 channel 进行 Norm 处理,LN是对单个数据的指定维度进行Norm处理,与batch无关。而且在BN训练时需要累计moving_mean和moving_var两个变量,LN不需要累计
所以说,,LayerNorm
是在每个样本的特征维度上进行归一化,而不是在批次维度上。这意味着在LayerNorm
中,每个样本都有自己的均值和方差
优点:
- 不依赖于批次大小,因此在训练和推理阶段都可以使用
- 在处理小批次数据时,相比于BN批归一化,
LayerNorm
更稳定 - 由于每个样本都有自己的均值和方差,可以更好地适应不同样本之间的差异