对 BatchNormalization 中 Internal Convariate Shift 的理解
前言:写的不好,主要解释了对内部协变量漂移(Internal Convariate Shift)的理解。
之前对BatchNormalization的理解不是很透彻,在搭建神经网络的时候也没有很注意去使用,今天集中搜索整理了下Batch Normalization的相关资料,才知道BatchNormalization的重要性,并不是用了Relu激活函数,BatchNormalization就没有用了。
为什么要使用Batch Normalization?
1. 降低内部协变量漂移(Internal Convariate Shift)
神经网络的最终目的:说到底,就是学习训练样本的流形分布。
每一层神经网络的目的:学习当前层神经网络的输入或上一层神经网络的输出的分布。
机器学习(包含深度学习)的使用的基本假设:IID 独立同分布假设,就是训练数据集与测试数据集服从相同的分布。这是通过训练数据训练得到的模型能在测试数据上工作的一个基本保障。
深度学习中的IID 独立同分布假设:1)神经网络的训练集与测试集服从相同的分布。
2)神经网络每一次输入的mini-batch的样本都服从同一个分布。
每层神经网络的IID 独立同分布假设:鉴于每层神经网络的目的,我们希望每一层神经网络在每一次迭代时的输入都服从同一个分布,只有这样,这层神经网络才能有效学习这个分布。否则,如果一个神经网络每一次输入的都是服从不同分布的样本,那么,最后神经网络也不知道该学习哪个分布了,从而导致学习效果变差。
协变量漂移/偏移(Convariate Shift):一般是指训练集与测试集的分布不同,或每次迭代时输入层输入的样本服从的分布不同。
内部协变量漂移(Internal Convariate Shift):Internal 指的是深层网络的隐藏层。内部协变量漂移是指,针对深层神经网络的内部的某个隐藏层,它的输入数据是上一层神经网络的输出。而随着神经网络的训练,每一层神经网络的参数(包含上一层)是不断变化的,因此,即使上一层网络的输入服从相同的分布,经过网络参数的变化,上一层网络的输出数据与上一次迭代时的输出数据不再服从同一个分布。从而导致,当前层神经网络的当前次的输入数据与上一次迭代时的输入数据服从不同的分布。我们把这种现象叫做内部协变量漂移。最后用一句话描述就是:由于神经网络参数的不断变化,每一层隐藏层神经网络在每一次迭代时的输入数据都服从不同的分布,这种现象叫内部协变量漂移。(我这里倾向于把shift翻译为“漂移”而不是“偏移”,因为每次迭代时内部输入数据都服从不同的分布,所以“漂移”更形象)
(附)如何判断是否已经出现协变量漂移:MCC(Matthews correlation coefficient),这个指标本质上是用一个训练集数据和预测集数据之间的相关系数,取值在[-1,1]之间,如果是1就是强烈的正相关,0就是没有相关性,-1就是强烈的负相关。
2.梯度消失
批标准化可以使数据远离激活函数的极限饱和区。relu激活函数虽然不存在梯度消失的问题,但是把小于0的数值激活为0。批标准化可以减少被置零的数值的数目。
Batch Normalization的执行时机
在激活函数之前
Batch Normalization解决的问题
1. 内部协变量漂移
2. 梯度消失
3. 加快收敛速度,提升训练速度。
Relu 激活函数下仍有使用Batch Normalization的必要
参考:【深度学习】深入理解Batch Normalization批标准化
TensorFlow 中 Batch Normalization API 的一些坑
批标准化详解(Batch Normalization for Reducing Internal Covariate Shift)
深度模型中relu激活函数的不足,batch normalization怎么解决梯度消失爆炸的数值问题
标准化(BN)与激活函数
对 BatchNormalization 中 Internal Convariate Shift 的理解相关推荐
- 深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用
深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用 前言 一.Batch Normalization是什么? 1.1 Interna ...
- 【论文泛读】 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
[论文泛读] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift ...
- Batch Normalization + Internal Covariate Shift(论文理解)
在看压缩神经网络相关的论文中,总是能看见 Batch Normalization,在网上找了很多博客看,但是一直处于一种似懂非懂的状态.于是去找了原论文<Batch Normalization: ...
- Internal Covariate Shift(ICS)的理解 和 Batch Normalizaton的原理及优点
参考资料: 1.Batch Normalization原理与实战 2.Internal Covariate Shift以及Batch Normalization Internal Covariate ...
- 【BN】《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
ICML-2015 在 CIFAR-10 上的小实验可以参考如下博客: [Keras-Inception v2]CIFAR-10 文章目录 1 Background and Motivation 2 ...
- Batch normalization:accelerating deep network training by reducing internal covariate shift的笔记
说实话,这篇paper看了很久,,到现在对里面的一些东西还不是很好的理解. 下面是我的理解,当同行看到的话,留言交流交流啊!!!!! 这篇文章的中心点:围绕着如何降低 internal covari ...
- 批标准化 tf.keras.layers.BatchNormalization 中的trainable参数与training参数比较
巨坑提醒:tf.keras与tensorflow混用,trainable=False根本不起作用.正文不用看了. 摘要: 在tensorflow中,training参数和trainable参数是两个不 ...
- 读文献——《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》
在自己阅读文章之前,通过网上大神的解读先了解了一下这篇文章的大意,英文不够好的惭愧... 大佬的文章在https://blog.csdn.net/happynear/article/details/4 ...
- covariate shift和Internal covariate shift
1.covariate shift 在论文中经常碰到covariate shift这个词,网上相关的中文解释比较少.你可能会在介绍深度学习Batch Normalization方法的论文到中看到cov ...
最新文章
- 大数据-09-Intellij idea 开发java程序操作HDFS
- python数据分析是什么意思_python数据分析有什么用
- MongoDB安装步骤
- php与java安全之争
- 快速排序详解+各种实现方式
- VS编辑代码时使用正则表达式去掉行号
- Java 蓝桥杯 矩阵乘法
- 罗永浩:当年签了 “流氓协议” 将公布这个恶劣投资者
- 2012年开发者该做的11件事
- html 链接 vf,VFP中超链接实现方法
- 如何完成一个深度学习的模型
- Unicode编码在JavaScript中的作用是什么?
- Bulletproofs: Short Proofs for Confidential Transactions and More学习笔记
- 2022.5.6 java标识符
- 微信公众号登录和获得access_token和发送模板消息
- Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
- iconfont 图标转为字体_iconfont图标字体
- AD练习笔记 USB-TTL转换器
- Postgis源码编译
- java socket 域名解析_在java中,使用域名进行socket通讯
热门文章
- ROS☞rosbag/rostopic消息记录、回放、转.txt
- Ubuntu下安装opencv3.2.0,解决anaconda下的Python和安装opencv3.2.0冲突的问题
- ztree 后台异步加载_zTree异步加载实现
- java volatile i_为啥Java里面volatile 修饰的i++还是线程不安全的
- python从0开始学编程第三天第9讲_【原创笔记1】Python从0学起——Starting from 0 learning Python(The First Day)...
- php 编辑器格式输出_高效PHP开发人员的十大PHP开发工具
- mybatis多字段排序_解决mybatis中order by排序无效问题
- matplotlib输出图形到网页_pytorch使用matplotlib和tensorboard实现模型和训练的可视化...
- 还没有女朋友的朋友们,你们有福了,学会CycleGAN把男朋友变成女朋友
- linux源码头文件_您必须在2020年尝试的十大最佳Linux码头