理解Batch Normalization系列1——原理(清晰解释)

Batch Normalization技巧自从2015年被谷歌提出以来,因其有效提升网络训练效率,获得广泛应用与持续研究。然而,要透彻理解BN却不容易,下图是Kainming He在《Learning Deep Representations for Visual Recognition》报告中的一页,只需要注意右下角的红色描述。

img1.png

图 1. 右下角的红色提示足见BN的费解. (来源: Learning Deep Representations for Visual Recognition)

大咖都会在BN上踩坑,可想而知,如果萌新接触这个概念,更是不易。因此《理解Batch Normalization系列》将对Batch Normalization做一个全面总结。

系列目录

理解Batch Normalization系列1——原理

理解Batch Normalization系列2——训练及评估

理解Batch Normalization系列3——为什么有效及若干讨论

理解Batch Normalization系列4——实践

本文目录
1 初始idea
2 原始神经网络的结构
3 BN的神经网络结构
4 BN的前向传播
4.1 标准化
4.2 缩放平移
5 BN实现的效果
6 总结
参考文献

1 初始idea

如果做神经网络训练前,对输入的像素进行标准化处理,将有效降低模型的训练难度。受此启发,作者想到,既然输入层可以加标准化有好处,那么网络里的隐层为什么不可以标准化?

于是,作者通过对每层加权和进行标准化,然后再通过缩放平移来“适度还原”。这样,做到了既不过分破坏输入信息,又抑制了各batch之间各位置点像素分布的剧烈变化带来的学习难度

在原作中,最主要的思想就是下面这个公式。(别担心!只需要扫一眼即可!)

img2.png

图 2. BN的核心思想. (来源: Batch Normalization Paper)

我们可以先绕开图2,分以下三步理解。

  • 先了解BN给神经网络结构带来了什么
  • 然后理解BN是如何进行前向传播
  • 理解BN是如何进行前向传播

2 原始神经网络的结构

一个经典的神经网络,它的某一个隐层如图3所示。

img3.png

图 3. 经典网络的示意图

为了和原始论文统一,将之前常见的加权和符号\vec{z}改用\vec{x}表示。即上一层输出的激活值为\vec{a} ,那么经过本层加权和W\vec{a}+\vec{b}处理后,获得加权和\vec{x},然后经过本层激活后即输出\sigma(\vec{x})

(符号短缺,\sigma()代表求激活,\sigma^2代表方差)

3 BN的神经网络结构

加入BN之后的网络结构如图4所示。

img4.png

图 4. 加入BN网络的示意图

很抱歉,为了容纳更多的有效信息,导致这个图有点复杂。总体上来说,对于本层的加权和\vec{x},BN先进行标准化求出\hat{\vec{x}},再进行缩放和平移求出\vec{y} ,这个\vec{y}取代了原始的\vec{x}进行激活。

关键就是标准化、缩放平移这两个环节。

4 BN的前向传播

认识BN的困难在于维度太多了!大脑里至少能联想到三个维度:batch_size维度(时间顺序维度)、网络层维度(结构横向维度)、向量维度(结构纵向维度)。

所以,当你了解图4的结构图,那么图5里用一个究极简明的例子,说明了BN到底在干啥,如果完全理解了图5,后面关于标准化、缩放平移只需要扫一眼黑体字即可

(如果图中字符太小,请务必点击原图,放大后真的狠清晰)

img5.png

图 5. BN前向传播示意图

4.1 标准化

标准化即对一组数据中的每个数字,减均值再除以标准差(给方差开个根号),就可把一个该组数据转换为一个均值为0方差为1的标准正态分布。

Batch Normalization的数据组的构造方法:一个batch上所有m个样本分别进行前向传播时,传到这个隐层时所有m个\vec{x}的每个维度,分别构成一个数据组

在原始论文里,用下标B指的正是一个batch(也就是我们常说的mini-batch),包含m个样本。这也就是为啥叫Batch Normalization的原因。

  • 对这m个\vec{x},在每一个维度上标量们,分别求均值和方差。
  • 得到的均值\mu和方差\sigma^2分别对应该层的每个神经元维度。

只要我们求得均值\mu和方差\sigma^2,就可以进行标准化了:
\hat{x_{i}}=\frac{x_{i}-\mu}{\sqrt{\sigma^2}}
为避免分母为0的极端情况,工程上可以给分母增加一个非常小的小数\epsilon(例如10^{-8})。
\hat{x_{i}}=\frac{x_{i}-\mu}{\sqrt{\sigma^2+\epsilon}}

4.2 缩放平移

由标准化公式可以反推出:
x_{i}=\sigma \hat{x_{i}}+\mu
因此仿照这个公式,作者构造了下面这个公式,即 scale and shift 公式
y_{i}=\gamma \hat{x_{i}}+\beta
很直觉就能看出来,\gamma 是对 \hat{x_{i}}的缩放,\beta 是对\gamma\hat{x_{i}}的平移。可以增加可学习的参数\gamma\beta,如果\gamma=\sigma, \beta = \mu,那么必然有 y_{i}=x_{i},即我们就能够完全地还原成功!我们可以通过反向传播来训练这两个参数(推导表明这是可以训练的),而至于 \gamma 多大程度上接近 \sigma ,\beta 多大程度上接近 \mu ,让损失函数对它们计算出的梯度决定!注意,\gamma\beta都是向量。

因此,

  • 只要损失函数有需要,公式(3)赋予了它左右BN层还原程度的能力,而且上限是完全还原
  • 具体对每一层还原多少,则是由损失函数对每一层这两个系数的梯度来决定;
  • 损失通过梯度来控制还原的程度,较好利于减少损失,就多还原;较少利于减少损失,就少还原。

5 BN实现的效果

img6.png

图 6. BN的效果

BN实现的效果是:对于某一层\vec{x}来说,它的每个元素x_i的数值,在一个batch上的分布是一个任意的未知分布,BN首先把它标准化为了一个标准正态分布。

这样是否太暴力了?如果所有输入样本被层层改分布,相当于输入信息都损失掉了,网络是没法训练的。

所以需要第二步对标准正态分布再进行一定程度的还原操作,即缩放平移。

最终使得这个数值分布,兼顾保留有效信息、加速梯度训练

6 总结

介绍了Batch Normalization的结构和前向传播,总之,就是在加权和后,加了一个标准化层、一个还原层。

标准化层,用来把一个batch_size上的该层该神经元的数值进行标准正态分布(均值为0,方差为1)

还原层,就是引入缩放系数、平移系数,让梯度决定还原程度。

设想虽好,如何训练?请关注下一期《理解Batch Normalization系列2——训练及评估》

参考文献

[1] https://arxiv.org/pdf/1502.03167v3.pdf

[2] https://r2rt.com/implementing-batch-normalization-in-tensorflow.html

[3] Adjusting for Dropout Variance in Batch Normalization and Weight Initialization

[4] https://www.jianshu.com/p/05f3e7ddf1e1

[5] https://www.youtube.com/watch?v=gYpoJMlgyXA&feature=youtu.be&list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC&t=3078

[5] https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html

[6] https://www.quora.com/In-deep-learning-networks-could-the-trick-of-dropout-be-replaced-entirely-by-batch-normalization

[7] https://panxiaoxie.cn/2018/07/28/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-Batch-Normalization/

[8] https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization

[9] https://www.quora.com/In-deep-learning-networks-could-the-trick-of-dropout-be-replaced-entirely-by-batch-normalization

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容