CS231n课程笔记5.3:Batch Normalization

CS231n简介

详见 CS231n课程笔记1:Introduction。
注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。

Batch Normalization

1. 原理

BN(Batch Normalization)的原理很简单,就是对于给定输入做一个减均值除方差的归一化(可以这么做的原因是上诉归一化操作可导,即可以做BP(反向传播))。当然这么做的优劣难于判断,所以后文给出了改进的BN(实际使用的BN)。
注:训练过程中使用每个Batch的均值和方差做归一化,预测过程中则通过训练数据进行估算(例如可以是训练过程中均值和方差的平均值)。
CS231n课程笔记5.3:Batch Normalization_第1张图片

2. 目的

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

3. 改进

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

4. 优点

  1. 优化了梯度流动
  2. 允许高learning rate
  3. 减少了对于权重初始化&数据预处理的强依赖
  4. 某种程度的正则化:BN把整个Batch的数据联系起来(而不是平行的互不相关的数据),使得学得的模型趋于稳定,不至于大幅晃动

你可能感兴趣的:(cs231n,BatchNorm,神经网络,CS231n课程笔记)