您的位置:首页 > 其它

CS231n课程笔记5.3:Batch Normalization

2017-11-02 13:57 176 查看

转自:http://blog.csdn.net/zzq060143/article/details/78424186

CS231n简介

详见
CS231n课程笔记1:Introduction。

注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。

Batch Normalization

1. 原理

BN(Batch Normalization)的原理很简单,就是对于给定输入做一个减均值除方差的归一化(可以这么做的原因是上诉归一化操作可导,即可以做BP(反向传播))。当然这么做的优劣难于判断,所以后文给出了改进的BN(实际使用的BN)。

注:训练过程中使用每个Batch的均值和方差做归一化,预测过程中则通过训练数据进行估算(例如可以是训练过程中均值和方差的平均值)。



2. 目的

BN的目的是使得下一层神经网络(通常是非线性的激活函数)的输入是在合理范围内的(接近于均值为0方差为1的正态分布),和数据预处理&合理初始化权重矩阵的目的相同(详见CS231n课程笔记5.2:数据预处理&权重矩阵初始化)。简单地讲,方差过小,则数据均接近于0,W难于更新;方差过大,则数据均饱和,导数为0,梯度难于传播;如果均值过大或过小,都会使得数据位于饱和区,导数为0,梯度难于传播(local
gradient为权重×导数)。



3. 改进

上文的归一化版本的BN有一个假设是非线性函数(如tanh)期待有一个标准正态分布的输入。这一假设是否成立有待商榷,所以有了改进版本的BN。即引入两个参数(不是超参数):均值和方差,使得BN可以输出任意均值方差的数据(这个均值和方差都是通过学习得到的)。特别的,如果学得的输出所应该具有的均值和方差都等同于输入,那么BN实际上输入输出相同,数据流的数据没有发生变化(从理论上说明加入BN不会使得结果变差)。详情请参考CS231n作业笔记2.4:Batchnorm的实现与使用



4. 优点

优化了梯度流动
允许高learning rate
减少了对于权重初始化&数据预处理的强依赖
某种程度的正则化:BN把整个Batch的数据联系起来(而不是平行的互不相关的数据),使得学得的模型趋于稳定,不至于大幅晃动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cs231 深度学习