深度学习基础笔记——归一化

相关申明及相关参考:

体系学习地址 主要学习笔记地址

归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered) - 简书 (jianshu.com)

由于是文章阅读整合,依据个人情况标注排版,

不确定算不算转载,主要学习围绕AI浩的五万字总结,深度学习基础
如有侵权,请联系删除。

目录

1 归一化概念

2 归一化作用

A 归一化为什么能提高求解最优解速度

B 3D 图解未归一化

C 局部响应归一化作用及理解

3 归一化类型

A 线性归一化

B 标准差标准化

C 非线性归一化

4 批归一化(Batch Normalization,BN)概念

5 批归一化算法流程及优点

6 批归一化和群组归一化

7 Weight Normalization和Batch Normalization比较

【Batch Normalization使用场景】


1 归一化概念

  1. 归一化:把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。

  2. 无论是为了建模还是为了计算,首先基本度量单位要统一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测,且 sigmoid 函数的取值(0,1),网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。
  3. 归一化是统一在(0,1)之间的统计概率分布,当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。
  4. 在数据中常存在奇异样本数据,奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛。为了避免出现这种情况及后面数据处理的方便,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于 0 或与其均方差相比很小。
  5. 标准化在机器学习中,可能要处理不同种类的资料,例如,音讯和图片上的像素值,这些资料可能是高维度的,资料标准化后会使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1,这个方法被广泛的使用在许多机器学习算法中(例如:支持向量机、逻辑回归和类神经网络)。

  6. 中心化:平均值为0,对标准差无要求。

  7. 无量纲:我的理解就是通过某种方法能去掉实际过程中的单位,从而简化计算。

【归一化和标准化的区别】

归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。

标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。

相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。

【标准化和中心化的区别】

标准化是原始分数减去平均数然后除以标准差,中心化是原始分数减去平均数,所以一般流程为先中心化再标准化。

2 归一化作用

归一化的实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。

  • 为了后面数据处理的方便,归一化的确可以避免一些不必要的数值问题。
  • 为了程序运行时收敛加快。
  • 统一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。
  • 避免神经元饱和。即当神经元的激活在接近 0 或者 1 时会饱和,在这些区域,梯度几乎为 0,这样,在反向传播过程中,局部梯度就会接近 0,这会有效地“杀死”梯度。
  • 保证输出数据中数值小的不被吞食。
  • 有可能提高精度。一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

A 归一化为什么能提高求解最优解速度

深度学习基础笔记——归一化_第1张图片 数据是否均一化的最优解寻解过程( 圆圈可以理解为等高线

左图表示未经归一化操作的寻解过程,右图表示经过归一化后的寻解过程。

​当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;而右图对两个原始特征进行了归一化,其对应的等高线显得很,在梯度下降进行求解时能较快的收敛。

​ 因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

B 3D 图解未归一化

【案例】

​ 假设w_{1}的范围在[−10,10],而w_{2}的范围在[−100,100],梯度每次都前进 1 单位,那么在w_{1}方向上每次相当于前进了1/20,而在w_{2}上只相当1/200!某种意义上来说,在w_{2}上前进的步长更小一些,而w_{1}在搜索过程中会比w_{2}“走”得更快。这样会导致,在搜索过程中更偏向于w_{1}的方向,走出了“L”形状,或者成为“之”字形。

深度学习基础笔记——归一化_第2张图片

C 局部响应归一化作用及理解

LRN 是一种提高深度学习准确度的技术方法。LRN 一般是在激活、池化函数后的一种方法。

在 ALexNet 中,提出了 LRN 层,对局部神经元的活动创建竞争机制,使其中响应比较大对值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

【局部归一化】 

局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),其公式如下:

深度学习基础笔记——归一化_第3张图片

深度学习基础笔记——归一化_第4张图片 简单示意图

3 归一化类型

A 线性归一化

【适用范围】比较适用在数值比较集中的情况。

​【 缺点】如果 max 和 min 不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。

B 标准差标准化

【含义】经过处理的数据符合标准正态分布,即均值为 0,标准差为 1 其中μ为所有样本数据的均值,σ 为所有样本数据的标准差。

C 非线性归一化

【适用范围】经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数,正切等。

4 批归一化(Batch Normalization,BN)概念

以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然对输入数据进行了归一化处理,但是输入数据经过σ(WX+b)这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是肯定的。

批归一化:在神经网络中间层也进行归一化处理,使训练效果更好的方法。

5 批归一化算法流程及优点

深度学习基础笔记——归一化_第5张图片

深度学习基础笔记——归一化_第6张图片

深度学习基础笔记——归一化_第7张图片

深度学习基础笔记——归一化_第8张图片

 【BN算法优点】

  • 减少了人为选择参数。在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更小的 L2 正则项约束参数;
  • 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;
  • 可以不再使用局部响应归一化。BN 本身就是归一化网络(局部响应归一化在 AlexNet 网络中存在)
  • 破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高 1% 的精度)。
  • 减少梯度消失,加快收敛速度,提高训练精度。

6 批归一化和群组归一化

深度学习基础笔记——归一化_第9张图片

7 Weight Normalization和Batch Normalization比较

 Weight Normalization 和 Batch Normalization 都属于参数重写(Reparameterization)的方法,只是采用的方式不同:

  •  Weight Normalization 是对网络权值w进行 normalization。
  • ​ Batch Normalization 是对网络某一层输入数据进行 normalization。

​ Weight Normalization相比Batch Normalization有以下三点优势:

  1. Weight Normalization 通过重写深度学习网络的权重W的方式来加速深度学习网络参数收敛,没有引入 minbatch 的依赖,适用于 RNN(LSTM)网络(Batch Normalization 不能直接用于RNN,进行 normalization 操作,原因在于1) RNN 处理的 Sequence 是变长的2) RNN 是基于 time step 计算,如果直接使用 Batch Normalization 处理,需要保存每个 time step 下,mini btach 的均值和方差,效率低且占内存。
  2. Batch Normalization 基于一个 mini batch 的数据计算均值和方差,而不是基于整个 Training set 来做,相当于进行梯度计算式引入噪声。因此,Batch Normalization 不适用于对噪声敏感的强化学习、生成模型(Generative model:GAN,VAE)使用。相反,Weight Normalization 对通过标量g和向量v对权重W进行重写,重写向量v是固定的,因此,基于 Weight Normalization 的 Normalization 可以看做比 Batch Normalization 引入更少的噪声。
  3. 不需要额外的存储空间来保存 mini batch 的均值和方差,同时实现 Weight Normalization 时,对深度学习网络进行正向信号传播和反向梯度计算带来的额外计算开销也很小。因此,要比采用 Batch Normalization 进行 normalization 操作时,速度快。 但是 Weight Normalization 不具备 Batch Normalization 把网络每一层的输出 Y 固定在一个变化范围的作用。因此,采用 Weight Normalization 进行 Normalization 时需要特别注意参数初始值的选择

【Batch Normalization使用场景】

在CNN中,BN应作用在非线性映射前。在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。

​ BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。

你可能感兴趣的:(【深度学习笔记】,深度学习)