CS231n课程笔记5.3:Batch Normalization
2017-02-27 21:12
417 查看
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的数据联系起来(而不是平行的互不相关的数据),使得学得的模型趋于稳定,不至于大幅晃动。
相关文章推荐
- CS231n课程笔记5.3:Batch Normalization
- CS231n课程笔记翻译5:反向传播笔记
- 通俗理解卷积神经网络(cs231n与5月dl班课程笔记)
- CS231n课程笔记翻译(二):图像分类笔记(上)
- CS231n课程笔记翻译:神经网络笔记3
- CS231n课程笔记5.4:超参数的选择&交叉验证
- cs231n课程课件、作业以及课程笔记
- 《深度学习Ng》课程学习笔记02week3——超参数调试、Batch正则化和程序框架
- CS231n课程笔记翻译系列之目录汇总
- CS231n课程笔记翻译:卷积神经网络笔记
- CS231n课程笔记7:卷积神经网络入门
- CS231n课程学习笔记(三)——Softmax分类器的实现
- CS231n课程笔记翻译2:图像分类笔记
- CS231n课程笔记翻译6:神经网络笔记 part1
- CS231n课程笔记翻译(三):图像分类笔记(下)
- CS231n课程笔记翻译:神经网络笔记1(上)
- 《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》阅读笔记与实现
- 通俗理解卷积神经网络(cs231n与5月dl班课程笔记)
- CS231n课程笔记翻译:卷积神经网络笔记
- CS231n课程笔记2.2:线性分类器