博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Batch Normalization
阅读量:5094 次
发布时间:2019-06-13

本文共 842 字,大约阅读时间需要 2 分钟。

作用

(1)加速收敛:我们在做数据预处理时一般会对输入数据做归一化,但是归一化的数据前向传播过程中分布会发生改变变得不再是归一化的数据,bn的作 用就是把这个改变的分布重新拉回来变成归一化数据。

(2)减少少梯度消失:由于我们在训练神经网络时采用的是小批量梯度下降法,BN在当前层会对这批数据通过激活函数前的输出作归一化,归一化后的数据接近正太分布,大部分数据都分布0附近,而一般激活函数的输入在0附近有比较大的梯度(所以BN一般放在激活函数前)。

(3)降低过拟合:由于BN对这小批量的数据作了归一化,所以一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本,可以降低异常样本的干扰。

 

原理

原理:(在反向传播的过程中乘了上一层的输出,当每层的输出都小于1时就会造成梯度消失,大于1时会造成梯度爆炸)BN对每一层的输出都做了标准化使得原本会减小的activationscale变大。

在训练中,BN的使用使得一个mini-batch中的所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。这句话什么意思呢?意思就是同样一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本。同一个样本跟不同的样本组成一个mini-batch,它们的输出是不同的(仅限于训练阶段,在inference阶段是没有这种情况的)。我把这个理解成一种数据增强:同样一个样本在超平面上被拉扯,每次拉扯的方向的大小均有不同。不同于数据增强的是,这种拉扯是贯穿数据流过神经网络的整个过程的,意味着神经网络每一层的输入都被数据增强处理了。

在测试阶段的均值和方差采用训练阶段所有batch的均值和方差的均值。

BN中线性层的作用:使BN既能改变样本的分布,又能保持分布不变,增加了模型的容量。

 

参考博客

 

转载于:https://www.cnblogs.com/xumaomao/p/11079590.html

你可能感兴趣的文章
闭包问题
查看>>
C#一个FTP操作封装类FTPHelper
查看>>
Linux运维基础入门(二):网络基础知识梳理02
查看>>
你所不知道的 CSS 阴影技巧与细节
查看>>
MyBatis框架的使用及源码分析(三) 配置篇 Configuration
查看>>
20172319 实验三《查找与排序》实验报告
查看>>
构造函数的继承
查看>>
Nginx的虚拟主机配置
查看>>
overflow 属性
查看>>
Java中多态的一些简单理解
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
[最小割][Kruskal] Luogu P5039 最小生成树
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
Javascript的调试利器:Firebug使用详解
查看>>
(转)Android之发送短信的两种方式
查看>>
使用vue脚手架搭建项目
查看>>
Java基础之ArrayList与LinkedList、Vector,以及HashMap与HashTable的区别
查看>>
网络爬虫初步:从一个入口链接开始不断抓取页面中的网址并入库
查看>>
iOS archive(归档)的总结 (序列化和反序列化,持久化到文件)
查看>>