Batch Normalization

本文链接:https://arxiv.org/abs/1502.03167

简介

在深度神经网络训练的过程中,当前面层的参数发生变化时,会导致后面层输入数据的分布变化,进而影响训练效果,使网络的训练变得复杂。本文提出了一种Batch Normalization方法解决这个问题,该方法可以使用较大的学习率进行学习,同时可以忽略掉dropout的作用,提高模型收敛速度,提高识别率。

Introduction

1、mini-batch进行SGD的好处

  • 小批量数据计算而来的损失函数梯度是对整个训练数据集的损失函数梯度的估计。
  • 高效。

2、保证每层输入数据的分布不变,有利于网络的训练。
3、Internal Covariate Shift问题

  • 什么是Internal Covariate Shift问题:在神经网络的训练过程中,由于参数改变,而引起的神经网络激活值分布的改变。
  • 虽然随机梯度是简单有效的,但它需要仔细调整模型的超参数,特别是优化中使用的学习速率以及模型参数的初始值。训练的复杂性在于每层的输入受到前面所有层的参数的影响——因此当网络变得更深时,网络参数的微小变化就会被放大。

Towards Reducing Internal Covariate Shift

  • 通过对每一层的输入进行白化处理可以一定程度消除Internal Covariate Shift现象。

  • 如果归一化参数不在梯度下降中计算的话,会使模型参数膨胀(论文中有例子)。

  • 对输入进行归一化操作,不仅考虑到当前值,同时考虑到整个样本
    这里写图片描述

该归一化操作不仅考虑了 x ,同时还考虑了所有的训练样本 χ 。如果 x 是由其他层产生的,那么 χ 中的所有样例都依赖于 θ 。对于反向传播算法,我们就需要计算

这里写图片描述

计算白化代价比较昂贵,需要计算协方差,还需求导等。

Normalization via Mini-Batch Statistics

由于白化操作代价昂贵,本文方法改进

  • 对标量特征进行单独的进行零均值一方差归一化,来代替白化同时对层的输入和输出同时进行归一化,归一化方式如下:
    这里写图片描述
  • 简单的归一化神经网络层的输入,可能会改变该层的表征能力。因此本文方法对每一个激活值 x (k) 都引入一对参数 γ (k) 和 β (k) ,这两个参数能够缩放和平移归一化后的输入,公式如下:
    这里写图片描述
    这两个参数与模型原始的参数一起学习,并恢复了模型的表征能力。当这里写图片描述就能够求得原来的激活值。
  • 在随机梯度下降中我们采用mini-batch的方式,这样我们就能够通过每个mini-batch为每个激活值计算出对应的均值和方差。通过这样的方式,归一化所需统计信息就能够完全被考虑到梯度下降中去。

BN算法描述如下:
Batch Normalization_第1张图片

反向传播,链式法则求导:

Batch Normalization_第2张图片

Training and Inference with Batch-Normalized Networks

方法详述如下:

Batch Normalization_第3张图片

Batch-Normalized Convolutional Networks

  • BN 可以用于任意层的 activations,把 BN 加在 W u +b 之后,非线性激活函数之前更好!
  • b 可以不管,因为减均值时 b 会被消掉,b 的作用其实被 β 代替了,所以,BN是对 x =W u 的每一维单独规范化。
  • 对卷积层,规范化也该保持卷积特性,即 相同feature map,不同location的元素 用相同方式规范化。

Batch Normalization enables higher learning rates

  • 太大的学习率可能导致 梯度爆炸或消失以及卡在局部极值,BN可以防止参数小变换被逐层放大,通过修改 γ、β可以优化 activations的变化。
  • 使用BN后,训练时对于单个样本与整个minibatch综合考虑了,这有利于提升网络的泛化能力,可以代替 Dropout。

实验部分

Activations over time

作者在MNIST数据集上进行实验,以验证BN对于训练的影响,实验结果如下图所示:
图(a)显示了随着训练进行,两个网络在提供的测试数据上正确预测的分数。实验证明批标准化网络具有更高的测试准确率,并且收敛更快。为了调查原因,作者在训练过程中研究了原始网络N和批标准化网络中的sigmoid输入。在图(b,c)显示每个网络的最后一个隐藏层的分布变化,可以发现加入BN层后的网络更加稳定。
Batch Normalization_第4张图片

ImageNet classification

accelerating BN networks

将批标准化简单添加到网络中不能充分利用我们方法的优势。为此,我们进行了以下修改:

  • 提高学习率。
  • 去掉dropout。
  • 打乱训练样本。
  • 降低L2正则化参数。
  • 加速学习率的衰减。
  • 删除LRN层。
  • 减少图像变换。
分类结果

作者在LSVRC2012进行测试,测试结果如下,实验结果表明,加入BN层可以有效提高收敛速度,提高分类精度。同时提高学习率在一定程度上提高了分类精度。

Batch Normalization_第5张图片

Batch Normalization_第6张图片

组合分类结果如下:

本文使用6个网络,基于BN-x30,使用Dropout(丢弃概率为5%或10%)。结果如下:

Batch Normalization_第7张图片

参考博客:http://blog.csdn.net/linmingan/article/details/50780761

你可能感兴趣的:(图像分类,深度学习)