详解深度学习中的Normalization,不只是BN(1)

简介: “ 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Batch Normalization 大法自 2015 年由Google 提出之后,就成为深度学习必备之神器。

深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Batch Normalization 大法自 2015 年由Google 提出之后,就成为深度学习必备之神器。自 BN 之后, Layer Norm / Weight Norm / Cosine Norm 等也横空出世。本文从 Normalization 的背景讲起,用一个公式概括 Normalization 的基本思想与通用框架,将各大主流方法一一对号入座进行深入的对比分析,并从参数和数据的伸缩不变性的角度探讨 Normalization 有效的深层原因。本文是该系列的第一篇。

68d05cefddbe39a443d0562b439e02ad689b8fe3

为什么需要 Normalization

1.1 独立同分布与白化

机器学习界的炼丹师们最喜欢的数据有什么特点?窃以为,莫过于“独立同分布”了,即 independent and identically distributed,简称为 i.i.d. 独立同分布并非所有机器学习模型的必然要求(比如 Naive Bayes 模型就建立在特征彼此独立的基础之上,而Logistic Regression 和 神经网络 则在非独立的特征数据上依然可以训练出很好的模型),但独立同分布的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力,已经是一个共识。

因此,在把数据喂给机器学习模型之前,“白化(whitening)”是一个重要的数据预处理步骤。白化一般包含两个目的:

(1)去除特征之间的相关性 —> 独立;

(2)使得所有特征具有相同的均值和方差 —> 同分布。

白化最典型的方法就是PCA,本文不再展开。

1.2 深度学习中的 Internal Covariate Shift

深度神经网络模型的训练为什么会很困难?其中一个重要的原因是,深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。

Google 将这一现象总结为 Internal Covariate Shift,简称 ICS. 什么是 ICS 呢?@魏秀参 在一个回答中做出了一个很好的解释:

大家都知道在统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如 transfer learning / domain adaptation 等。而 covariate shift 就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同,即:对所有

72f87f8622f0b97b0d29d1e641e27acce5ca22b0

有:
06f3e1d41d544547cd8455ef291fa8b76eb775aa

但是

3cd89ce8ec6960783e95133da94f9da1845084e3

大家细想便会发现,的确,对于神经网络的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能“指示”的样本标记(label)仍然是不变的,这便符合了 covariate shift 的定义。由于是对层间信号的分析,也即是 “internal”的来由。

1.3 ICS 会导致什么问题?

简而言之,每个神经元的输入数据不再是“独立同分布”。

其一,上层参数需要不断适应新的输入数据分布,降低学习速度。

其二,下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。

其三,每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。

Normalization 的基本思想与框架

我们以神经网络中的一个普通神经元为例。神经元接收一组输入向量

a661db39811a053f6744743b8e056f8f68d5bd14

通过某种运算后,输出一个标量值:

2fb2fb73685f8bea606c5d7a5e29b172210fecd5

由于 ICS 问题的存在, x 的分布可能相差很大。要解决独立同分布的问题,“理论正确”的方法就是对每一层的数据都进行白化操作。然而标准的白化操作代价高昂,特别是我们还希望白化操作是可微的,保证白化操作可以通过反向传播来更新梯度。

因此,以 BN 为代表的 Normalization 方法退而求其次,进行了简化的白化操作。基本思想是:在将 x 送给神经元之前,先对其做平移和伸缩变换, 将 x 的分布规范化成在固定区间范围的标准分布。

通用变换框架就如下所示:

5ffa26186191842b5e9016efcbfbe5b6a8e7f901

我们来看看这个公式中的各个参数。

(1) μ平移参数(shift parameter), σ缩放参数(scale parameter)。通过这两个参数进行 shift 和 scale 变换: 

6568f5308d2dddd0a933da4314aa6e4ff7cf8962

得到的数据符合均值为 0、方差为 1 的标准分布。

(2)b再平移参数(re-shift parameter),b再缩放参数(re-scale parameter)。将 上一步得到的 \hat{x} 进一步变换为: 

85e9e0d98a2b95da7478b22b608e493091939102

最终得到的数据符合均值为 b 、方差为 g^2 的分布。

奇不奇怪?奇不奇怪?

说好的处理 ICS,第一步都已经得到了标准分布,第二步怎么又给变走了?

答案是——为了保证模型的表达能力不因为规范化而下降

我们可以看到,第一步的变换将输入数据限制到了一个全局统一的确定范围(均值为 0、方差为 1)。下层神经元可能很努力地在学习,但不论其如何变化,其输出的结果在交给上层神经元进行处理之前,将被粗暴地重新调整到这一固定范围。

沮不沮丧?沮不沮丧?

难道我们底层神经元人民就在做无用功吗?

所以,为了尊重底层神经网络的学习结果,我们将规范化后的数据进行再平移和再缩放,使得每个神经元对应的输入范围是针对该神经元量身定制的一个确定范围(均值为 b 、方差为 g^2 )。rescale 和 reshift 的参数都是可学习的,这就使得 Normalization 层可以学习如何去尊重底层的学习结果。

除了充分利用底层学习的能力,另一方面的重要意义在于保证获得非线性的表达能力。Sigmoid 等激活函数在神经网络中有着重要作用,通过区分饱和区和非饱和区,使得神经网络的数据变换具有了非线性计算能力。而第一步的规范化会将几乎所有数据映射到激活函数的非饱和区(线性区),仅利用到了线性变化能力,从而降低了神经网络的表达能力。而进行再变换,则可以将数据从线性区变换到非线性区,恢复模型的表达能力。

那么问题又来了——

经过这么的变回来再变过去,会不会跟没变一样?

不会。因为,再变换引入的两个新参数 g 和 b,可以表示旧参数作为输入的同一族函数,但是新参数有不同的学习动态。在旧参数中, x 的均值取决于下层神经网络的复杂关联;但在新参数中,

0d8e97506cb2aad0af581a7dddbf8efbf184aed8

仅由 b 来确定,去除了与下层计算的密切耦合。新参数很容易通过梯度下降来学习,简化了神经网络的训练。

那么还有一个问题(问题怎么这么多!)——

这样的 Normalization 离标准的白化还有多远?

标准白化操作的目的是“独立同分布”。独立就不说了,暂不考虑。变换为均值为 b 、方差为 g^2 的分布,也并不是严格的同分布,只是映射到了一个确定的区间范围而已。(所以,这个坑还有得研究呢!)


原文发布时间为:2018-02-6

本文作者:Julius

本文来自云栖社区合作伙伴“PaperWeekly”,了解相关信息可以关注“PaperWeekly”微信公众号

相关文章
|
机器学习/深度学习 人工智能 资源调度
深度学习入门基础CNN系列——批归一化(Batch Normalization)和丢弃法(dropout)
批归一化方法(Batch Normalization,BatchNorm)是由Ioffe和Szegedy于2015年提出的,已被广泛应用在深度学习中,其目的是对神经网络中间层的输出进行标准化处理,使得中间层的输出更加稳定。丢弃法(Dropout)是深度学习中一种常用的抑制过拟合的方法,其做法是在神经网络学习过程中,随机删除一部分神经元。训练时,随机选出一部分神经元,将其输出设置为0,这些神经元将不对外传递信号。
307 0
深度学习入门基础CNN系列——批归一化(Batch Normalization)和丢弃法(dropout)
|
机器学习/深度学习 自然语言处理 资源调度
【深度学习】batch normalization和layer normalization区别
“独立同分布”的数据能让人很快地发觉数据之间的关系,因为不会出现像过拟合等问题。 一般在模型训练之前,需要对数据做归一化。为了解决ICS问题,即internal covarivate shift(内部协变量漂移)问题,即数据分布会发生变化,对下一层网络的学习带来困难。
526 0
【深度学习】batch normalization和layer normalization区别
|
机器学习/深度学习 算法 信息无障碍
深度学习中的Normalization模型(附实例&公式)
本文以非常宏大和透彻的视角分析了深度学习中的多种Normalization模型,从一个新的数学视角分析了BN算法为什么有效。
1202 0
|
机器学习/深度学习 算法
深度学习之优化详解:batch normalization
一项优化神经网络的技术,点进来了解一下?
2915 0
|
9天前
|
机器学习/深度学习 API 语音技术
|
1天前
|
机器学习/深度学习 传感器 人工智能
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第18天】 随着人工智能的快速发展,深度学习技术在图像处理和识别领域取得了显著进展。特别是在自动驾驶系统中,基于深度学习的图像识别技术已成为关键技术之一。本文将探讨深度学习在自动驾驶系统中的应用,重点关注卷积神经网络(CNN)和循环神经网络(RNN)在车辆检测、行人识别和交通标志识别等方面的应用。通过对比传统图像识别方法,我们将展示深度学习技术如何提高自动驾驶系统的准确性和鲁棒性。
|
2天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第18天】 随着人工智能的快速发展,特别是深度学习技术的突破性进步,图像识别已成为自动驾驶领域的核心组成部分。本文旨在探讨基于深度学习的图像识别技术如何优化自动驾驶系统的性能,并分析其在实时交通场景中处理复杂视觉信息的能力。文中将介绍几种主要的深度学习模型,包括卷积神经网络(CNN)和递归神经网络(RNN),以及它们在图像分类、目标检测和语义分割中的应用。同时,文章还将讨论当前技术面临的挑战和未来的发展方向。
|
2天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶汽车中的应用
【4月更文挑战第18天】 随着人工智能技术的迅猛发展,深度学习已成为推动多个技术领域革新的关键力量。尤其在图像识别领域,深度学习技术通过模仿人类视觉系统的处理机制,显著提高了机器对视觉信息的理解和分析能力。本文将探讨深度学习在图像识别领域的核心技术原理,并重点分析其在自动驾驶汽车中的应用,如何通过精确的图像识别来增强车辆的环境感知能力,从而实现更安全、更高效的驾驶体验。
|
3天前
|
机器学习/深度学习 计算机视觉 异构计算
深度学习在图像识别中的应用与挑战
【4月更文挑战第16天】 随着人工智能技术的飞速发展,深度学习作为其核心技术之一,在图像识别领域取得了显著的成果。本文将探讨深度学习在图像识别中的应用,分析其优势和面临的挑战,并提出相应的解决方案。通过对现有技术的研究和实践,我们旨在为读者提供一个全面了解深度学习在图像识别领域的应用现状和未来发展趋势的视角。

相关实验场景

更多