在介绍BN之前,我们首先要知道一个很重要的前提:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的
BN的作用?
BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
BN的启发来源
之前的研究表明如果在图像处理中对输入图像进行白化【就是对输入数据分布变换到0均值,单位方差的正态分布】操作的话,神经网络会较快收敛。那么BN作者就开始推论:图像是深度神经网络的输入层,做白化能加快收敛,那么其实对于深度神经网络来说,深度神经网络的每一个隐层都是输入层,不过是相对下一层来说而已,那么能不能对每个隐层都做白化呢?所以BN可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作。
训练阶段如何做BatchNorm
对于Mini-Batch SGD来说,一次训练过程里面包含m个训练实例,其具体BN操作就是对于隐层内每个神经元的激活值来说,进行如下变换,计算公式如下:
变换的意思是:某个神经元对应的原始的激活x通过减去mini-Batch内m个实例获得的m个激活x求得的均值E(x)并除以求得的方差Var(x)来进行转换。
上文说过**经过这个变换后某个神经元的激活x形成了均值为0,方差为1的正态分布,目的是把值往后续要进行的非线性变换的线性区拉动,增大导数值,增强反向传播信息流动性,加快训练收敛速度。**但是这样会导致网络表达能力下降,为了防止这一点,每个神经元增加两个调节参数(scale和shift),这两个参数是通过训练来学习到的,用来对变换后的激活反变换,使得网络表达能力增强,即对变换后的激活进行如下的scale和shift操作,这其实是变换的反操作:
BN的计算工程: