LayerNorm的理解

2024-04-26  本文已影响0人  sretik

LayerNorm是常见的归一化技术之一,可以提升神经网络的训练速度,提高模型性能。一般用于RNN,对序列数据效果较好。
LayerNorm的数学原理:
均值:\mu_i = \frac{1}{n}\sum_{j=1}^nx_{ij}
方差:\sigma_i^2 = \frac{1}{n}\sum_{j=1}^n(x_{ij}-\mu)^2
标准化特征:\widehat{x}_{ij} = \frac{x_{ij}-\mu_i}{\sqrt{\sigma_i^2 + \epsilon}}
对特征进行平移变换:y_{ij} = \gamma_j\widehat{x}_{ij} + \beta_j

代码实现如下:

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维度。

上一篇 下一篇

猜你喜欢

热点阅读