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,将数据统一化
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]。
本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!