理解Batch Normalization系列2——训练及评估(清晰解释)

上一期介绍了Batch Normalization的前向传播,然而想法美好,然而能否计算、如何计算这些新参数才是重点。

系列目录

理解Batch Normalization系列1——原理

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

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

理解Batch Normalization系列4——实践

本文目录
1 训练阶段
1.1 反向传播
1.2 参数的初始化及更新
2 评估阶段
2.1 来自训练集的均值和方差
2.2 评估阶段的计算
3 总结
参考文献

先放出这张图,帮助记住。

img1.png

图 1. BN的结构

1 训练阶段

引入BN,增加了\mu\sigma\gamma\beta四个参数。

这四个参数的引入,能否计算梯度?它们分别是如何初始化与更新?

1.1 反向传播

神经网络的训练,离不开反向传播,必须保证BN的标准化、缩放平移两个操作必须可导。

缩放平移就是一个线性公式,求导很简单。而对于标准化时的统计量,看起来有点无从下手。其实是凭借图1的变量关系,可以绘制计算图,如图2所示。Frederik Kratzert 在这篇博文中有详细的计算,对每一个环节都进行了详细的描述。

im2.png

图 2. 求解BN反向传播的计算图 (来源: 这篇博文)

由图2可见:

  • 每个环节都可导
  • 只要求出各个环节的导数
  • 用链式法则(串联关系就相乘,并联关系就相加)求出总梯度。

狗尾续貂,对这个反传大致做了一个流程图,如图3所示,帮助理解。

im3.png

图 3. BN层反传的流程图 (来源: 这篇博文)

注意,均值的梯度、方差的梯度的计算,只是为了保证梯度的反向传播链路的通畅,而不是为了更新自己(没明白下文还会解释);缩放因子\gamma和j和平移因子\beta的梯度传播则和权重W一样,不影响反向传播链路的通畅,只是为了更新自己。

最后的结果就是原论文中表述:

im4.png

图4. BN的反向传播. (来源: Batch Normalization Paper)

​ 如果是从事学术,不妨练练手。

1.2 参数的初始化及更新

讨论一下图1中的6个参数的初始化及更新问题。

  • W

    初始化用标准正态分布,更新用梯度下降

    与经典网络的初始化相同,初始化一个标准正态分布(即Xavier方法)。

  • b

    省略掉该参数

    在经典的神经网络里,b作为偏置,用于解决那些W无法通过与x相乘搞定的"损失减少要求",即对于本层所有神经元的加权和进行各自的平移。而加入BN后,\beta的作用正是进行平移。b的作用被\beta所完全替代了,因此省略掉b。

    了解过ResNet结构的朋友会发现该网络中的卷积,都没有偏置,为什么?下面截图是Kaiming He在github上回答原话。(踩坑无数必须体会深刻)

im5.png

图5. BN的加入导致本层的偏置b失效

  • \mu\sigma

    初始化取决于统计量,仅更新梯度,但不更新值本身

    在训练阶段,每个mini-batch上进行前向传播时,通过对本batch上的m个样本进行统计得到;

    在反向传播时,计算出它们的梯度l\mu的梯度、l\sigma的梯度,用于进行梯度传播。
    但是\mu\sigma这两个值本身不必进行更新,因为在下一个mini-batch会计算自己的统计量,所以前一个mini-batch获得的\mu\sigma没意义。

  • \gamma\beta

    初始化为1、0,更新用梯度下降

    根据我们在《理解Batch Normalization系列1——原理》的解读,\gamma作为“准方差”,初始化为一个全1向量;而\beta作为"准均值”,初始化为一个全0向量,他俩的初始值对于刚刚完成标准正态化的\hat{\vec{x}}来说,没起任何作用。

    至于将要变成什么值,起多大作用,那就交给后续的训练。即采用梯度下降进行更新,方式同W

2 评估阶段

\gamma\beta是在整个训练集上训练出来的,与W一样,训练结束就可获得。

然而,\mu\sigma是靠每一个mini-batch的统计得到,因为评估时只有一条样本,batch_size相当于是1,在只有1个向量的数据组上进行标准化后,成了一个全0向量,这可咋办?

2.1 来自训练集的均值和方差

做法是用训练集来估计总体均值\mu和总体标准差\sigma

  • 简单平均法

    把每个mini-batch的均值和方差都保存下来,然后训练完了求均值的均值,方差的均值即可。

  • 移动指数平均(Exponential Moving Average)

    这是对均值的近似。

    仅以\mu举例

\mu_{total}=decay*\mu_{total}+(1-decay)*\mu

​ 其中decay是衰减系数。即总均值\mu_{total}是前一个mini-batch统计的总均值和本次mini-batch的\mu加权求和。至于衰减率 decay在区间[0,1]之间,decay越接近1,结果\mu_{total}越稳定,越受较远的大范围的样本影响;decay越接近0,结果 \mu_{total}越波动,越受较近的小范围的样本影响。

事实上,简单平均可能更好,简单平均本质上是平均权重,但是简单平均需要保存所有BN层在所有mini-batch上的均值向量和方差向量,如果训练数据量很大,会有较可观的存储代价。移动指数平均在实际的框架中更常见(例如tensorflow),可能的好处是EMA不需要存储每一个mini-batch的值,永远只保存着三个值:总统计值、本batch的统计值,decay系数

在训练阶段同步获得了\mu_{total}\sigma_{total},在评估时即可对样本进行BN操作。

2.2 评估阶段的计算

y=\gamma\frac{x-\mu_{total}}{\sqrt{\sigma_{total}^2}}+\beta

为避免分母不为0,增加一个非常小的常数\epsilon,并为了计算优化,被转换为:
y=\frac{\gamma}{\sqrt{\sigma_{total}^2}+\epsilon}x+(\beta-\frac{\gamma}{\sqrt{\sigma_{total}^2}+\epsilon}\mu_{total})
这样,只要训练结束,\frac{\gamma}{\sqrt{\sigma_{total}^2}+\epsilon}、\mu_{total}、\beta就已知了,1个BN层对一条测试样本的前向传播只是增加了一层线性计算而已。

3 总结

用图6做个总结。

im6.png

图6. BN层相关参数的学习方法

鬼斧神工的构造,鬼斧神工的参数获取方法,这么多鬼斧神工,需要好好消化消化。

请见下一期《理解Batch Normalization系列3——为什么有效及若干讨论》

参考文献

[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

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

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

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

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

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

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

推荐阅读更多精彩内容