BN(Batch Normalization)层的详细介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BN(Batch Normalization)层的详细介绍相关的知识,希望对你有一定的参考价值。
参考技术A 没有提出BN层之前,Alexnet网络使用LRN层来处理归一化的。
LRN(局部响应归一化)
LRN现在用的很少了
参考博客: https://www.cnblogs.com/guoyaohua/p/8724433.html
BN的提出是为了解决“Internal Covariate Shift”问题的。
机器学习领域有个很重要的假设:<font color=#FF0000 size=3 face="黑体">IID独立同分布假设</font>,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。
但对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”,Internal指的是深层网络的隐层,是发生在网络内部的事情,而不是covariate shift问题只发生在输入层。
BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。
以上是关于BN(Batch Normalization)层的详细介绍的主要内容,如果未能解决你的问题,请参考以下文章
Pytorch中的Batch Normalization操作