batch norm和layer norm

2022-03-12  本文已影响0人  来到了没有知识的荒原

https://zhuanlan.zhihu.com/p/86765356

batch norm


计算batch个μ和batch个σ

layer norm

我以前一直以为是对seq轴上做类似于batch norm的操作,结果是hidden轴上。

例如,input是[ batch × seq_len × hidden ],则layer norm首先在hidden维度求出batch × seq_len个标准差和均值,再使用它们进行归一化,但γ和β只有hidden个,因此LayerNorm归一化之后的缩放是再特征维度上进行。

class LayerNorm(nn.Module):
    "Construct a layernorm module (See citation for details)."
    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(-1) 表示 mean(len(x)), 这里的-1就是最后一个维度,也就是hidden_size维
        mean = x.mean(-1, keepdim=True)
        std = x.std(-1, keepdim=True)
        return self.a_2 * (x - mean) / (std + self.eps) + self.b_2

区别:

Batch Normalization,它去除了不同特征之间的大小关系,但是保留了不同样本间的大小关系,所以在CV领域用的多。
Layer Normalization,它去除了不同样本间的大小关系,但是保留了一个样本内不同特征之间的大小关系,所以在NLP领域用的多。

1)layer normalization 有助于得到一个球体空间中符合0均值1方差高斯分布的 embedding, batch normalization不具备这个功能。

  1. layer normalization可以对transformer学习过程中由于多词条embedding累加可能带来的“尺度”问题施加约束,相当于对表达每个词一词多义的空间施加了约束,有效降低模型方差。batch normalization也不具备这个功能。
上一篇 下一篇

猜你喜欢

热点阅读