pytorch基础知识-Batch Norm(上)

2019-11-23 08:39:50 浏览数 (1)

Batch Normalization(批量标准化)是深度学习中经常使用的,本节介绍它的定义和用法。

首先在sigmoid函数中,

在x轴达到>4和<-4区间后,便会达到一个很大的空间,其导数会接近于零,使得loss一直得不到更新,发生梯度离散现象。因此ReLU使用的较多。

但在某些场合不可避免的要去使用Sigmoid函数,希望将有效的值控制在有限区间内。因此即将Avtivation inputs值在导入到Sigmoid函数前,先进行一个等效的变换,使这些值均匀的分布在0到正负1附近,这样在进行后续优化时会更加的方便。

为更好的进行理解,可看下图演示

如上左侧图可见,(1、2...)的输入和(100、200...)的输入会对后续函数求导过程造成极大的波动和更多的曲折变换。而上右侧图的求导Loss的过程则会变换的较平缓。

到这里可体会到Batch Norm本质上为权值缩放,将输入的数据的大小集中到(0,1)附近,以便于后续求导。

Batch Norm较多的应用于两个方面:(1)Image Normalization;如对RGB三通道进行Normalization,将数据统一化

代码语言:javascript复制
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],                                 std=[0.229, 0.224, 0.225])# 后人在大量的研究中发现,对于RGB通道,他们的三个均值更适宜于采用上述取值# 他们总体上仍在0.5附近左右# 同时在大量实践中得到了最稳定的方差值# 因此R通道为:(XR - 0.485)/0.229, (XG - 0.456)/0.224....

另外一个更广泛的应用是在 Batch Normalization。

Batch Normalization现在有四种用法,

假设一个数据集写为[batch, channel, height, width],这里为更好的理解,取为6张图片、3个通道、28*28的大小。变为[6, 3, 784]。

在上图的最左侧图,将6和784进行normalize,变为channel_0的均值 channel_1的均值 channel_3的均值...。将[6, 3, 784]变为[3],即shape为3的统计数据,意为当前的batch为3(3个channel),将原来的batch和feature上的维度消掉。

同理,后续的Layer Norm将[6, 3, 784]变为[6]。

0 人点赞