文章目录

  • 一、背景
  • 二、提出
  • 三、原理
  • 四、计算
  • 五、Scale and Shift
  • 六、BN层实现

学习记录:

  深度学习笔记(一):卷积层+激活函数+池化层+全连接层
  深度学习笔记(二):激活函数总结
  深度学习笔记(三):BatchNorm(BN)层
  深度学习笔记(四):梯度下降法与局部最优解
  深度学习笔记(五):欠拟合、过拟合


   防止过拟合(一):正则化
   防止过拟合(二):Dropout
   防止过拟合(三):数据增强


一、背景

  卷积神经网络的出现,网络参数量大大减低,使得几十层的深层网络成为可能。然而,在残差网络出现之前,网络的加深使得网络训练变得非常不稳定,甚至出现网络长时间不更新或者不收敛的情形,同时网络对超参数比较敏感,超参数的微量扰动也会导致网络的训练轨迹完全改变。

二、提出

  2015 年,Google 研究人员Sergey Ioffe等提出了一种参数标准化(Normalize)的手段,并基于参数标准化设计了 Batch Nomalization(简称 BatchNorm或 BN)层 。BN层提出后:
(1)使得网络的超参数的设定更加自由,比如更大的学习率,更随意的网络初始化等,同时网络的收敛速度更快,性能也更好。
(2)广泛地应用在各种深度网络模型上,卷积层、BN 层,ReLU 层、池化层一度成为网络模型的标配单元,通过堆叠 Conv-BN-ReLU-Pooling 方式往往可以获得不错的模型性能。

三、原理

  网络层的输入x分布相近,并且分布在较小范围内时(如 0 附近),更有利于函数的迭代优化。那么如何保证输入x的分布相近呢?
数据标准化可以实现此目的,通过数据标准化操作可以将数据x映射x^\widehat{x}x:

  其中μr\mu_rμr​、δr2\delta_r^2δr2​来自统计的所有数据x的均值和方差,ϵ\epsilonϵ是为防止出现除 0的错误而设置的较小数,比如ϵ=1e−8\epsilon=1e-8ϵ=1e−8。
  很容易很看出来:上面的公式表示的是正太分布。也就是说,通过上面的公式计算,可以将原本随机分布的输入数据x,转化成按正太分布分布的数据x^\widehat{x}x,从而使得输入网络的数据分布较近,有利于网络的迭代优化。

四、计算

  要使得原本的输入x映射到正太分布的x^\widehat{x}x,就需要分别计算出μr\mu_rμr​和δr2\delta_r^2δr2​的值,然后带入下面公式,完成转换。
(1)训练阶段
  通过统计可以得到Batch组数据的均值μB\mu_BμB​和方差δB2\delta_B^2δB2​,计算公式如下:

  其中,m为Batch样本数。在实际应用过程中,μB\mu_BμB​、δB2\delta_B^2δB2​近似于μr\mu_rμr​和δr2\delta_r^2δr2​。计算时,可直接用μB\mu_BμB​、δB2\delta_B^2δB2​代替。
  因此,在训练阶段,通过下面公式标准化输入:

(2)测试阶段
  在测试阶段,μB\mu_BμB​、δB2\delta_B^2δB2​计算原理和训练阶段相同。需要注意的是,这里的xix_ixi​是测试集的数据,m是测试集一次输入的batch数。
  因此,在测试阶段,通过下面公式标准化输入:

注意:测试阶段也进行标准化,并不是为了去优化训练,只是为了和训练解阶段保持一致,这样得到的测试结果才有意义。

五、Scale and Shift

  上述的标准化运算并没有引入额外的待优化变量,μB\mu_BμB​、δB2\delta_B^2δB2​ 均由统计得到,不需要参与梯度更新。实际上,为了提高 BN 层的表达能力,BN 层作者引入了“scale and shift”技巧,将x^\widehat{x}x变量再次映射变换:

  其中γ\gammaγ参数实现对标准化后的x^\widehat{x}x再次进行缩放,β\betaβ参数实现对标准化的x^\widehat{x}x进行平移。不同的是,γ\gammaγ、β\betaβ参数均由反向传播算法自动优化,实现网络层“按需”缩放平移数据的分布的目的。
于是,在测试阶段,标准化公式与缩放平移结合变为:

六、BN层实现

  在 TensorFlow 中,通过 layers.BatchNormalization()类可以非常方便地实现 BN 层:

# 插入BN层
layers.BatchNormalization()

深度学习笔记(三):BatchNorm(BN)层相关推荐

  1. 深度学习笔记三:反向传播(backpropagation)算法

    接上一篇的最后,我们要训练多层网络的时候,最后关键的部分就是求梯度啦.纯数学方法几乎是不可能的,那么反向传播算法就是用来求梯度的,用了一个很巧妙的方法. 反向传播算法应该是神经网络最基本最需要弄懂的方 ...

  2. 吴恩达深度学习笔记3-Course1-Week3【浅层神经网络】

    浅层神经网络: 一.浅层神经网络的表示 本文中的浅层神经网络指的是 two layer nn 即 one input layer + one hidden layer + one output lay ...

  3. 深度学习笔记9:卷积层的实现(forward, backward 的实现)

    用for循环实现的卷积层: 卷积运算: import time """ 定义2维度卷积的非矩阵操作""" def Conv2d(X,W, s ...

  4. 深度学习笔记三:Softmax Regression

    Softmax回归模型 整体理解 回归与分类 借用网上一个帖子的回复:分类问题和回归问题都要根据训练样本找到一个实值函数g(x). 回归问题的要求是:给定一个新的模式,根据训练集推断它所对应的输出y( ...

  5. 深度学习笔记02——全连接层

    1. Fully connect 每一个activation function就是一个神经元.全连接层就是将每个神经元的输出都作为下一层所有神经元的输入. deep learning 就是有很多的hi ...

  6. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记(一):logistic分类  深度学习笔记(二):简单神经网络,后向传播算法及实现  深度学习笔记(三):激活函数和损失函数  深度学习笔记:优化方法总结  深度学习笔记(四):循环神经 ...

  7. 深度学习笔记(一):卷积层+池化层+激活函数+全连接层

    写在前面:大家好!我是[AI 菌],一枚爱弹吉他的程序员.我热爱AI.热爱分享.热爱开源! 这博客是我对学习的一点总结与记录.如果您也对 深度学习.机器视觉.算法.Python.C++ 感兴趣,可以关 ...

  8. UFLDL深度学习笔记 (三)无监督特征学习

    UFLDL深度学习笔记 (三)无监督特征学习 1. 主题思路 "UFLDL 无监督特征学习"本节全称为自我学习与无监督特征学习,和前一节softmax回归很类似,所以本篇笔记会比较 ...

  9. 深度学习笔记(8) 实践层面(三)

    深度学习笔记(8) 实践层面(三) 1. 归一化 / 标准化输入 2. 权重初始化 3. 梯度检验 1. 归一化 / 标准化输入 训练神经网络,特征必须要在0到1之间 此时就只能加速训练的方法就是归一 ...

最新文章

  1. python格式化% 和 format
  2. 语义化,让你的网页更好的被搜索引擎理解
  3. ubuntu ifconfig命令找不到_那些年踩过的坑--无法使用MobaXterm远程登录Ubuntu
  4. 只用一周的业余时间,这位逆天博士生解决了困扰数学界数十年的难题
  5. freecodecamp_freeCodeCamp的学术诚信政策
  6. RocketMQ的安装与启动
  7. c语言中乱显示数字,同时显示不同的数字
  8. Module LUT6 is not defined
  9. Android 系统开发系列三
  10. poj 2649 Factovisors
  11. codeblocks 16.01 汉化包下载地址及方法
  12. Windows10超级好用的虚拟机
  13. 解决支付宝验证失败sign check fail: check Sign and Data Fail
  14. educoder平台哪里有答案_2020青骄第二课堂登陆平台地址入口 青骄第二课堂禁毒知识竞赛入口...
  15. Oracle as 10g安裝問題
  16. 2021届前端面试知识点(其他)
  17. 未成熟男人; 成熟男人
  18. .NET轻量级MVC框架:Nancy入门教程(二)——Nancy和MVC的简单对比
  19. 慧都APS解决方案,点亮「照明灯具行业」精益化生产之路
  20. java和大行自行车哪个好_大行自行车P8和D8哪个好?

热门文章

  1. arcgis风向_ArcGIS教程:如何制作风或水流速流向图
  2. 长期阅读英文技术博客的好处
  3. FormData对象用法
  4. EAI激光雷达X4使用gmapping与laser_scan_matcher建图(一)
  5. 关于计算机这个行业,中级技工证书有什么意义吗?
  6. 3D点云转Mesh网格【Python】
  7. 在列表前方插入一个数据_jQuery实现在列表的首行添加数据
  8. Unity3D找不到UI包的处理方法
  9. image downsampling in python
  10. 剑指offer-跳楼梯和变态跳楼梯(C++)