神经网络结构

博客分类: 图像处理

归一化方法

神经网络中结构中,归一化方法通常有BN(Batch Normalization),LN(Layer normalization),IN(Instance Normalization),GN(Group Normalization) ,通常来说,归一化的目的是为了能让模型更快的收敛。

Bert 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

防止梯度爆炸或者梯度消失

梯度爆炸和梯度消失在深度神经网络中是个很普遍的问题,只要网络很深,就一定会碰到该问题,以下是防止梯度爆炸和梯度消失的常用方法