LayerNorm的理解
2024-04-26 本文已影响0人
sretik
LayerNorm是常见的归一化技术之一,可以提升神经网络的训练速度,提高模型性能。一般用于RNN,对序列数据效果较好。
LayerNorm的数学原理:
均值:
方差:
标准化特征:
对特征进行平移变换:
代码实现如下:
class LayerNorm(nn.Module):
def __init__(self, features, eps=1e-6):
super(LayerNorm, self).__init__()
self.a_2 = nn.Parameter(torch.ones(features))
self.b_2 = nn.Parameter(torch.zeros(features))
self.eps = eps
def forward(self, x):
mean = x.mean(-1, keepdim=True) //均值
std = x.std(-1, keepdim=True) //标准差,即方差的平方根
return self.a_2 * (x - mean) / (std + self.eps) + self.b_2
#使用
LayerNorm(layer.size) //transformer中此值为6
LayerNorm是在feature维进行归一化处理,如代码中所指定的-1维度。