数学是达成目的的工具, 理解才是达成目的桥梁, 所以这篇文章用浅显易懂的动画阐述了复杂的机器学习概念.

强烈推荐通过动画的形式了解.

所以首先放视频链接: Youtube 或者 优酷.

代码实现请来这里看: Python 实现

一 引子

对房屋售价进行预测时,我们的特征仅有房屋面积一项,但是,在实际生活中,卧室数目也一定程度上影响了房屋售价。下面,我们有这样一组训练样本:

房屋面积(英尺) 卧室数量(间) 售价(美元)
2104 3 399900
1600 3 329900
2400 3 369000
1416 2 232000
3000 4 539900
1985 4 299900
.... ... ....

注意到,房屋面积及卧室数量两个特征在数值上差异巨大,如果直接将该样本送入训练,则代价函数的轮廓会是“扁长的”,在找到最优解前,梯度下降的过程不仅是曲折的,也是非常耗时的:

二 归一化

该问题的出现是因为我们没有同等程度的看待各个特征,即我们没有将各个特征量化到统一的区间。

数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。以下是两种常用的归一化方法:

Standardization

Standardization又称为Z-score normalization,量化后的特征将服从标准正态分布:

其中,u和delta分别为对应特征的均值和标准差。量化后的特征将分布在[-1, 1]区间。

Min-Max Scaling

Min-Max Scaling又称为Min-Max normalization, 特征量化的公式为:

量化后的特征将分布在区间。

大多数机器学习算法中,会选择Standardization来进行特征缩放,但是,Min-Max Scaling也并非会被弃置一地。在数字图像处理中,像素强度通常就会被量化到[0,1]区间,在一般的神经网络算法中,也会要求特征被量化[0,1]区间。

进行了特征缩放以后,代价函数的轮廓会是“偏圆”的,梯度下降过程更加笔直,收敛更快性能因此也得到提升:

普通数据标准化

Batch Normalization, 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法, 也是优化神经网络的一种方法. 在之前 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 的功效啦. 让每一层的值在有效的范围内传递下去.

一、BatchNormalization

keras.layers.normalization.BatchNormalization(epsilon=1e-6, weights=None)

将前一层的激活输出按照数据batch进行归一化。
** inputshape: 任意。当把该层作为模型的第一层时,必须使用该参数(是一个整数元组,不包括样本维度)
** outputshape
: 同input shape一样。
** 参数**:

epsilon :small float>0,Fuzz parameter。
weights:初始化权值。含有2个numpy arrays的list,其shape是[(input_shape,), (input_shape,)]

Normalization 批标准化(batch normalization)理解相关推荐

  1. 什么是批标准化 (Batch Normalization)

    为什么要数据标准化 (1)具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律. (2)也是优化神经网络的一种方法 什么是批标准化 (Batch Normalization) Batch No ...

  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. 【文章阅读】BN(2015)理解Batch Normalization批标准化

    Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift Brief 该 ...

  4. [转] 深入理解Batch Normalization批标准化

    转自:https://www.cnblogs.com/guoyaohua/p/8724433.html 郭耀华's Blog 欲穷千里目,更上一层楼 项目主页:https://github.com/g ...

  5. 【深度学习】简单理解Batch Normalization批标准化

    资源 相关的Paper请看这两篇 Batch Normalization Accelerating Deep Network Training by Reducing Internal Covaria ...

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

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

  7. 【深度学习】深入理解Batch Normalization批标准化

    这几天面试经常被问到BN层的原理,虽然回答上来了,但还是感觉答得不是很好,今天仔细研究了一下Batch Normalization的原理,以下为参考网上几篇文章总结得出. Batch Normaliz ...

  8. 【转】深入理解Batch Normalization批标准化

    Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性.虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层网络 ...

  9. 张俊林老师写的非常好的:深入理解Batch Normalization批标准化

      Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性.虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层 ...

最新文章

  1. Git学习系列(二)创建本地仓库及文件操作
  2. orb-slam评价
  3. java throws catch_java中throws与try...catch的区别点
  4. 从零开始学设计模式(五)——原型模式(Prototype Pattern)
  5. 3款堪称神器的电脑软件,简单又实用
  6. 产品读书《小米生态链战地笔记》
  7. ThinkPHP6敏捷后台开发框架
  8. ASM的普通盘转AFD
  9. BZOJ3654 : 图样图森破
  10. 微信小程序和PWA对比分析
  11. 元宇宙这个筐,快被骗子撑破了
  12. vs 怎么调试html5,关于html5:使用-VSCode-如何进行远程开发调试
  13. gtx1060 3g和6g性能差距 gtx1060 3g和6g吃鸡区别
  14. java 搭建个人博客_5分钟 教大家搭建免费个人博客
  15. 2020年中国热成像品牌崛起,高德红外跃居全球第二
  16. 切比雪夫不等式例题讲解_初中数学,一元一次不等式组应用题,2道例题讲解,配3道练习...
  17. 矢量叉乘能否反求矢量
  18. web图书销售管理系统_图书管理系统的主要功能有哪些?
  19. Flutter Container 设置宽度,最小宽度、最大宽度
  20. AP微积分到底选AB还是BC?

热门文章

  1. Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec
  2. DNSPod十问张果:如何让数据在屏幕上跳舞?
  3. python 推荐与该用户喜欢的电影类型相同的电影
  4. java第三方网上支付
  5. HarmonyOS智能座舱体验是怎样炼成的?立即查看
  6. html 上下广告悬浮,JS上下自动漂浮广告,可关闭
  7. 魅族mx系统服务器,魅族MX答疑:魅族MX Flyme云功能测试
  8. 进程地址空间(虚拟地址 | 物理内存)
  9. php中yii的controller,详解PHP的Yii框架中的Controller控制器,yiicontroller
  10. linux基础56——uniq