3.4-3.7小节讲述batch normalization这个方法,包括其思想,使用方法,为什么奏效即测试时作法。
3.4 思想:对神经网络每一层标准化(normalizing activations in a network)
先前在1.9 标准化输入我们已经讲过标准化输入层是如何提高模型训练速度的,尤其在特征取值差别大时。而batch normalization的思想是希望对每一层节点都作标准化处理以提高模型训练速度。这里有两种思想,很多读者在不少文献中讨论过是直接对做标准化处理还是对做标准化处理好,没有定论,老师在这里直接使用了对Z做处理,并默认在使用激活函数之前处理节点。
简单介绍完batch norm的思想,接下来就是应用batch norm,如下图所示:
通常batch norm方法是和mini-batch梯度下降结合在一起使用的。
首先是假设我们已经得到了第L层的节点值,是一个向量。然后我们对其作标准化处理,如上图所示,m在这里是mini-batch大小,分母的是为了保证分式有意义。做完标准化处理后,中每一个节点分布就变为均值为0,方差为1的分布。但实际中,并不一定每一个节点都服从均值为0,方差为1的分布,我们希望他们有所区别,不然也不能充分利用激活函数作用,如上图所示,假设我们使用的激活函数是sigmoid,均值为0,方差为1的分布使数据大多数集中于中间部分,相当于只利用了sigmoid的线性部分函数。
为了使不同节点服从不同分布,batch norm的处理思想是在将节点标准化处理之后,再通过改变节点的均值和方差,且和和W的调参过程一样。我们知道,若取,就可以将还原为。