简介和作用

Batch Normalization会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会扩大,工作效果也很好,同时也能使你更容易地训练深层网络。

针对一个单层的网络,我们讲了归一化输入(将input X归一化,详见笔记8)。

Batch Normalization是指:
面对深度网络,对于任何一个隐藏层而言,我们归一化上一层的a值,以更快地训练这一层的W和b(严格来讲,我们真正归一化的是上一层的Z而不是上一层的a)。
这个操作在PyTorch中有写好的函数,所以原理我没仔细听,但大概还是均值方差那一套,但均值和方差不一定为0和1。


Batch Normalization的作用是他适用的归一化过程不只是输入层,甚至同样适用于神经网络的深度隐藏层。
在用于隐藏层时,我们也许不想隐藏单元值必须是平均值0和方差1(比如使用sigmoid函数的时候)。
有了γ和β两个参数后,我们可以确保所有Z(i)的值是我们想赋予的任意值(均值和方差由两个参数γ和β控制)。
它的真正作用是保证隐藏的单元均已使用均值和方差标准化(即:Z(i)有固定的均值和方差)。

加速计算的原理

BN起作用的一个直观理解是:它在做相似的事情,但不仅仅对于这里的输出值,还有隐藏单元值(BN作用的冰山一角)。

BN有效的第二个原因(更深的原因):它可以使权重比你的网络更滞后或更深层(makes weights, later or deeper than your network),比如第10层的权重相比于神经网络中前层的权重,更能经受得住变化(more robust to change to weights in earlier layers of the nerual networks)。

会遇到convariate shift(Google翻译为协变量转移)的问题。


我们以第三层为例,此网络已经学习了参数W[3], b[3]。从第三隐藏层的角度来看,它从前层中取得一些值,借着做些什么,希望使得输出值接近真实值。

单独看第三隐藏层,它的工作是找到一种方式,将a的值映射到y的预测值。可能在现在训练好的W[3],b[3]和W[4],b[4]
但这个网络还有前面的W[2],b[2]和W[1],b[1]。如果这些参数改变,会导致第三隐藏层的输入改变。
所以从第三隐藏层的角度来看,这些隐藏单元的值在不断变化。所以就有了convariate shift的问题。

所以BN做的是减少了这些隐藏值的分布变化的数量。

在网络参数更新的时候,z[1],z[2](这里以二维举例,当然实际情况不一定是二维)的值也会相应改变。而BN保证了,无论其怎么变化,二者的方差和均值都不变。
更具体地说,BN限制了在前层的参数更新影响数值分布的程度(W,b变化对z分布的影响程度),从而减少了各个层的输入值改变的问题,以至于神经网络的之后层就会有更坚实的基础。
或者换句话说,BN减弱了前层参数的作用后层参数的作用之间的联系。它使得网络每层都可以自己学习,稍稍独立于其他层。而这有助于加速整个网络的学习。

**另外,BN有轻微的正则化效果。**均值和标准偏差的估值会带来噪音,这迫使后部单元不过分依赖于任何一个隐藏单元。
应用较大的mini-batch size,可以减少正则化效果。

在神经网络的应用

BN一次只能处理一个mini-batch的数据。
我们可以认为每个单元负责计算两件事:

  • 计算z
  • 由z通过激活函数计算a

而在应用BN的神经网络中,会在计算z和计算a之间进行Batch Normalization的操作。如下:

相应的,模型的参数就会有W,b,β,γ。
这个操作在PyTorch中有写好的函数,但是理解原理还是很不错的。

在实践中,BN和mini-batch经常一起使用。所以我们应用BN的方式就是:

另外参数b的大小不再起作用,因为最终会被Normalization的均值抵消。所以我们在使用BN的时候可以不用b,或者将其置零。

参数维度如下:

小结

我们来梳理一下应用了BN的神经网络的前向传播和反向传播。

在每个epoch中:
我们先前向传播,途中用归一化的z来代替原来的z,使z具有确定的均值和方差(符号见图,我为了简单就都用z表示了)。
之后再反向传播,更新参数W,β,γ的值(不用管b)。

吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)相关推荐

  1. 吴恩达神经网络与深度学习——深度神经网络

    吴恩达神经网络与深度学习--深度神经网络 深度神经网络 符号 前向传播 矩阵维度 m个样本 为什么使用深层表示 搭建深层神经网络块 正向传播和反向传播 前向和反向传播 前向传播 反向传播 参数和超参数 ...

  2. 吴恩达神经网络和深度学习

    [前言] 在学习了深度学习和神经网络之后,为什么我要以博客的形式来做笔记?这CSDN有那么多的优秀文章,我自己写的都比不上 别人的我写的真的有意义吗,为什么我要浪费大量的时间去做这项工作?我相信一句话 ...

  3. 吴恩达神经网络与深度学习——浅层神经网络

    吴恩达神经网络与深度学习--浅层神经网络 神经网络概述 神经网络表示 计算神经网络的输出 m个样本的向量化 for loop 向量化 向量化实现的解释 激活函数 sigmoid tanh函数 ReLu ...

  4. 吴恩达神经网络和深度学习-学习笔记-38-使用开源的方案+迁移学习+数据增强data augmentation

    使用别人的开源成果 想要用现成的网络,最好在网络上找到开源的实现,这要比从头开始实现快得多. 比如:直接在Google上搜索resnets github,找到合适的后点击下载会得到URL,然后在cmd ...

  5. 吴恩达神经网络和深度学习-学习笔记-28-端到端的深度学习(end-to-end deep learning )

    深度学习最令人振奋的最新动态之一,就是端到端深度学习end-to-end deep learning的兴起. 什么是"端到端深度学习" 以前有一些数据处理系统或学习系统,它们需要多 ...

  6. 吴恩达神经网络和深度学习-学习笔记-8-梯度消失与爆炸 + 梯度检测

    梯度消失与爆炸 介绍 直观理解是: 权重W只比1(即单位矩阵)大一点,深度神经网络的激活函数将爆炸式增长. 权重W只比1(即单位矩阵)小一点,深度神经网络的激活函数将指数式递减. 虽然我(吴恩达老师) ...

  7. 吴恩达-神经网络和深度学习课程-学习心得(一)

    前言: 陆陆续续学完了吴恩达老师在网易云课堂上开设的深度学习工程师微专业的部分内容(01.神经网络与深度学习,04.卷积神经网络,02.改善深层神经网络),在进一步应用实践之前,对之前的学习的内容做个 ...

  8. 吴恩达神经网络和深度学习-学习笔记-39-计算机视觉现状

    Data vs hand-engineering 你可以把大部分的机器学习问题看成是在你的数据相对较少的地方,应用到你拥有大量数据的地方. 我们今天有相当数量的语音识别数据,至少相对于这个问题的复杂性 ...

  9. 吴恩达神经网络和深度学习-学习笔记-22-误差分析

    单一误差分析 假设我们面对一个猫分类器的准确率不够的原因. 队友看了一下算法分类出错的例子,注意到算法将一些够狗分类为猫. 在这种条件下,我们应不应该做一个项目专门处理狗?比如搜集更多的狗的图片,或者 ...

  10. 吴恩达神经网络和深度学习-学习笔记-21-何时该改变开发集+测试集或指标

    需要我们改变开发集+测试集或指标的情况,是现有的指标或开发测试集并不能帮助我们选择出最好的模型! 如果你的评估指标,无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标. (加权来排除某一类 ...

最新文章

  1. Java 函数式编程和 lambda 表达式
  2. spring cloud的eureka.client.service-url.defaultZone配置eureka集群的写法
  3. 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
  4. 走访近20家代工厂后:近千块的大牌T恤,成本只要几十块
  5. 自考数据结构和数据结构导论_我跳过大学自学数据科学
  6. Oracle 每个session的限制,限制oracle普通用户能且只能kill自己的会话
  7. try-catch-finally的执行顺序
  8. 浅谈社区电子商务的发展及其技术应用
  9. 杂项:JFB-权限设置
  10. python写脚本的优势_python写脚本的优势玩被叫
  11. Linux内核--网络栈实现分析(一)--网络栈初始化
  12. 中文文字校对和文档对比合并开源工具调研
  13. MFC Windows 程序设计[十六]之小小计算器
  14. 机器学习中的二分类问题评价指标之精确率、召回率、F1值通俗理解
  15. 当前 IT 行业,软件开发应该掌握的几种编程语言,你学会了几种?
  16. 第十一课:磁场和洛伦兹力
  17. 锂离子电池热失控预警资料整理(二)
  18. 变异凯撒1(BUCTF在线评测)
  19. 【screen】Linux下screen的使用
  20. 最新版大学英语六级词汇打印版

热门文章

  1. python编程入门-Python编程入门电子书教程,看这几个就够了
  2. python是什么课程-python课程体系是怎么样的?
  3. python从入门到放弃百度云-Python从入门到放弃:概论
  4. 中国智能语音行业发展趋势预测:市场规模将达159.7亿[图]
  5. arm thttpd php,thttpd嵌入式web开发笔记
  6. python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用
  7. leetcode 35. 搜索插入位置(二分法搜索失败的情况)
  8. css绘制向左三角形_CSS绘制三角形—border法
  9. 服务器增加驱动器,向存储空间直通添加服务器或驱动器
  10. mysql BDB支持表锁吗_mysql 表锁问题