最好的学习方法就是把内容给其他人讲明白。
如果你看了我的文章感觉一头雾水,那是因为我还没学透。
BatchNormal的有效性、重要性就无需多言,起码是残差神经网络(ResNet)至关重要的一层,没有BatchNormal层,别说上千层的网络,就算几十层应该也很困难吧。
BatchNormal的前向传播如图:
一个数据集有m个数据组成:
,输出为
。
整个过程需要学习的量只有两个:
.
只是为了防止分母为零取得一个正的小数,可以不用学习,不过后面还是给出了它的导数公式,可以试验参与学习的效果。
前两个量的反向传播很简单:
(1)
(2)
由于是讨论反向传播,所以
是从上一层传下来的已知量,这里的C表示代价函数Coss(或者叫损失函数Loss)。
麻烦的地方在于计算X的梯度,要把这一层的梯度向回传播,所以需要计算
:
(3)