为什么要数据标准化

(1)具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律.

(2)也是优化神经网络的一种方法

什么是批标准化 (Batch Normalization)

Batch Normalization, 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法,

每层都做标准化

在神经网络中, 数据分布对训练会产生影响. 比如某个神经元 x 的值为1, 某个 Weights 的初始值为 0.1, 这样后一层神经元计算结果就是 Wx = 0.1; 又或者 x = 20, 这样 Wx 的结果就为 2. 现在还不能看出什么问题, 但是, 当我们加上一层激励函数, 激活这个 Wx 值的时候, 问题就来了. 如果使用 像 tanh 的激励函数, Wx 的激活值就变成了 ~0.1 和 ~1, 接近于 1 的部已经处在了 激励函数的饱和阶段, 也就是如果 x 无论再怎么扩大, tanh 激励函数输出值也还是 接近1. 换句话说, 神经网络在初始阶段已经不对那些比较大的 x 特征范围 敏感了. 这样很糟糕, 想象我轻轻拍自己的感觉和重重打自己的感觉居然没什么差别, 这就证明我的感官系统失效了. 当然我们是可以用之前提到的对数据做 normalization 预处理, 使得输入的 x 变化范围不会太大, 让输入值经过激励函数的敏感部分. 但刚刚这个不敏感问题不仅仅发生在神经网络的输入层, 而且在隐藏层中也经常会发生.

只是时候 x 换到了隐藏层当中, 我们能不能对隐藏层的输入结果进行像之前那样的normalization 处理呢? 答案是可以的, 因为大牛们发明了一种技术, 叫做 batch normalization, 正是处理这种情况.

BN的添加位置

Batch normalization 的 batch 是批数据, 把数据分成小批小批进行 stochastic gradient descent. 而且在每批数据进行前向传递 forward propagation 的时候, 对每一层都进行 normalization 的处理,

BN的效果

Batch normalization 也可以被看做一个层面. 在一层层的添加神经网络的时候, 我们先有数据 X, 再添加全连接层, 全连接层的计算结果会经过 激励函数 成为下一层的输入, 接着重复之前的操作. Batch Normalization (BN) 就被添加在每一个全连接和激励函数之间.之前说过, 计算结果在进入激励函数前的值很重要, 如果我们不单单看一个值, 我们可以说, 计算结果值的分布对于激励函数很重要. 对于数据值大多分布在这个区间的数据, 才能进行更有效的传递. 对比这两个在激活之前的值的分布. 上者没有进行 normalization, 下者进行了 normalization, 这样当然是下者能够更有效地利用 tanh 进行非线性化的过程.

没有 normalize 的数据 使用 tanh 激活以后, 激活值大部分都分布到了饱和阶段, 也就是大部分的激活值不是-1, 就是1, 而 normalize 以后, 大部分的激活值在每个分布区间都还有存在. 再将这个激活后的分布传递到下一层神经网络进行后续计算, 每个区间都有分布的这一种对于神经网络就会更加有价值. Batch normalization 不仅仅 normalize 了一下数据, 他还进行了反 normalize 的手续. 为什么要这样呢?

BN 算法

我们引入一些 batch normalization 的公式. 这三步就是我们在刚刚一直说的 normalization 工序, 但是公式的后面还有一个反向操作, 将 normalize 后的数据再扩展和平移. 原来这是为了让神经网络自己去学着使用和修改这个扩展参数 gamma, 和 平移参数 β, 这样神经网络就能自己慢慢琢磨出前面的 normalization 操作到底有没有起到优化的作用, 如果没有起到作用, 我就使用 gamma 和 belt 来抵消一些 normalization 的操作.

最后我们来看看一张神经网络训练到最后, 代表了每层输出值的结果的分布图. 这样我们就能一眼看出 Batch normalization 的功效啦. 让每一层的值在有效的范围内传递下去

相关概念

 归一化:1)把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。2)把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。
  标准化:在机器学习中,我们可能要处理不同种类的资料,例如,音讯和图片上的像素值,这些资料可能是高维度的,资料标准化后会使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1,这个方法被广泛的使用在许多机器学习算法中(例如:支持向量机、逻辑回归和类神经网络)。
  中心化:平均值为0,对标准差无要求
  归一化和标准化的区别:归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。
  标准化和中心化的区别:标准化是原始分数减去平均数然后除以标准差,中心化是原始分数减去平均数。 所以一般流程为先中心化再标准化。
  无量纲:我的理解就是通过某种方法能去掉实际过程中的单位,从而简化计算。

扩展阅读

https://www.jianshu.com/p/95a8f035c86c

什么是批标准化 (Batch Normalization)相关推荐

  1. Normalization 批标准化(batch normalization)理解

    数学是达成目的的工具, 理解才是达成目的桥梁, 所以这篇文章用浅显易懂的动画阐述了复杂的机器学习概念. 强烈推荐通过动画的形式了解. 所以首先放视频链接: Youtube 或者 优酷. 代码实现请来这 ...

  2. 偏差与方差、L1正则化、L2正则化、dropout正则化、神经网络调优、批标准化Batch Normalization(BN层)、Early Stopping、数据增强

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 3.2 深度学习正则化 3.2.1 偏差与方差 3.2.1.1 ...

  3. 批归一化(Batch Normalization)详解

    批归一化(Batch Normalization)详解 文章目录 批归一化(Batch Normalization)详解 前言 一.数据归一化 二.BN解决的问题:Internal Covariate ...

  4. 批归一化作用_批归一化Batch Normalization的原理及算法

    一.BN提出的背景意义 本文的背景文献是:<Batch Normalization: Accelerating Deep Network Training by Reducing Interna ...

  5. 批规范化 Batch Normalization

    batch normalization 就是对数据做批规范化,使得数据满足均值为0,方差为1的正太分布.其主要作用是缓解DNN训练中的梯度消失/爆炸现象,加快模型的训练速度.BN在2015年提出,论文 ...

  6. 批归一化作用_批归一化(Batch Normalization)

    论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift Inte ...

  7. batch normalization

    20210702 深度学习中的五种归一化(BN.LN.IN.GN和SN)方法简介 https://blog.csdn.net/u013289254/article/details/99690730 h ...

  8. PYTORCH批标准化

    1.标准化 传统机器学习中标准化也叫做归一化. 一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位.数据标准化让机器学习模型看到的不同样本彼此之间更加相似,这有助于模型的学习与对新数 ...

  9. Pytorch——批标准化(层归一化)

    文章目录 1.前言 2.普通数据归一化 3.层归一化 4.Batch Normalization 添加位置 5.Batch Normalization 效果 6.BN 算法 1.前言 今天我们会来聊聊 ...

最新文章

  1. wsdd文件是怎么生成的_Axis WSDD文件参考文档
  2. postgresql中DML操作
  3. [转]深入理解CSS中的层叠上下文和层叠顺序
  4. 神舟测试软件,Ultra-Simulator 业务自动拔测软件
  5. 领域驱动设计:软件核心复杂性应对之道
  6. 从程序员到项目经理(二十九):怎样写文档
  7. java数组设置结束_Java 数组最佳指南,快收藏让它吃灰
  8. 游标中的static参数
  9. String.resize()
  10. 第九届中国开源黑客松活动将于2019年4月18日-4月20日,在深圳举办
  11. 常见耳机品牌简介及鉴赏
  12. 7-19 统计人数(2008慈溪) (100分)
  13. c语言kbhit函数头文件,有没有办法在标准C中替换kbhit()和getch()函数?
  14. vipkid(cocos creator)
  15. Android扫描车牌,车牌拍照识别SDK
  16. 如何避免搜索引擎爬虫产生的流量过大以及搜索引擎设置优化
  17. 详解幂律分布,以及用于重尾分布的Python库powerlaw的使用
  18. hcie培训价格多少钱?
  19. 后渗透篇:COM劫持及加载技术
  20. 《把时间当作朋友》 - 书评

热门文章

  1. PHP拼团人数不能超过,怎么解决拼团、抽奖难以凑齐人数这个大问题?
  2. 教你低成本获取用户:利用数据精细化运营(附手绘图)
  3. Whipple防护结构的建模与仿真技术
  4. 基于微信小程序云开发的校园类平台
  5. Creator 拓展展Button组件 增加点击音效 默缩放。点击间隔
  6. 拳王虚拟项目公社:0成本卖虚拟教程资源,月入2万的兼职副业项目
  7. ClickHouse----单击安装 引擎
  8. 前端页面模拟浏览器搜索功能Ctrl+F实现
  9. 异构数据库、异构数据源、分布式数据库三者的辨析区别
  10. Android夜神模拟器