本文主要是介绍Batch Normalization论文解读与Inception V2代码简析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
-
论文阅读
-
代码简析
-
小结
论文阅读
Inception V2是Inception家族的一个中间件产物,在论文Rethinking the Inception Architecture for Computer Vision中提到了Inception V2的概念,但是google的代码实现却是命名为Inception V3。从google实现的Inception V2源码可以看出V2的改进主要是以下两点:
- 使用了Batch Normalization,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- 用两个3x3Convolution替代一个5x5Convolution,Rethinking the Inception Architecture for Computer Vision
此文论文阅读只会学习一下Batch Normalization这篇论文,Rethinking the Inception Architecture for Computer Vision这篇论文在学习Inception V3的网络的时候再仔细阅读。
1.前言
训练深度神经网络的时候每一层的输入会随着训练发生变化,因为前一层参数的变化会引起这一层输入的分布发生变化,作者把这种现象叫做internal covariate shift。这种现象会导致我们需要设置更小的learning rate,需要很小心设置参数的初始值,否则网络可能训练变慢难以收敛。作者提出了一种batch normalization的方式来解决这个问题。试验下来如果使用BN只需1/14的训练次数可以达到同样的精确度,并且可以让我们在ImageNet Classification的TOP5 error达到4.9%。
2.BN介绍
如果训练集和测试集的分布不同,即样本之间存在covariate shift,这种情况会影响训练的精度。而internal covariate shift是指数据通过一层一层网络传播的过程中,由于参数的变化,而引起激活值分布发生变化。而且如果网络非常深,每一层的激活值可能越来越分散,如果用sigmoid激活函数,越来越大的x值可能导致导数接近0,这就是梯度消失的原因,梯度消失会导致训练越来越缓慢而难以收敛。而使用Relu激活并且合适的参数初始化和较小的学习率可以改善这个现象,但是数据仍有发散的可能性。
作者提出的batch normolization,可以缓解Internal Covariate Shift,加速深度神经网络的训练速度。使用BN后可以允许使用更高的学习率,而不会有发散的风险,BN也有轻微正则化模型的效果。并且使用BN后即使是用sigmoid激活函数,也不会有梯度消失的现象。
这篇关于Batch Normalization论文解读与Inception V2代码简析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!