深度学习之优化详解:batch normalization

简介: 一项优化神经网络的技术,点进来了解一下?

0dde3f096f7599d81d477395d253026988396c6c

认识上图这些人吗?这些人把自己叫做“The Myth Busters”,为什么?在他们的启发下,我们才会在Paperspace做类似的事情。我们要解决是Batch NormalizationBN)是否确实解决了Internal Covariate Shift的问题。虽然Batch Normalization已经存在了几年,并且已经成为深度神经网络的主要内容,但它仍然是深度学习中最容易被误解的概念之一。

Batch Normalization真的解决了Internal Covariate Shift问题了吗?它是用来做什么的?你所学的深度学习是真的吗?我们来看看吧!


在开始之前

我们曾经讨论过:

1、如何利用随机梯度下降来解决深度学习中局部极小值和鞍点的问题。

2Momentum(动量)和Adam(自适应矩估计)等优化算法如何增强梯度下降以解决优化曲面中的曲率问题。

3、如何使用不同的激活函数来解决梯度消失问题。

为了有效地学习神经网络,神经网络的每一层分布都应该:均值为0、始终保持相同的分布;第二个条件意味着通过批梯度下降输入到网路层的数据分布不应该变化太多,并且随着训练的进行它应该保持不变,而不是每一层的分布都在发生变化。


Internal Covariate Shift

 Batch Normalization:通过减少Internal Covariate Shift来加快深度网络训练,其前提是解决一个称为Internal Covariate Shift的问题。

就像我们现在所称的那样,Internal Covariate Shift是指在训练过程中,隐层的输入分布老是变来变去,Internal指的是深层网络的隐层,是发生在网络内部的事情,Covariate指的是输入分布被变化的权重参数化,Shift指分布正在发生变化。

所以,让我们试着观察这件事情怎样发生的。再次,尽可能想象一下最简单的神经网络之一:线性堆叠的神经元,这样你也可以通过替换神经元网络层来扩展类比。

34a5ed21cbe254b865e5228eabd9aa5a8f1e9bad

假设我们正在优化损失函数L,神经元d权重的更新规则是:

7d15d39427c3302e408b06e1652cf66a17b5d11d

我们可以看到权重d的梯度取决于c的输出,对于神经网络中的任何层也是如此。神经元的权重梯度取决于它的输入或者下一层的输出。

然后梯度向着反方向更新权重,此过程一直重复,让我们回到d层,因为我们对d进行了梯度更新,我们期望omega_d可以有更小的损失,然而并非如此,让我们看一下原因。

我们从i开始进行初始迭代更新。假设输出c在迭代ip_c^i d层更新不妨假设c的输入分布为p_c^i。在向下传递期间,comega_c的权重也会更新,这导致c的输出分布发生变化。在下一次迭代i+1中,假设z_c的分布已转变到p_c^{i+1}。由于d层的权重是根据p_c^i更新的,现在d层对应输入分布p_c^{i+1},这种差异可能导致网络层产生根本不会减少损失的输出。

现在,我们可以提出两个问题:

输入分布的变化究竟如何使神经网络层更难学习?

这种分布的变化是否足够引起上述情况?

我们先回答第一个问题:


为什么Internal Covariate Shift造成上述情况?

神经网络的作用是生成映射f,将输入x映射到输出yx的分布发生变化,为什么会使神经网络层更难学习?

下图为x标准分布图:

83569e8d935e07e1e5bdc9b5826bcf58930c2777

x的非标准分布如下图:

609ff35ef7eee7b0577b288e943b5f331469e88c

假设我们正在尝试的映射是f=2x,如果x的分布在一个地方压缩了很多密度,或者它是否均匀分布为什么那么重要?

事实证明,这很重要,现代精确的深层网络,是非常强大的曲线拟合器。假设我们有一个l层,对应输入为x,其分布如下。另外,我们假设,由层l学习的函数,由虚线表示:

87037ae03d975933fbfe9eddf8eddd099fb97c25

i的迭代

假设在梯度更新之后,当到下一层网络小批量梯度下降时,x的分布变为这样:

b524f0be49b4b5f1d61423689d1f8328300fa0ee

i+1迭代

注意这个小批量梯度下降的损失与之前的损失相比更多,为什么会这样?让我们回到我们之前的数据,我们最初学到的映射f可以很好地减少之前小批量梯度下降的损失。对于许多其他函数也是如此,在x不密集的区域中,这些函数差别很大。

5b6a26a4d34612dbad7e25f8488f37f20e70b542

适应相同输入xi的不同函数

如果我们选择红色虚线给出的函数,下一个小批量梯度下降的损失也会很低。

a1cb58a3499d06dda651ddc0d91380cb7d0e850f

更合适的另一个函数

现在明显的问题是我们如何修改我们的算法,以便我们最终学习的映射对应红色虚线的映射?没有简单的答案,对于这种情况更好的办法是预防它们而不是等这种情况发生了再去解决它。

ICS最终搞砸我们学习的原因是我们的神经网络总是在输入分布的密集区域上表现更好。由于较密集区域中的数据点主导平均损失(我们试图最小化),因此密集区域中点的损失减少得更多。

但是,如果ICS最终在训练期间的后续批次中更改输入分布的密集区域,则网络在之前迭代期间学习的权重不再是最佳的。它可能需要非常仔细地调整超参数来获得合理的学习。这就解释了为什么ICS会出现这样的问题。

我们所说的是在小批量梯度下降中存在很大的方差。方差确保我们的映射不会在输入分布的一个区域中过度专门化,我们也希望均值在零附近。


规范化输入

解决此问题的一种方法是将输入归一化到神经网络,以使输入分布均值为0和方差为1。但是,这仅适用于网络不够深的情况。当网络变得更深,比如20层或更多层时,即使输入被归一化,超过20多个层的权重的微小波动也会导致输入到更深层的输入分布发生很大变化。

例如语言变化(不完全正确):我们旅行距离发生变化,语言也会发生变化。 但是,较短距离内的语言有很多相似之处。比如西班牙语和葡萄牙语,它们都源于史前印欧语言。印度斯坦语也是如此,印度语是8000公里以外的地方。 但是,西班牙语和印度斯坦语之间的差异比西班牙语和葡萄牙语之间的差异要大得多。原因是小距离的微小变化已经放大了很多,深度网络也是如此。


输入批量归一化

我们现在介绍批量归一化的概念,它实际上规范了网络层的输出激活,然后做了更多的事情,下面是详细的描述:

b0bae8990ef088e850c538c6a3c7bc6237094152

上述等式描述了BatchNorm的原理,2-4描述了某个神经元对应的原始的激活x通过减去mini-Batchm个实例获得的m个激活x求得的均值E(x)并除以求得的方差Var(x)来进行转换,由此求出每一次小批量梯度下降激活的标准差。

等式5是中γβ是所谓的批量归一化层的超参数。式5的输出具有β的平均值和γ的标准偏差。实际上,批量归一化层有助于优化算法来控制层的输出的均值和方差。


揭穿ICS的神秘面纱

Internal Covariate Shift是指我们训练网络时输入分布的变化。Batch Norm具有超参gammabeta,用于调整激活的均值和方差。但是当这些超参数被训练时,它们也会发生变化,而BN导致激活分布或ICS的变化。如果它能阻止ICS,超参数gammabeta没有任何意义。


为什么Batch Norm有效呢?

Ian GoodfellowGANs的创始人,人工智能领域最重要的研究员之一,他在一个讲座中给出了可能的解释,在这一点上,我必须提醒你,除非我们通过具体证据支持,否则这只是猜测,不管它可能来自现代深度学习中的重量级人物之一。Goodfellow认为关键是BN的两个超参数。

让我们再次考虑超级简单的玩具网络:

37de649a5c253e0337c3df54b270a031f9201274

当我们对a的权重进行梯度更新时,我们只计算 frac {\ partial {L}} {\ partial {a}},即损失函数相对于a的敏感度。但是,我们没有考虑到改变a的权重也会改变更多层的输出,如层bcd

同样,由于使用这些算法的计算难度,这实际上归结为我们无法使用二阶或更高阶优化方法,梯度下降及其变型只适用于一阶。

深度神经网络具有高阶相互作用,这意味着除了损失函数之外,改变一个层的权重也可能影响其他层的统计。这些跨层在没有列入考虑的情况下交互会导致ICS。每次我们更新图层的权重时,它都有可能以不好的方式影响神经网络中图层的统计。

在这种情况下,收敛可能需要仔细初始化,调整超参数和更长的训练持续时间。但是,当我们在图层之间BN图层时,图层的统计信息仅受两个超参数gammabeta的影响。

现在,我们的优化算法只必须仅两个超参数来控制任何层的统计数据,而不是前一层中的权重,这极大地加速了收敛,并且避免了初始化和超参数调整的需要。因此,Batch Norm更像是一个检查指向机制。

请注意,任意设置图层均值和标准差的能力也意味着如果充分地进行正确地训练,我们就可以恢复其原始分布。


激活前或激活后的BatchNorm

理论上在激活函数之前应用BN更好,但实际上已经发现在激活之后应用BN会产生更好的结果。在BN之后进行激活,BN无法完全控制进入下一层的输入的统计数据,因为BN的输出必须经过激活,在激活后应用BN却不是这种情况。


推论中的批量规范

在推理期间使用BN可能有点棘手,因为我们在推理期间可能并不总是有批处理。例如,在视频上实时运行对象检测器。一次处理一个帧,因此没有批处理。

我们需要计算批处理的均值hat {x}和方差sigma ^ 2 来生成BN的输出。在这种情况下,我们在训练期间保持均值和方差的滑动平均,然后在推理期间将这些值插入均值和方差,这很重要,也是大多数深度学习库采用的方法,可以开箱即用。

使用滑动平均的理由取决于大数定律。小批量的均值和方差是对真实均值和方差的非常粗糙的估计。批量估计称为批量统计,均值和方差的真实值(我们未知)称为人口统计。对于大量样本,批量统计数据往往会收敛于人口的统计数据,这就是为什么我们在训练时使用滑动平均。 由于我们的优化算法的小批量特性,它还有助于我们除去平均估计产生的噪声。


BNS是正则化器:

Batch Norm其实是一个正规化器,每个批次估计的均值和方差是真实均值的噪声版本,这在我们的最优搜索中注入了随机性,有助于正规化。


结论:

虽然Batch Norm现已成为深层架构的标准元素,但直到最近,研究一直致力于理解它是如何工作的。去年,我们还介绍了SELU或缩放指数线性单位激活函数,这些函数隐含地规范了通过它们的激活,这是通过BN明确完成的。

数十款阿里云产品限时折扣中,赶紧点击领券开始云上实践吧!

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译

文章原标题《Intro to optimization in deep learning: Busting the myth about batch normalization》

作者:paperspace

译者:乌拉乌拉,审校:袁虎

文章为简译,更为详细的内容,请查看原文文章


相关文章
|
6天前
|
机器学习/深度学习 算法 调度
深度学习|改进两阶段鲁棒优化算法i-ccg
深度学习|改进两阶段鲁棒优化算法i-ccg
|
14天前
|
机器学习/深度学习 数据处理 网络架构
基于深度学习的图像识别优化策略
【4月更文挑战第30天】 在当前的计算机视觉领域,深度学习已成为推动图像识别技术革新的核心动力。本文旨在探讨并提出一系列优化策略,以增强现有深度神经网络模型在处理复杂图像数据时的性能和效率。通过分析网络架构、训练过程和数据处理流程,我们提出了改进的模型正则化方法、高效的训练技巧以及针对特定问题的适应性调整。这些策略不仅在理论上具有创新性,而且在实践中已被证明能够显著提高模型的准确率和泛化能力,为图像识别领域的研究与应用提供了新的视角和技术路径。
|
2天前
|
机器学习/深度学习 人工智能 算法
构建高效AI系统:深度学习优化技术解析
【5月更文挑战第12天】 随着人工智能技术的飞速发展,深度学习已成为推动创新的核心动力。本文将深入探讨在构建高效AI系统中,如何通过优化算法、调整网络结构及使用新型硬件资源等手段显著提升模型性能。我们将剖析先进的优化策略,如自适应学习率调整、梯度累积技巧以及正则化方法,并讨论其对模型训练稳定性和效率的影响。文中不仅提供理论分析,还结合实例说明如何在实际项目中应用这些优化技术。
|
6天前
|
机器学习/深度学习 边缘计算 算法
基于深度学习的图像识别优化策略研究
【5月更文挑战第8天】 本研究旨在探索提高深度神经网络在图像识别任务中性能的有效策略。通过分析现有模型的局限性,本文提出了一系列优化技术,包括数据增强、网络结构调整和损失函数改进。实验结果表明,这些策略显著提升了模型的准确率和泛化能力,尤其在处理高复杂度图像时表现突出。此外,针对计算资源消耗问题,我们还探讨了模型压缩和加速方法,以期实现高效率的实时图像识别应用。
|
7天前
|
机器学习/深度学习 边缘计算 算法
基于深度学习的图像识别优化策略研究
【5月更文挑战第7天】 在计算机视觉领域,图像识别作为核心任务之一,其性能的提升一直是研究的热点。随着深度学习技术的不断发展,卷积神经网络(CNN)已成为图像识别的主要工具。然而,模型复杂度和计算资源的大量需求限制了其在实际应用中的推广。本文围绕减少模型参数、提高运算效率和保持识别准确率等方面展开,提出了一种结合深度可分离卷积与注意力机制的图像识别优化策略。通过实验验证,该策略在多个标准数据集上取得了与传统卷积网络相媲美的结果,同时显著降低了参数数量和计算成本。
28 4
|
8天前
|
机器学习/深度学习 人工智能 开发框架
构建未来:基于深度学习的图像识别优化策略
【5月更文挑战第6天】随着人工智能技术的飞速发展,深度学习在图像识别领域已经取得了显著的成就。然而,为了进一步提升系统的识别效率和准确性,本文提出了一种结合最新神经网络架构与数据增强技术的图像识别优化策略。通过引入自适应学习率调整机制和混合精度训练方法,该策略旨在降低模型训练过程中的时间成本,同时提高模型在复杂环境下的泛化能力。
|
8天前
|
机器学习/深度学习 监控 算法
利用深度学习优化图像识别准确性的探索
【5月更文挑战第6天】 在数字图像处理领域,随着数据量的激增和算法复杂度的提升,传统图像识别技术面临巨大挑战。本文通过构建一个基于深度卷积神经网络(CNN)的模型,探讨了如何提高图像识别的准确性。我们详细分析了网络结构、激活函数和优化器的选择对模型性能的影响,并通过实验验证了所提出方法的有效性。结果表明,采用适当的数据增强技术和调整网络参数,可以显著提升模型在复杂数据集上的识别精度。
|
9天前
|
机器学习/深度学习 边缘计算 计算机视觉
基于深度学习的图像识别优化技术研究
【5月更文挑战第5天】 在当前的计算机视觉领域,图像识别技术已取得显著进展,尤其是深度学习方法的广泛应用。然而,随着数据量的日益增加和模型复杂度的提升,如何提高图像识别的效率与准确性成为新的挑战。本文提出了一种基于改进卷积神经网络(CNN)的图像识别优化技术,旨在减少模型参数量、加速推理过程,并保持甚至提升识别精度。通过引入深度可分离卷积、注意力机制以及量化剪枝策略,该技术在多个标准数据集上显示出了卓越的性能。
|
11天前
|
机器学习/深度学习 算法 大数据
利用深度学习优化图像识别处理流程
【5月更文挑战第3天】 在当前的计算机视觉领域,图像识别的准确性与处理速度是衡量系统性能的重要指标。随着人工智能技术的飞速发展,深度学习模型尤其是卷积神经网络(CNN)在图像识别任务中取得了显著成果。本文旨在探讨如何通过优化深度学习模型的结构和参数,以及采用高效的算法来提高图像识别的处理效率和准确率。我们将介绍几种有效的技术手段,包括网络结构简化、权重共享、多尺度训练等,并通过实验验证这些方法的有效性。最终目的是为读者呈现一种平衡计算成本与识别性能的优化策略,推动深度学习在实际应用中的高效部署。
|
11天前
|
机器学习/深度学习 数据采集 人工智能
利用深度学习优化图像识别处理流程
【5月更文挑战第3天】 在现代技术环境中,图像识别作为人工智能的一个关键应用领域,其发展速度和准确性要求不断提高。本文将探讨利用深度学习技术优化图像识别处理流程的方法,包括数据预处理、模型选择、训练策略及最终的测试与部署。通过分析现有文献和最新研究成果,我们提出了一套改进的卷积神经网络(CNN)架构,该架构能够有效提升图像识别的准确率和处理速度。此外,文章还讨论了模型过拟合、数据增强以及迁移学习等关键技术的应用,并展示了这些技术如何帮助构建一个更为健壮和高效的图像识别系统。
22 5

相关实验场景

更多