深度学习网络篇——Inception v2

1. Abstract&Instruction

IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这保障了通过训练数据获得的模型能够在测试集获得好的效果及其泛化能力。

神经网络学习过程本质就是为了学习数据分布。

背景描述:在训练的过程中,随着参数的不断更新,一方面,当底层网络中参数发生微弱变化时,由于每一层中的线性变换与非线性激活映射,这些微弱变化随着网络层数的加深而被放大;另一方面,参数的变化导致每一层的输入分布会发生改变,进而上层的网络需要不停地去适应这些分布变化,使得我们的模型训练变得困难。
Internal Covariate Shift:在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift。
Internal Covariate Shift 所引发的问题:
(1)上层网络需要不停调整来适应输入数据分布的变化,导致网络学习速度的降低。
(2)网络的训练过程容易陷入梯度饱和(saturated)区,导致我们需要较低的学习率及仔细地选择参数的初始化( requiring lower learning rates and careful parameter initialization),使得网络收敛速度减缓。
在这里插入图片描述

2. 减缓Internal Covariate Shift

白化(Whitening):是机器学习里面常用的一种规范化数据分布的方法,主要是PCA白化与ZCA白化。白化是对输入数据分布进行变换,进而达到以下两个目的:
(1)使得输入特征分布具有相同的均值与方差。其中PCA白化保证了所有特征分布均值为0,方差为1;而ZCA白化则保证了所有特征分布均值为0,方差相同;
(2)去除特征之间的相关性。
然而,将whitening应用到深度卷积网络中会引发的两个问题:
(1)白化过程计算成本太高,并且在每一轮训练中的每一层我们都需要做如此高成本计算的白化操作。
(2)白化过程由于改变了网络每一层的分布,因而改变了网络层中本身数据的表达能力。底层网络学习到的参数信息会被白化操作丢失掉。
因此,为了解决上述两点问题,我们需要对原先的whitening操作进行改进。首先我们要简化whitening的计算过程。其次,我们要确保经过规范化处理后的数据尽可能保留原始的表达能力。(input normalization in a way that is differentiable and does not require the analysis of the entire training set after every parameter update.)

3. 通过Mini-Batch统计进行标准化

首先,我们忽略whitening中去相关的操作,对于具有d维输入x=(x(1)…x(d))的层,我们对每一维的x进行标准化:
在这里插入图片描述
在这里插入图片描述
此时,相当于将输入约束到了非线性激活函数(sigmoid、tanh)的线性部分。但是我们也忽略了非线性较强的表达能力。因为我们知道多层的线性函数的叠加其实是没有意义的。因此,我们需要引入scale和shift两个操作,近而找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢。
在这里插入图片描述
文中,此处的解释是:Normalization操作我们虽然缓解了ICS问题,让每一层网络的输入数据分布都变得稳定,但却导致了数据表达能力的缺失。也就是我们通过scale和shift两个操作恢复了原有数据的信息表达。
下图为BN层的操作:(其中为了简洁,忽略了 x ( k ) x^{(k)} 的上标k)
在这里插入图片描述
下面是BN层梯度的计算过程:
在这里插入图片描述

3.1 BN网络的训练和预测

我们知道BN在每一层计算的 μ \mu σ 2 \sigma^2 都是基于当前batch中的训练数据,但是这就带来了一个问题:我们在预测阶段,有可能只需要预测一个样本或很少的样本,没有像训练样本中那么多的数据,此时 μ \mu σ 2 \sigma^2 的计算一定是有偏估计,这个时候我们该如何计算?
我们保留了每组mini-batch训练数据在网络中每一层的 μ b a t c h \mu_{batch} σ b a t c h 2 \sigma^2_{batch} 。此时我们使用整个样本的统计量来对Test数据进行归一化,具体来说使用均值与方差的无偏估计:
在这里插入图片描述
(数学上无偏估计的解释及推到见这里:https://www.cnblogs.com/notwice/p/8538539.html)
得到每个特征的均值与方差的无偏估计后,我们对test数据采用同样的normalization方法:
在这里插入图片描述
在这里插入图片描述

3.2 CNN的批标准化

(1)以 z = g ( B N ( W u ) ) z = g(BN(Wu)) 代替 z = g ( W u + b ) z = g(Wu+b) ,因为偏置的作用会归入到算法1的β。
(2)我们也可以标准化层输入u(这一层的input),但由于u可能是另一个非线性的输出(标准化激活函数的输出值时同理),它的分布形状可能在训练过程中改变,并且限制其第一矩或第二矩不能去除协变量转移。相比之下,Wu+b更可能具有对称,更加非稀疏(dense)分布,即“更高斯”(Hyvärinen&Oja,2000);对其标准化可能产生具有稳定分布的激活。
(3)BN变换独立地应用到x=Wu的每一维,每一维具有单独的成对学习参数γ(k),β(k)。图像任务(原文CNN model)中,对于每一层的输入x[batch_size, height, width, channel], 我们计算每一个channel的均值、方差,以此来学习参数γ(k),β(k)。

3.3 Batch Normalization可以提高学习率

学习率过高可能会导致参数更新步伐过大,容易出现震荡和不收敛。
学习率过高可能会导致梯度爆炸或梯度消失,以及陷入差的局部最小值。

批标准化有助于解决这些问题。我们对参数 w进行缩放得到 aw。对于缩放前的值wu,我们设其均值为 μ 1 \mu_1 ,方差为 σ 1 2 \sigma^2_1 ;对于缩放值awu,设其均值为 μ 1 \mu_1 ,方差为 σ 2 2 \sigma^2_2 ,则我们有:
在这里插入图片描述
结合上述推到可得:
在这里插入图片描述
可以看到,前向传递的过程中,权重的缩放在经过BN层操作以后,不会引起任何改变。因此保证了输入数据分布稳定在一定范围内,减少ICS。
另外,反向传递时,权重的缩放与梯度的缩放成反比。也就是说,当我们选择大学习率时,权重w更新的幅度反而更小,使得参数的更新处在更加稳定的状态。这可能导致准确率跟训练速度都有提升。
我们进一步推测,批标准化可能会导致雅可比行列式的奇异值接近于1,这被认为对模型的训练是有利的(Saxe et al., 2013)。

4. 实验部分

4.1 Batch Normalization的优点(对BN网络的改进)

A. 增大学习速率
同3.3
B. 移除Dropout
在Batch Normalization中,由于我们使用mini-batch的均值与方差作为对整体训练样本 均值与方差的估计,这就为网络的学习过程中增加了随机噪音。这与Dropout通过关闭 神经元给网络训练带来噪音类似,在一定程度上对模型起到了正则化的效果。
C. 减小L2正则化参数
本质原因,BN网络通过Normalization来减小模型一定的表达能力。进而避免过拟合。 因此一定程度上可以一处Dropout以及减小L2正则化参数。
D. 增大学习速率衰减
BN层可以导致模型快速收敛,因此可以加大学习速率衰减。
E. 移除LRN
F. 更彻底的shuffle

防止某一个样本点被多个mini-batch反复提取。
G. 减少光度畸变
BN有效地防止过拟合,因此可以一定程度地减小数据扩增的数量。

4.2 实验部分

4.2.1 BN与非BN网络的比较。

利用MNIST数据集,进行手写数字体识别任务的训练及测试。输入图像为28*28 的全连接神经网络。三个隐藏层,每层100个神经元,output层(10个神经元)batch-size为60。训练经过50000次得到下图(a):
在这里插入图片描述
【上图解读】(a)可以看到带有BN层的神经网络快速达到收敛。(b)(c)最后一层15%,50%,85%三个数据分段,有BN的数据分布比没有BN的数据分布更加稳定。

4.2.2 ImageNet 分类任务

在这里插入图片描述
在这里插入图片描述
【上图解读】
Inception 为GoogleNet,初始学习速率为0.0015
BN-Baseline 为引入BN层的GoogleNet
BN-x5 是在BN-Baseline的基础上,根据4.1中提到的改进策略,并将初始学习速率增大为原来的5倍,即0.0075
BN-x30 与BN-x5类似,只是将初始学习速率增大为原来的30倍,即0.045
BN-x5-sigmoid 是在BN-x5的基础上将激活函数改为sigmoid。
可以看到,BN-x5的训练速度相比于GoogleNet快了14倍

4.2.3 BN-Inception的组合网络,达到了超越了人类专家评估的准确率。

在这里插入图片描述

最后的最后,Inception v2和Inception v3是一个比较难的文章,所以分享的我们也有些不知所措,但也算是在前辈的基础上摸索过河,下一篇是Inception v3,下周是我们的ResNet哦~我们下周见,嘻嘻嘻!

猜你喜欢

转载自blog.csdn.net/weixin_43624538/article/details/84980312