Press "Enter" to skip to content

Batch Normalization小简介(2) — 论文笔记(中)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

从小批次(mini-batch)的统计数据进行标準化

 

根据前一篇后面提到的原理,要把全神经网路架构,每一层的输入输出同时做标準化是相当耗费资源的。于是作者群想了两个步骤简化这个流程:首先是不再一口气将全部的神经网路架构同时做标準化,而是分开处理每一层。这里针对的是神经网路本身,不是训练资料。一样是调整为平均为0,变异数/标準差为1。假设有一层神经网路其输入为d维,则我们可以对每一维标準化处理:

公式1. 输入标準化

当然,平均数和变异数是根据资料集计算的。

 

这里要注意一个问题,就是将每一层的输入标準化有可能会改变该层的呈现。例如有一层神经网路是用sigmoid函数,这是非线性的函数。如果将输入标準化之后,有可能会将其非线性的部分去除,导致输入被侷限在线性的部分。要解决这个问题,则必须确保 输入在标準化的过程中仍维持恆等
。为了做到这样,文章引入两个变数γ、β来协助每个启动函数调整(放大/缩小、位移)标準化后的数值:

公式2. scale and shift the normalize value

这两个参数会和神经网路的其他参数一样用学习的方式调整。事实上,如果令γ为公式1的分母,β为分子中的E[x],则两式几乎相同,也是最后努力的目标。

 

另一个步骤则是用mini-batch取代整个资料集。每一批次的资料可以针对每个启动函数「预测」其标準化该有的平均数和变异数。这样,标準化的数据也可以参与反向传播,不会被遗漏。要注意的是能使用mini-batch是依据我们针对每一维的输入计算得到的变异数,而非整体的共变异数;否则后续可能还需要正规化。(这一段文字叙述牵涉到一点线性代数,留待之后讨论)

 

现在假设一个mini-batch B有m笔资料。现在我们把标準化在每一层神经网路分开执行,使我们可以专注在特定一层x。在这一层经过启动函数之后得到的值有m个。将其标準化的值定为

 

而其线性转移则为y1…ym。然则batch normalization可以表示为

公式3. BN映射

可以把它视为一种函数对应关係。以下是推导的流程:

1. BN

在normalize中分母里的ε是新加入的,为了维持数学上的稳定性。

 

BN在学习中主要调整的参数是γ、β,但要注意的是这个学习步骤不是独立于每笔资料,而是同时 依赖单笔资料和整组mini-batch的资料
。y会传到其他层,而标準化后的x对神经网路是内在的变化。如果我们每次採样组成mini-batch的资料是来自同一个分布,而且先忽略ε,则这些标準化后的x其期望值(平均值)为0,变异数为1,是一个常态分布。每一个标準化后的x可以视为一个子网路,这个子网路的函数就是公式2.,然后再叠上其他原本神经网路的架构。这些子网路的输入有固定的平均值和变异数,即使标準化的x其分布随训练有变化,仍然可以保持训练的速度,而让整个神经网路学习速率更快。

 

接下来文章中有一段在讲如何把反向传播推广到BN里。利用链锁律可以发现BN本身是可微分的,而且也适用反向传播调整其内的参数,因此不影响整个神经网路学习,还能加速其学习效率。这部分的推导就不放上来了,有兴趣的朋友可以自行翻阅论文(P.4左半)。

 

利用mini-batch训练及预测

 

承前述,要将一个神经网路「BN」化(batch-normalized),可以先针对单一层作处理。将输入经过标準化处理,再放入启动函数。整个神经网路架构依然可以运用各种梯度下降方式修正参数,BN架构里的参数不妨碍更新,而且也会一起更新。但在进行预测时,mini-batch的使用并不恰当,因为我们要直接对每笔资料做出判断,让神经网路实战了。因此,输出只要根据输入就好。一旦训练完成,就把标準化,也就是推导1.中normalize的式子

公式4. 完整版标準化式

的数据从mini-batch改成全体(population)。不考虑ε的情况下,它的平均值是0而变异数是1。Var[x]要修正为

公式5. 预测时使用变异数

其中σB²是样本变异数。总之,BN是一个线性函数,以下是训练一个含有BN神经稳路的流程推导:

推导2. 训练BN神经网路及用来预测的流程

步骤1到7是训练。8开始是预测,把平均数、变异数做调整(调整原因是将资料从mini-batch换成整组population),并取代原本的BN线性转换式。原式在推导1.的最后一行。

 

BN化的卷积网路

 

让我们重新把注意力放回一个简单的非线性模型

公式6. 非线性模型

其中W和b是要学习的参数(权重和误差),g则是一个非线性的启动函数(例如sigmoid或ReLu)。这种形式基本上涵盖全连接层或卷积层,亦即这两种形式的神经网路层都可以用这种表示式。现在把BN层放在启动函数前,使x=Wu+b,将x标準化。其实我们也可以对u标準化,但因为u是前一层非线性的输出,有可能在训练过程中改变分布,所以标準化u比较没有办法改善变项移动的问题。相反,Wu+b较容易维持常态分布(我的理解是有经过权重和误差的修正),标準化它比较容易维持启动函数的分布,减少变项移动。

 

不过,其实误差b在标準化中会被消掉(其角色由推导1.中的β取代),所以实际上公式6.会被代换成

公式7. BN化非线性模型

当然,每一维的x=Wu会被独立进行标準化转换,其有各自的γ、β要学习,这和前面的论点一致。

 

在卷积层,除了上述的式子,还额外希望BN保有卷积的特性,所以同一张特徵图的不同位置,其标準化转换是一样的。也就是说在一个mini-batch里,同一特徵图内所有的启动函数一起标準化(在单一层的卷积里)。因此,推导1.中的B,若在一个mini-batch里仍为m组资料,且其特徵图的大小为p×q,则其有效资料量m’为m×pq。γ、β变成以一个特徵图为单位,而不是个别的启动函数。推导2.也是一样的方式调整,所以BN化情况下的infernece其k也变成以特徵图为单位,不是个别维度(或画素)的启动函数。

 

BN如何提供较高的学习速率

 

在传统深度学习中,学习速率太高的问题是导致梯度消失或爆炸,以及陷入局部最小值。BN将启动函数标準化以后,减少因为局部小更动而放大梯度,也降低现在非线性函数饱和区的问题。

 

BN也可以让参数的倍数(或规模,scale)变得有弹性。例如我们将倍数a套用在公式7.上面,变成BN((aW)u)。依照反向传播中的偏微分:

推导3. 反向传播

倍数不再影响梯度变化,被BN「过滤」掉了。此外,大的权重常造成较小的梯度,而BN可以减少这个问题。

 

此外,作者群推测BN可以使每层的Jacobian(按:函数一阶导数的矩阵),其奇异值(按:奇异值分解,SVD,在这边可以概略的视为萃取特性的矩阵,但这个特性与CNN中的萃取特徵无关)接近1,而这被认为可能有助于训练[1]。其推导如下:考虑两个连续的神经网路层,且两层都有标準化的输入。这两层间的转换可以表示为

公式8.

若z、x皆为常态分布且互不关联,则可以用线性转换的方式表示为

公式9.

且x和z有单位共变异数。即

公式10.

从仿射变换[2]的性质推导得

公式11.

但Cov[x]也是单位矩阵,所以最后会等于

 

所有J的奇异值为1,这样可以保持反向传播时的梯度。用一张图表示[3]:

李宏毅老师的投影片

在图左时,某些方向的梯度不均匀。换成图右时,可以让梯度一致,学习比较快。图片虽然是在说feature scaling,不过我觉得论文这个段落应该是试着解释怎幺做到这样的。

 

在实务上x、z必定不会单纯线性且互不相关,甚至也未必是常态分布。但作者群希望藉由BN可以让梯度下降/学习的效率更好一点。关于这方面,论文在这个段落的最后留下一句, The precise effect of Batch Normalizationon gradient propagation remains an area of further study
.

 

留待各位继续去探索了。

 

BN调节(正规化,regularize)模型

 

模型BN化时,在一个mini-batch里每笔资料是有连结的。神经网路也不再针对每一笔资料提出一个决定性的值。这让模型一般化(泛化,generalization)更容易。在AlexNet中提出dropout的作法,但作者群认为,有了BN之后可以减少dropout的使用,甚至完全不用。他们在实验中也验证了这个想法。

 

下一篇把实验和结论一起做完。这篇真的累,尤其最后面这边…可能还要多读几次才会懂。欢迎有识之人分享您的心得,帮助我更快学习,谢谢!

 

Reference

 

[1] 这段叙述真的很难理解。 首先是Jacobian(雅可比),根据维基百科的叙述,这是函数的一阶偏导数以一定方式排列成的矩阵。( 原文
)姑且把它认为是把函数偏微分后形成的矩阵吧。

 

奇异值分解是线性代数的专有名词,定义为若一矩阵A,可找到两向量矩阵U、V及一矩阵Σ使A=UΣV^T(V的转置矩阵),则称Σ为A的奇异矩阵,其为一对角矩阵,故其内每一行/列只有一值为非0,该值统称为奇异值。U为左特徵向量矩阵,V为右特徵向量矩阵,且U/V阶为正交矩阵。

 

奇异值分解的好处是所有实数矩阵皆有奇异值矩阵,但未必有特徵值矩阵。在实用上主要是做函数的旋转伸缩,在这里则可以视为一种特性的萃取。

 

论文中提到奇异值为1有助于训练的引用论文在此:Saxe, Andrew M., McClelland, James L., and Ganguli, Surya. Exact solutions to the nonlinear dynamics of learning in deep linear neural networks. CoRR, abs/1312.6120, 2013.

 

[2] https://ccjou.wordpress.com/2014/06/03/%E5%85%B1%E8%AE%8A%E7%95%B0%E6%95%B8%E7%9F%A9%E9%99%A3%E7%9A%84%E6%80%A7%E8%B3%AA/
现代启示录。超神的线代网页。

 

[3] http://violin-tao.blogspot.com/2018/02/ml-batch-normalization.html
李宏毅老师的投影片也很棒!

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注