CS231n课程笔记5.3:Batch Normalization

CS231n简介

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

Batch Normalization

1. 原理

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

2. 目的

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

3. 改进

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

4. 优点

  1. 优化了梯度流动
  2. 允许高learning rate
  3. 减少了对于权重初始化&数据预处理的强依赖
  4. 某种程度的正则化:BN把整个Batch的数据联系起来(而不是平行的互不相关的数据),使得学得的模型趋于稳定,不至于大幅晃动
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值