Tutorial教程:深度神经网络中使用的不同标准化/归一化技术-局部响应归一化vs批归一化

深度神经网络中使用的不同标准化/归一化技术

[email protected]


声明:本文为CSDN首发,谢绝转载,商业转载请联系笔者MrCharles本人获取同意

先来辨析一下名词解释。
数据的归一化normalization)是将数据按比例缩放,使之落入一个小的特定区间。在一些数据比较和评价中常用到。典型的有归一化法,还有比如极值法、标准差法。
归一化方法的主要有两种形式:一种是把数变为(0,1)之间的小数,一种是把有量纲表达式变为无量纲表达式。在数字信号处理中是简化计算的有效方式。
标准化(Standardization): 数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。(z-score零-均值标准化,小数定标标准化,对数Logistic模式). 标准化是为了方便数据的下一步处理,而进行的数据缩放等变换,并不是为了方便与其他数据一同处理或比较,比如数据经过零-均值标准化后,更利于使用标准正态分布的性质,进行处理;特别强调的一点是,数据的归一化可以看作是一种特殊形式的标准化,因为标准化事件数据压缩到某一个范围,如果这个范围是0~1的话,那么就是数据的归一化,也就是我们所说的normalization,。
正则化:向你的模型加入某些规则,加入先验,缩小解空间,减小求出错误解的可能性。你要把你的知识数学化告诉这个模型,对代价函数来说,就是加入对模型“长相”的惩罚.就是在损失函数后加上一个正则化项(惩罚项),其实就是常说的结构风险最小化策略,即经验风险(损失函数)加上正则化。一般模型越复杂,正则化值越大。正则化是利用先验知识,在处理过程中引入正则化因子(regulator),增加引导约束的作用,比如在逻辑回归中使用正则化,可有效降低过拟合的现象。

本文主要讨论归一化normalization,其他将会在以后的博文中讲述到。

闲言碎语之特征标准化,一个通俗的例子,

在说特征标准化之前, 我们先来说说现实生活中, 我们的数据是什么样的. 它们很可能来自不同的地方, 被不同的人采集, 有着不同的规格. 用最经典的房价预测例子来和大说. 我们用机器学习从房屋的各个层面来预测房价, 房屋的特征可能包括, 离市中心的距离, 房屋楼层, 房屋面积, 所在城市, 几室几厅等等. 这些数据的取值范围往往差距悬殊, 比如楼层一般在2-30层以内, 面积可能上百, 离市中心距离可以以千来记.

回到机器学习中, 如果我们以一个简单的线性回归方程来预测房屋的价格, 那方程可能会是这样 .
= a + b + c 价格= a* 离市中心 + b * 楼层 + c * 面积
其中的 a b c 就是机器学习需要努力努力再努力 来优化的参数.

我们说的在具体一点, 用 abc 算出来的价格是预测价格 . 机器学习需要计算预测值和实际值的差别, 然后对这个误差进行一些数学上的处理, 使之变成进步的阶梯, 然后反向地传递回参数 a b c 来提升下次的预测准确度. 好了. 这些概念和我们要提到的标准化有什么关系呢?

举个例子,我们可以把 abc 想想成3个人. 他们共同努力解决一个问题, 在某一个问题中, a工作的时候总是不知道发生了什么, b 的能力适中, c 工作能力最强, 老板看了他们一起工作的结果, 发现还有很多可以提高的地方, 然后不屑地说: 你们这个结果和我期望的还有很大差距, 你们快去缩小差距. 老板给的要求只是缩小差距. 可是 abc 都不知道差距在哪. 所以他们这次只好平分接下来的任务, 不过 c 很快就做完了, b 第二, a 做得很慢, 所以花的总时间很长, c 和 b 都要等 a 把剩下的工作做完才能再给老板看结果, 这样 效率并不高.

把这个问题放在机器学习中, 为了好理解, 我们把 b 先排除掉. 再把房价问题也简化一下, 留下两个特征. 因为面积的跨度一般可以从0 到 2-300, 而离市中心的距离跨度一般在10以内. 所以在这个公式中, c 只要稍稍变化一点, 他乘以面积的变化就会很大, 因为面积的值可以很大, 但是当a也变化那一点点时, 他对预测价格的影响力不会像 c 那样巨大. 这样的差别就会影响最终的工作效率. 所以, 我们要提高效率, 特征的标准化就可以帮上忙. 我们在机器学习训练之前, 先对数据预先处理一下, 取值跨度大的特征数据, 我们浓缩一下, 跨度小的括展一下, 使得他们的跨度尽量统一.

通常用于 特征标准化的途径主要有两种(如下图), 一种叫做 min max normalization, 他会将所有特征数据按比例缩放到0-1的这个取值区间. 有时也可以是-1到1的区间. 还有一种叫做 standard deviation normalization, 他会将所有特征数据缩放成 平均值为0, 方差为1. 使用这些标准化手段. 我们不仅可以快速推进机器学习的学习速度, 还可以避免机器学习 学得特扭曲.

在这里插入图片描述

特征标准化的两种途径

总结起来,使用normalization的好处:

  • 有可能提高模型的精度:一些分类器需要计算样本之间的距离,如果一个特征的值域范围非常大,那么距离计算就会主要取决于这个特征,有时就会偏离实际情况。
  • 加快梯度下降的求解速度,即提升模型的收敛速度

min max normalization(线性归一化)

x = x min ( x ) max ( x ) min ( x ) x^{\prime}=\frac{x-\min (x)}{\max (x)-\min (x)}
这种归一化适合数值比较集中的情况,缺陷就是如果max和min不稳定,很容易使得归一化结果不稳定,使得后续的效果不稳定,实际使用中可以用经验常量来代替max和min。

standard deviation normalization ( z-score/零-均值normalization )

标准化数据通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
x = ( x μ ) / σ x=(x-\mu) / \sigma
适用于:如果数据的分布本身就服从正态分布,就可以用这个方法。

非线性归一化

经常用在数据分化较大的场景,有些数值大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数、反正切等。需要根据数据分布的情况,决定非线性函数的曲线。

深度神经网络中的归一化

那么前面我们讲到的是数据的归一化,我们现在看一下神经网络中的归一化。

归一化已成为深度神经网络的重要组成部分,此处用来补偿某些激活函数(如ReLU,ELU等)的无界性质。有了这些激活函数,输出层就不会被限制在有界范围内(例如tanh 的 [-1,1]),相反,它们可以增长到训练允许的任意大小。为了限制无限激活增加输出层值,请在激活函数之前使用归一化。在深度神经网络中使用了两种常见的归一化技术,并且经常被初学者误解。在本教程中,将讨论两种归一化技术的详细说明,以突出它们的关键区别。

在这里插入图片描述

ReLU:输出不会被限制在有限范围内,他们可以增长到训练允许的任意大小

局部响应归一化Local Response Normalization (LRN嗯)

局部响应归一化(LRN)最初是在AlexNet架构中引入的,其中使用的激活功能是ReLU,而不是当时更常见的tanh和Sigmoid。除了上述原因外,使用LRN的原因还在于鼓励侧向抑制。这是神经生物学中的一个概念,指的是神经元减少其邻居活动的能力[1]。在DNN中,这种横向抑制的目的是进行局部对比度增强,以便将局部最大像素值用作下一层的激励。
LRN是不可训练层,用于对局部邻域内的特征图中的像素值进行平方归一化。根据定义的邻域,有两种类型的LRN,可以在下图中看到。
在这里插入图片描述
通道间LRN:这最初是AlexNet论文所使用的。定义在跨通道上。对于每个(x,y)位置,归一化均在深度维度中进行,并由以下公式给出
b x , y i = a x , y i / ( k + α j = max ( 0 , i n / 2 ) min ( N 1 , i + n / 2 ) ( a x , y j ) 2 ) β b_{x, y}^{i}=a_{x, y}^{i} /\left(k+\alpha \sum_{j=\max (0, i-n / 2)}^{\min (N-1, i+n / 2)}\left(a_{x, y}^{j}\right)^{2}\right)^{\beta}
其中,i表示滤波器i的输出,a(x,y),b(x,y)分别是归一化前后的(x,y)位置的像素值,N是通道总数。常数(k,α,β,n)是超参数。k用于避免任何奇异性(除零的异常),α用作标准化常数,而β是对比度常数。常数n用于定义邻域长度,即在进行归一化时需要考虑多少个连续像素值。(k,α,β,n)=(0,1,1,N)的情况就是标准归一化)。在上图中,N = 4,n取2。

让我们看一下通道间LRN的示例。如下图
在这里插入图片描述

通道间LRN

不同的颜色表示不同的通道,因此N = 4。让超参数为(k,α,β,n)=(0,1,1,2)。n = 2的值意味着在计算位置(i,x,y)的归一化值时,我们考虑上一个和下一个滤波器在同一位置的值,即(i-1,x,y)和(i +1,x,y)。对于(i,x,y)= [0,0,0),我们有 v a l u e i x y = 1 v a l u e i 1 x y value(i,x,y)= 1,value(i-1,x,y) 不存在,而 v a l u e i + 1 x y = 1 value(i +1,x, y)= 1 。因此, n o r m a l i z e d v a l u e i x y = 1 / 1 ² + 1 ² = 0.5 normalized_value(i,x,y)= 1 /(1²+1²)= 0.5 ,可以在上图的下部看到。其余标准化值的计算方法类似。

通道内LRN:在通道内LRN中,在上图中可以看到,邻居在同一通道内。公式:
b x , y k = a x , y k / ( k + α i = max ( 0 , x n / 2 ) min ( W , x + n / 2 ) j = max ( 0 , y n / 2 ) min ( H , y + n / 2 ) ( a i , j k ) 2 ) β b_{x, y}^{k}=a_{x, y}^{k} /\left(k+\alpha \sum_{i=\max (0, x-n / 2)}^{\min (W, x+n / 2)} \sum_{j=\max (0, y-n / 2)}^{\min (H, y+n / 2)}\left(a_{i, j}^{k}\right)^{2}\right)^{\beta}
其中(W,H)是要素图的宽度和高度(例如,上图中的(W,H)=(8,8))。通道间和通道内LRN之间的唯一区别是进行标准化的邻域。在通道内LRN中,围绕像素定义了一个2D邻域(与“通道间”中的1D邻域相反)。例如,下图显示了在n = 2(即以(x,y)为中心的大小为(n + 1)x(n + 1)的2D邻域)的5x5特征图上的通道内归一化。
在这里插入图片描述

通道内LRN

批归一化Batch Normalization:

批归一化(BN)是可训练的层,通常用于解决内部协变量移位(Internal Covariate Shift,ICF) [1]的问题。ICF的出现是由于隐藏神经元/激活的分布发生了变化。考虑下面的二进制分类示例,其中需要对有玫瑰和无玫瑰进行分类
在这里插入图片描述

有玫瑰vs无玫瑰分类。右侧绘制的特征图对于从数据集中采样的两个不同批次具有不同的分布[1]

假设我们已经训练了一个神经网络,现在我们从数据集中选择两个看起来截然不同的批次进行推理(如上所示)。如果我们对这两个批次进行正向传递并绘制隐藏层(在网络深处)的特征空间,我们将看到分布的显着变化,如上图右所示。这称为输入神经元的协变量移位Covariate shift 。

**这在训练期间有什么影响?在训练过程中,如果我们选择属于不同分配的批次,则它会减慢训练速度,原因是对于给定的批次,它尝试学习某个分配,而下一个批次则有所不同。因此,它在分布之间不断来回跳动,直到收敛为止。**此协变量移位通过确保批次中的成员不属于相同/相似的分布而得到缓解。

这可以通过随机选择批次图像来完成。隐藏神经元也存在类似的协变量偏移。即使批次是随机选择的,隐藏的神经元也可能最终具有一定的分布,这会减慢训练速度。隐藏层的这种协变量平移称为内部协变量平移。问题在于,我们无法像输入神经元那样直接控制隐藏神经元的分布,因为随着训练更新训练参数,它会不断变化。Batch Norm有助于缓解此问题。

在Batch Norm中,隐藏的神经元的输出在被馈送到激活函数之前按以下方式进行处理。

  1. 将整个批次 B 标准化为零均值和单位方差
    -计算整个 mini-batch输出的平均值:u_B
    -计算整个 mini-batch输出的方差:sigma_B
    -通过减去均值并除以方差来标准化 mini-batch
  2. 引入两个可训练的参数(Gamma: scale_variable 和Beta: shift_variable)以缩放和shift 标准化的mini-batch输出
  3. 将此缩放并shift 的归一化mini-batch输入激活函数。

BN算法可以在下图中看到。
在这里插入图片描述
对所有激活中的每个像素进行归一化处理。如下图。让我们假设我们有一个大小为3的mini-batch。一个隐藏层会产生大小为(C,H,W)=(4,4,4)的激活。由于批量大小为3,因此我们将进行3次这样的激活。现在,对于激活中的每个像素(即,每个4x4x4 = 64像素),我们将通过在所有激活中找到该像素位置的均值和方差来对其进行归一化,如下图的左侧所示。一旦找到均值和方差,我们将从每个激活中减去均值并将其除以方差。下图的右侧部分对此进行了描述。减法和除法是逐点进行的。(如果您习惯使用MATLAB,则除法是点除./)。
在这里插入图片描述
第2步(即缩放和移位)的原因是让训练决定我们是否需要归一化。在某些情况下,不进行归一化可能会产生更好的结果。因此,BN无需事先选择是否包括归一化层,而是让训练人员来决定。当Gamma = sigma_B和Beta = u_B时,不进行归一化,并且恢复原始激活。在这里可以找到Andrew Ng提供的关于BN的视频教程

比较:

LRN具有跨(通道内/间)执行归一化的特点,另一方面,BN仅具有一种执行方式(针对所有激活中的每个像素位置)。下表比较了两种归一化技术的细节:

 DNNs 两种归一化技术比较  归一化技术   可训练Trainable   训练参数Training Parameters   Fouses on  正则化 Regularization  L R N  No  0  横向抑制Lateral Inhibition   No  B N  Yes  2 (  Scale and Shift  )  Internal Covariate Shift   Yes  \begin{array}{|c|c|c|c|c|} \hline & {\text { DNNs 两种归一化技术比较}} & {} & {} \\ \hline \text { 归一化技术 } & {\text { 可训练Trainable }} & {\text { 训练参数Training Parameters }} & {\text { Fouses on }} & {\text {正则化 Regularization }} \\ \hline \mathrm{LRN} & {\text { No }} & {0} & {\text { 横向抑制Lateral Inhibition }} & {\text { No }} \\ \hline \mathrm{BN} & {\text { Yes }} & {2(\text { Scale and Shift })} & {\text { Internal Covariate Shift }} & {\text { Yes }} \\ \hline \end{array}
参考文献:
[1] https://www.learnopencv.com/batch-normalization-in-deep-networks/
[2] Ioffe, Sergey, and Christian Szegedy. “Batch normalization: Accelerating deep network training by reducing internal covariate shift.” arXiv preprint arXiv:1502.03167 (2015).

欢迎订阅我得专栏,暂时虽然都是试读,但是您的9.9订阅肯定不会让您失望的,您的订阅也会让我更具动力去写出更多类似博客。专栏地址:计算机视觉综述

Charles@Salzburg, Austria,
24th, Dec, 2019
Merry Christmas
奥地利的圣诞市场好热闹,我明天想去滑冰,前几天攀岩手废掉了。

发布了236 篇原创文章 · 获赞 157 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/MrCharles/article/details/103649653