1、求一个批次所有激活值的均值
2、求一个批次所有激活值的方差
3、对该批次的激活值进行归一化
4、最后再进行平移和缩放
经过归一化后某个神经元的激活x形成了均值为0,方差为1的正态分布,目的是把值向线性区拉动,增大导数值,增强反向传播信息的流动性,加快训练收敛速度。但是,如此一来会导致网络的表达能力下降,为了防止这一点,每个神经元增加两个可调节参数(scale和shift),这两个参数是通过训练来学习得到的,用来对变换后的激活x做一个反变换,使得网络的表达能力增强,相当于做一个线性和非线性的trade-off。
在推理阶段,我们仅输入一个实例,此时无法算实例集合求出均值和方差。一个方法就是利用从所有的训练实例中所获得的的全局统计量,即均值和方差。训练完成后,模型会存储每个Mini-Batch的均值和方差统计量,我们在推理阶段对这些统计量求相应的数学期望即可获得全局统计量:
算好了全局统计量,每个隐层神经元也已经有相应训练好的Scale和Shift参数,这样我们便可以得到输出y: