[深度学习] Batch Normalization算法介绍

本文介绍了深度学习中的Batch Normalization(BN)算法,旨在解决随着网络深度增加导致的训练困难问题。BN通过归一化每一层的输入,保持数据分布稳定,加速训练过程并提高模型性能。在训练时,BN利用mini-batch计算均值和方差;在测试时,使用固定参数进行归一化。在CNN中,BN通常置于卷积层后、ReLU激活函数前。Caffe中的BN层由BatchNorm和Scale层组成,可根据use_global_stats参数区分训练和测试模式。
摘要由CSDN通过智能技术生成

很早就打算写这篇博客了,最近遇到的问题比较多,所以拖了又拖,今天问题似乎解决了,等着程序运行的时候再来回顾一下Batch Normalization算法。
Batch Normalization是2015年Google研究员在论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》一文中提出的,同时也将BN应用到了2014年的GoogLeNet上,也就是Inception-v2。
BN算法在很大程度上加速了训练过程,放宽了网络初始化的条件,论文中还提出有了BN可以在不使用Dropout,同时也可以在一定程度上提升网络的识别效果,在之后的ResNet等等新网络中有广泛的应用。
下面我们来详细的看一下BN算法。

1. 要解决的问题

自从2012年以来,CNN网络模型取得了非常大的进步,而这些进步的推动条件往往就是模型深度的增加。从AlexNet的几层,到VGG和GoogleNet的十几层,甚至到ResNet的上百层,网络模型不断加深,取得的效果也越来越好,然而网络越深往往就越难以训练。我们知道,CNN网络在训练的过程中,前一层的参数变化影响着后面层的变化(因为前面层的输出是后面的输入),而且这种影响会随着网络深度的增加而不断放大。在CNN训练时,绝大多数都采用mini-batch使用随机梯度下降算法进行训练,那么随着输入数据的不断变化,以及网络中参数不断调整,网络的各层输入数据的分布则会不断变化,那么各层在训练的过程中就需要不断的改变以适应这种新的数据分布,从而造成网络训练困难,难以拟合的问题。
(可以这样想,比如网络中每一层都是一个人,今天前面一层的人说要你往左走3,明天有让你往左走2,第三天又让你往右走5,结果三天下来,你还在原地,这样就让你的进度变慢了。PS:我是这样理解的,如有问题,请指出)
BN算法解决的就是这样的问题,他通过对每一层的输入进行归一化,保证每层的输入数据分布是稳定的,从而达到加速训练的目的。

2. BN算法流程

BN算法的理论推导我这里就不多说了(原因是理解的不透彻= =),这里只讲一下算法的流程。
首先,BN算法在每一次iteration中的每一层输入都进行了归一化,将输入数据的分布归一化为均值为0,方差为1的分布,如下式:

x^(k)=xkE[xk]Var[xk]
  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值