吴恩达深度学习笔记(十二)—— Batch Normalization
主要内容:
一、Normalizing activations in a network
二、Fitting Batch Norm in a neural network
三、Why does Batch Norm work?
四、Batch Norm at test time
一、Normalizing activations in a network
1、在浅层机器学习算法中,如logistics regression,我们通常使用normalization来加速梯度下降。那么同样,我们也可以把normalization运用于神经网络。
2.在神经网络中,不仅有X作为最初的输入,还有当前层的激活值a[l]作为下一层的输入。因此,我们不仅仅对输入层做特征归一化处理,同样需要对隐藏层做归一化处理。
3、在Batch Norm中,一般是对输入激活函数之前的z做归一化处理,而不是激活值a。 其步骤如下:
可以看出,前三步与浅层机器学习算法的normalization无异,只是多了第四步。而第四步的作用就是将归一化的z再做一下缩放和平移(线性变换),因为有时候可能不希望隐藏层的z的均值和方差总是等于0和1。如在激活函数sigmod中,我们不希望输入值z的均值和方差为0和1,使得sigmod被利用的仅仅为线性部分:
二、Fitting Batch Norm in a neural network
1、将Batch Norm运用于整个神经网络,其步骤如下:
2、需要学习的参数有:
3、在实际中,Batch Norm通常和mini-batch gradient descent一起使用:
注意:z[t]经过归一化后其均值为0,而z[t] = w[t-1]a[t-1]+b[t],所以b[t]实际是无意义的,它其实就是一个偏移值,而归一化后就去掉了偏移值。所以在这里可以不考虑b[t]。
三、Why does Batch Norm work?
1、通过特征归一化,使得输入值的均值和方差变成0和一,这样能加速梯度下降。
2、解决了covariate shift的问题。covariate shift的大概意思就是:当输入值的分布情况发生了变化,那么原先学习到的算法将不再适用于新的输入。比如对于神经网络的第t层,他们的输入 值的分布情况取决于前面层的参数,而这些参数在学习过程中是不断变化的,因此第t层的输入值的分布也是不断变化了,那么学习将变得无效。而引入batch norm后,每一层输入的分布变得稳定了,那就是N(0,1)再经过线性调整,因此学习变得有效了。
四、Batch Norm at test time
1、在测试时,同样需要对输入进行batch norm。根据batch norm的式子,我们需要计算均值和方差,但是计算测试数据的均值和方差是不合适的,比如当测试数据个数为1时,均值和方差变得无意义的。
2、测试数据的均值和方差,通常是在mini-batch gradient descent的时候通过指数加权平均求得。