论文-阅读翻译理解笔记-Batch Normalization Accelerating Deep Network Training by Reducing Inter

论文介绍了内部协变量位移问题如何阻碍深度神经网络训练,提出Batch Normalization(BN)方法通过归一化层输入解决此问题。BN允许使用更高学习率,无需过于关注初始化,甚至可以替代Dropout,同时提高模型性能。实验证明,BN在ImageNet分类任务中显著减少了训练次数并提升了准确率。
摘要由CSDN通过智能技术生成

Abstract:当前神经网络层之前的神经网络层的参数变化,引起神经网络每一层输入数据的分布产生了变化,这使得训练一个深度神经网络(DeepNeural Networks)变得复杂。这样就要求使用更小的学习率,参数初始化也需要更为谨慎的设置。并且由于非线性饱和(注:如sigmoid激活函数的非线性饱和问题),训练一个深度神经网络会非常困难。我们称这个现象为:internal covariate shif;同时利用归一化层输入解决这个问题。

/*这里介绍一个术语Internal Covariate Shift

由于在训练时某一层的参数的更新改变后,会导致该层网络的输出(下一层的输入)的分布是变化的,这样使得训练DNN很复杂。这使得我们必须使用较小的学习率及较好的权重初值,这样会导致训练很慢,同时也导致使用saturating nonlinearities(饱和非线性) 激活函数(如sigmoid,正负两边都会饱和)时训练很困难。这种现象我们称为“internal covariate shift”,解决这种问题我们normalizing(归一化)网络层的输入。*/

我们将归一化层输入作为神经网络的结构,并且对每一个小批量训练数据执行这一操作。Batch Normalization(BN) 能使用更高的学习率,并且不需要过多的注重参数初始化问题。BN 的过程与正则化相似,在某些情况下可以去除Dropout。将BN应用到一个state-of-the-art的图片分类模型中时,使用BN只要1/14的训练次数就能够达到同样的精度。使用含有BN神经网络模型能提升现有最好的ImageNet分类结果:在top-5 验证集中达到4.9%的错误率(测试集为4.8%),超出了人类的分类精度。

 

1 Introduction

  深度学习极大的促进了许多领域的发展,如视觉、语音以及其他领域。随机梯度下降法(SGD)已经证明能够有效的训练深度神经网络,并且在SGD中加入momentum和Adgrad变量也达到了最好的性能。SGD优化参数 θ 来最小化损失函数


,其中X1…N 为训练数据集。在使用SGD时,每次迭代我们使用一个大小为m的小批量数据X1…m。通过计算

来逼近损失函数关于权值的梯度。在迭代过程中使用小批量数据相比使用一个样本有几个好处。首先,由小批量数据计算而来的损失函数梯度是由整个训练数据集的损失函数梯度的估计。并且随着小批量数据大小的增加,其性能会越好。其次,由于现代计算平台的并行性,小批量训练会比单个样例训练更高效。

  尽管随机梯度下降法简单有效,但却需要谨慎的调整模型的参数,特别是在优化过程中加入学习率和参数初始化方式的选择。每一层的输入都会受之前所有层的参数影响,并且随着网络越深,即使参数的变化很小也为对每一层的输入产生很大的影响。这使得训练一个网络变得十分复杂。

神经网络层输入分布的改变,使得神经网络层必须不停的适应新的数据分布。当一个学习系统的输入数据分布产生变化,我们称这种现象为:Experience Covariate Shift. 解决这种现象的典型方法是领域适应。然而,Covariate Shift的概念的适用性能够从整个学习系统扩展到该系统的一部分,比如一个子网络或者其中的一层。考虑一个网络计算

来逼近损失函数关于权值的梯度。在迭代过程中使用小批量数据相比使用一个样本有几个好处。首先,由小批量数据计算而来的损失函数梯度是由整个训练数据集的损失函数梯度的估计。并且随着小批量数据大小的增加,其性能会越好。其次,由于现代计算平台的并行性,小批量训练会比单个样例训练更高效。

  尽管随机梯度下降法简单有效,但却需要谨慎的调整模型的参数,特别是在优化过程中加入学习率和参数初始化方式的选择。每一层的输入都会受之前所有层的参数影响,并且随着网络越深,即使参数的变化很小也为对每一层的输入产生很大的影响。这使得训练一个网络变得十分复杂。

神经网络层输入分布的改变,使得神经网络层必须不停的适应新的数据分布。当一个学习系统的输入数据分布产生变化,我们称这种现象为:Experience Covariate Shift. 解决这种现象的典型方法是领域适应。然而,Covariate Shift的概念的适用性能够从整个学习系统扩展到该系统的一部分,比如一个子网络或者其中的一层。考虑一个网络计算

其中 F1 和 F2 是任意的变换函数。通过学习参数 θ1 和 θ2 来最小化 ll 。θ2 的学习:如果 X=F1(u,θ1 为子网络的输入,那么

则 θ2 的更新为 (m:批量数据的样本数;α :学习率)

因此,输入数据分布相同这一特性,使得子网络更容易训练。这与训练数据和测试数据有相同的分布是相似的。因此保持X的分布不变是有利的。这样,θ2 就不需要为了弥补 X 的分布的改变而重新进行调整。

  保持一个子网络的输入数据分布不变,对该子网络以外的隐藏层也有积极的作用。考虑一层激活函数为sigmoid函数的神经网络层 z=g(Wu+b),其中 u为该层的输入,权值矩阵 W 和偏置 b 为该层需要学习的参数,g(x)=1/1+exp(−x). 随着 |x| 的增大,g′(x)趋向0 (因为g(x)→1g(x)→1)。这意味着在 x=Wu+b 的每一维中除了绝对值较小的,其他的流向 uu 的误差会消失,同时模型的训练变得很缓慢。而同时 x 是由 W,b 以及该层以下的全部神经网络层的参数决定的,所有在训练期间改变这些参数有可能使x 中许多维偏移到非线性饱和端,从而降低了收敛速度。并且这个影响会随着网络层数的增加而加剧。在实际中非线性饱和端问题以及梯度弥散问题经常用ReLU,合适的初始化以及较小的学习率。如果我们能够确保非线性输入的数据分布更稳当的话,那么出现非线性饱和端问题的概率则会更小,并且能够加速网络的训练。

  我们称在训练深度神经网络的过程中,网络内部节点的分布发生变换这一现象为,Internal CovariateShift.。而消除这个现象能够加速网络的训练。我们提出了Batch Normalization ,通过减少依赖参数缩放和初始化,进而缓解Internal Covariate Shift,并动态的加速深度神经网络的训练速度。BN允许使用更高的学习率,而不会有发散的风险。进一步的,BN能够正则化模型,并且不需要Dropout。最后,BN能够使用s型激活函数,同时不会陷入饱和端。

  在4.2小节我们将BN加入一个分类模型,该模型在ImageNet中的表现最好。结果显示BN只需要使用之前的7%训练数次,就能够达到该模型的分类精度,并且最终能够明显的提高分类精度。通过利用嵌有BN 的已训练好的模型,我们获得top-5的错误率,这超出了在ImageNet 的已知分类精度。

2 TowardsReducing Internal Covariate Shift

  我们将 Internal Covariate Shift 定义为:在神经网络的训练过程中,由于参数改变,而引起的神经网络激活值分布的改变。我们通过缓解 Internal Covariate Shift 来提高训练。在训练的过程中保持神经网络层输入的分布不变,来提高训练数据。我们已经知道,在训练的过程中加入白化处理能,如0均值1方差化和去相关化,能够加速模型的收敛。当每一层的输入来自该层之前的神经网络层,对于每一层的输入来说很容易获得相同的白化。通过对每一层的输入进行白化处理,我们能够保持输入的分布,从而消除 Internal Covariate Shift 的病态影响。

我们可以在每一步的训练中白化激活值,也可以通过直接调整模型的结构或者依照激活值来修改优化函数的参数进行白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值