# 3.5 将 Batch Norm 拟合进神经网络（Fitting Batch Norm into a neural network）

前向传播的计算流程：

![](https://2314428465-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le0cHhI0S0DK8pwlrmD%2F-Le0cKOp1vaxoORIi4ak%2F-Le0ceHuKcfTIKiPZevx%2F275import.png?generation=1556953088004675\&alt=media)

**实现梯度下降：**

for t = 1 … num （这里num 为Mini Batch 的数量）：

* 在每一个$$X^t$$ 上进行前向传播（forward prop）的计算：
  * 在每个隐藏层都用 Batch Norm 将$$z^{\[l]}$$替换为![](https://2314428465-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le0cHhI0S0DK8pwlrmD%2F-Le0cKOp1vaxoORIi4ak%2F-Le0ceHwmNo7zFgIMs0l%2F%C2%B71import.png?generation=1556953085141074\&alt=media)
* 使用反向传播（Back prop）计算各个参数的梯度：$$dw^{\[l]},d\gamma^{\[l]},d\beta^{\[l]}$$
* 更新参数：
  * $$w^{\[l]}:=w^{\[l]}-\alpha dw^{\[l]}$$
  * $$\gamma^{\[l]}:=\gamma^{\[l]}-\alpha d\gamma^{\[l]}$$
  * $$\beta^{\[l]}:=\beta^{\[l]}-\alpha d\beta^{\[l]}$$

经过Batch Norm的作用，整体流程如下：

![](https://2314428465-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le0cHhI0S0DK8pwlrmD%2F-Le0cKOp1vaxoORIi4ak%2F-Le0ceHySsKG72pGnlva%2F276import.png?generation=1556953082747884\&alt=media)

Batch Norm对各隐藏层$$Z^{\[l]}=W^{\[l]}A^{\[l-1]}+b^{\[l]}$$有去均值的操作，Batch Norm 要做的就是将$$z^{\[l]}$$归一化，结果成为均值为0，标准差为1的分布，再由$$\beta$$ 和$$\gamma$$ 进行重新的分布缩放，意味着无论$$b^{\[l]}$$ 值为多少，在这个过程中都会被减去，不会再起作用。所以常数项$$b^{\[l]}$$可以消去，其数值效果完全可以由![](https://2314428465-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le0cHhI0S0DK8pwlrmD%2F-Le0cKOp1vaxoORIi4ak%2F-Le0ceI-5pwqqfYSu8Ad%2F1%C2%B7import.png?generation=1556953126025631\&alt=media)中的$$\beta$$来实现。在使用Batch Norm的时候，可以忽略各隐藏层的常数项$$b^{\[l]}$$。在使用梯度下降算法时，分别对$$W^{\[l]}$$,$$\beta^{\[l]}$$和$$\gamma^{\[l]}$$进行迭代更新

除了传统的梯度下降算法之外，还可以使用动量梯度下降、RMSprop或者Adam等优化算法
