关于人工智能:深度学习中的归一化技术全面总结

5次阅读

共计 3688 个字符,预计需要花费 10 分钟才能阅读完成。

训练深度神经网络是一项具备挑战性的工作。多年来,钻研人员提出了不同的办法来减速和稳固学习过程。归一化是一种被证实在这方面十分无效的技术。

在这篇文章中,我将应用类比和可视化的形式来回顾这些办法中,这将帮忙您理解它们的产生的起因和思维过程。

为什么要归一化?

例如,咱们当初用两个特色构建一个简略的神经网络模型。这两个特色一个是年龄:范畴在 0 到 65 之间,另一个是工资:范畴从 0 到 10 000。咱们将这些特色提供给模型并计算梯度。

不同规模的输出导致不同的权重更新和优化器的步骤向最小值的方向不平衡。这也使损失函数的形态不成比例。在这种状况下,就须要应用较低的学习速率来防止过冲,这就意味着较慢的学习过程。

所以咱们的解决方案是输出进行归一化,通过减去平均值 (定心) 并除以标准偏差来放大特色。

此过程也称为“漂白”,解决后所有的值具备 0 均值和单位方差,这样能够提供更快的收敛和更稳固的训练。

这是一个很好的解决方案,那么为什么咱们不规范化网络中每一层的激活呢?

上面咱们先看一下针对于激活的归一化办法

Batch Normalization

2015 年,Sergey Ioffe 和 Christian Szegedy[3] 采纳了这个想法来解决外部协变量偏移问题。以前输出层散布因为权值的更新而一直变动。所以上面的层总是须要适应新的散布,它会导致收敛速度变慢和训练不稳固。

批量标准化提供了一种管制和优化每一层之后的散布的办法。该过程与输出归一化雷同,但咱们增加了两个可学习的参数,γ 和 β。

通过代码来阐明要比干燥的公式好的多,所以 BN 的代码如下:

def BatchNorm(x, gamma, beta, eps=1e-5):
    # x: input shape [N, C, H, W]

    N, C, H, W = x.shape
    mean = torch.mean(input=x, dim=[0,2,3], keepdim=True)
    var = torch.var(input=x, dim=[0,2,3], keepdim=True)
    # mean, var shape : [1, C, 1, 1]

    x = (x - mean) / torch.sqrt(var + eps)
    
    return x * gamma + beta

这两个参数是通过反向流传沿着网络学习的。他们通过缩放 (γ) 和挪动 (β) 激活优化散布。

因为有固定的散布,所以能够进步学习率并放慢收敛速度。除了计算晋升之外,BN 还能够作为一种正则化技术。数据集统计数据的近似产生的噪声打消了对 Dropout 的须要。

但这是一把双刃剑。这种预计仅实用于较大的批次。当批次数量较少时,性能会急剧下降。

BN 的另一个毛病是对于批处理的依赖。如果咱们传递了单个样本而不是批量的样本,网络必须应用事后计算的训练均值和方差,这可能会导致不同的后果。

这个问题的重要性促使人们创立代替办法以防止对批处理的依赖。

Layer Normalization

这是 Geoffrey E. Hinton 等人在 2016 年 [4] 中首次尝试缩小对批大小的束缚。提出这个办法的次要起因是无奈找到将 BN 利用于递归神经网络,须要找到一个代替的办法。

在深度神经网络中,因为层数是固定的,因而很容易存储每个 BN 层的统计信息。然而在 RNN 中,输出和输入形态的长度不同。因而,在这种状况下,最好应用单个工夫步长(样本)而不是整个批次的统计信息进行标准化。

def LayerNorm(x, gamma, beta, eps=1e-5):
    # x: input shape [N, C, H, W]
    
    N, C, H, W = x.shape
    mean = torch.mean(input=x, dim=[1,2,3], keepdim=True)
    var = torch.var(input=x, dim=[1,2,3], keepdim=True)
    # mean, var shape: [N, 1, 1, 1]

    x = (x - mean) / torch.sqrt(var + eps)
    
    return x * gamma + beta

在这种办法中,batch(N) 中的每个示例都在 [C, H, W] 维度上进行了归一化。与 BN 一样,它能够减速和稳固训练,并且不受批次的限度。此办法可用于批量为 1 的在线学习工作。

Instance Normalization

Dmitry Ulyanov 等人在 2016 年的论文 [5] 中介绍了 Instance Normalization。这是另一种尝试缩小对批处理的依赖以改善款式传输网络的后果。

def InstanceNorm(x, gamma, beta, eps=1e-5):
    # x: input shape [N, C, H, W]

    N, C, H, W = x.shape
    mean = torch.mean(input=x, dim=[2,3], keepdim=True)
    var = torch.var(input=x, dim=[2,3], keepdim=True)
    # mean, var  shape: [N, C, 1, 1]

    x = (x - mean) / torch.sqrt(var + eps)
    
    return x * gamma + beta

跨批次和通道的标准化容许从图像中删除特定的对比度信息,这有助于泛化。

这种办法在 Pix2Pix 或 CycleGAN 等生成模型中广受欢迎,并成为驰名的 StyleGAN2 中应用的自适应实例归一化的先驱。

Group Normalization

Group Normalization 在 2018[1] 论文中被引入,它间接解决了 CNN 的 BN 限度。次要针对的是分布式学习,其中批次被分成许多机器。这些是在多数例子上训练的,比方 6-8,在某些状况下,甚至是 1-2。

GN 能够了解为 Layer 和 Instance 的混合。GN 将通道分成组并在它们之间进行标准化。该计划使计算独立于批量大小。

def GroupNorm(x, gamma, beta, G, eps=1e-5):
    # x: input features with shape [N, C, H, W]
    # G : number of groups

    N, C, H, W = x.shape
    x = torch.reshape(input=x, shape=[N, G, C // G, H, W])
    mean = torch.mean(input=x, dim=[2,3,4], keepdim=True)
    var = torch.var(input=x, dim=[2,3,4], keepdim=True)
    # mean, var shape : [N, G, 1, 1, 1]

    x = (x - mean) / torch.sqrt(var + eps)

    x = torch.reshape(input=x, shape=[N, C, H, W])

    return x * gamma + beta

GN 优于在小批量上训练的 BN,但无奈击败大批量的后果,然而这是一个很好的终点。

下面的针对于激活的归一化办法咱们基本上都据说过也常常会用到,上面咱们来介绍针对权重的归一化办法。

Weight Standardization

咱们曾经对输出和层输入进行了标准化,惟一剩下的就是权重。因为它们能够在没有任何管制的状况下变大,尤其是当咱们无论如何都要标准化输入时。通过标准化权重,咱们实现了更平滑的损失和更稳固的训练。

def WeightStand(w, eps=1e-5):
    # w: input features shape [Cin, Cout, kernel_size, kernel_size]

    mean = torch.mean(input=w, dim=[0,2,3], keepdim=True)
    var = torch.var(input=w, dim=[0,2,3], keepdim=True)
    # mean, var shape : [1, Cout, 1, 1]
    
    w = (w - mean) / torch.sqrt(var + eps)
    
    return w

权重的标准化是 Group Normalization 的一个很好的辅助。在仅应用一个样本的 BN(大批量)状况下,将这些办法联合起来会产生更好的后果。

除此以外,有人还提出了 BCN 办法,称为批处理通道规范化。简而言之,每一层同时应用 BN 和 GN。

总结

归一化是深度学习中的一个基本概念。它放慢了计算速度并稳固了训练。多年来倒退了许多不同的技术。本篇文章整顿了目前与它相干的办法,心愿对你有所帮忙

援用

[1] Group Normalization

[2] Micro-Batch Training with Batch-Channel Normalization and Weight Standardization

[3] Batch Normalization: Accelerating Deep Network Training b y Reducing Internal Covariate Shift

[4] Layer Normalization

[5] Instance Normalization: The Missing Ingredient for Fast Stylization

[6] Deep Residual Learning for Image Recognition

https://www.overfit.cn/post/2d2ef85336784abb895a2d6937ac7bad

作者:Maciej Balawejder

正文完
 0