Batch Norm即批规范化,目的是为了解决每批数据训练时的不规则分布给训练造成的困难。
作用:
网上描述:深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果,但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。经过一层层网络计算后,数据分布在不断发生着变化,此现象称为Internal Covariate Shift,进行BN能够解决这一问题。除此之外,对批数据进行规范化,还可以在梯度反传时,解决梯度消失的问题。
BN主要应用在遇收敛太慢、梯度爆炸、梯度消失等问题,这些情况下都可以尝试用BN解决。
个人理解:数据的不均匀分布会带来学习率的问题,若学习率仍定义的较大,由于输入数据分布的不均匀,往往会造成较大误差或拟合较慢(曲折下降),但学习率降低则降低了拟合的速度,而对输入数据进行规范化使其满足一定的分布就是用来解决这样的问题。
BN的操作:
首先明白BN按照其字面意思,其规范化的对象是单批数据,这也符合上面提到要解决的问题。
分别求取当批数据的均值和方差并进行归一化(按公式化为正态分布)
最重要的体现在最后一步:引入了缩变和平移变量,这是因为:如果仅进行过归一化,那么每批数据都是标准的正态分布,那么每层输入的数据(特征)就被完全归一化消失了。因此通过加入缩变和平移变量,它们是能够通过训练学习到的参数,能够保持输入数据的一些特征,同时又能很好的完成加速训练的任务。
总结:Batchnorm也是一种正则的方式,可以代替其他正则方式如dropout,但通过这样的正则化,也消融了数据之间的许多差异信息,因此,并不能说BN一定适用于任何任务。
思考:关于网上提到的BN能够增加泛化能力,彻底代替不需要使用Dropout和L2正则项的问题笔者作为初学者理解不深,除此之外还有其他增加泛化能力的措施的对比,后续会找一些资料来学习,这里埋一个坑。
相关文章: