Run this notebook online: or Colab:

# 4.7. 正向传播、反向传播和计算图¶

## 4.7.1. 正向传播¶

(4.7.1)$\mathbf{z}= \mathbf{W}^{(1)} \mathbf{x},$

(4.7.2)$\mathbf{h}= \phi (\mathbf{z}).$

(4.7.3)$\mathbf{o}= \mathbf{W}^{(2)} \mathbf{h}.$

(4.7.4)$L = l(\mathbf{o}, y).$

(4.7.5)$s = \frac{\lambda}{2} \left(\|\mathbf{W}^{(1)}\|_F^2 + \|\mathbf{W}^{(2)}\|_F^2\right),$

(4.7.6)$J = L + s.$

.. _fig_forward:

## 4.7.3. 反向传播¶

(4.7.7)$\frac{\partial \mathsf{Z}}{\partial \mathsf{X}} = \text{prod}\left(\frac{\partial \mathsf{Z}}{\partial \mathsf{Y}}, \frac{\partial \mathsf{Y}}{\partial \mathsf{X}}\right).$

(4.7.8)$\frac{\partial J}{\partial L} = 1 \; \text{and} \; \frac{\partial J}{\partial s} = 1.$

(4.7.9)$\frac{\partial J}{\partial \mathbf{o}} = \text{prod}\left(\frac{\partial J}{\partial L}, \frac{\partial L}{\partial \mathbf{o}}\right) = \frac{\partial L}{\partial \mathbf{o}} \in \mathbb{R}^q.$

(4.7.10)$\frac{\partial s}{\partial \mathbf{W}^{(1)}} = \lambda \mathbf{W}^{(1)} \; \text{and} \; \frac{\partial s}{\partial \mathbf{W}^{(2)}} = \lambda \mathbf{W}^{(2)}.$

(4.7.11)$\frac{\partial J}{\partial \mathbf{W}^{(2)}}= \text{prod}\left(\frac{\partial J}{\partial \mathbf{o}}, \frac{\partial \mathbf{o}}{\partial \mathbf{W}^{(2)}}\right) + \text{prod}\left(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \mathbf{W}^{(2)}}\right)= \frac{\partial J}{\partial \mathbf{o}} \mathbf{h}^\top + \lambda \mathbf{W}^{(2)}.$

(4.7.12)$\frac{\partial J}{\partial \mathbf{h}} = \text{prod}\left(\frac{\partial J}{\partial \mathbf{o}}, \frac{\partial \mathbf{o}}{\partial \mathbf{h}}\right) = {\mathbf{W}^{(2)}}^\top \frac{\partial J}{\partial \mathbf{o}}.$

(4.7.13)$\frac{\partial J}{\partial \mathbf{z}} = \text{prod}\left(\frac{\partial J}{\partial \mathbf{h}}, \frac{\partial \mathbf{h}}{\partial \mathbf{z}}\right) = \frac{\partial J}{\partial \mathbf{h}} \odot \phi'\left(\mathbf{z}\right).$

(4.7.14)$\frac{\partial J}{\partial \mathbf{W}^{(1)}} = \text{prod}\left(\frac{\partial J}{\partial \mathbf{z}}, \frac{\partial \mathbf{z}}{\partial \mathbf{W}^{(1)}}\right) + \text{prod}\left(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \mathbf{W}^{(1)}}\right) = \frac{\partial J}{\partial \mathbf{z}} \mathbf{x}^\top + \lambda \mathbf{W}^{(1)}.$

## 4.7.5. 小结¶

• 正向传播在神经网络定义的计算图中按顺序计算和存储中间变量。它的顺序是从输入层到输出层。

• 反向传播按相反的顺序计算和存储神经网络的中间变量和参数的梯度。

• 在训练深度学习模型时，正向传播和反向传播是相互依赖的。

• 训练比预测需要更多的内存（显存）。

## 4.7.6. 练习¶

1. 假设一些标量函数$$\mathbf{X}$$的输入$$\mathbf{X}$$$$n \times m$$矩阵。$$f$$相对于$$\mathbf{X}$$的梯度维数是多少？

2. 向本节中描述的模型的隐藏层添加偏置项（不需要在正则化项中包含偏置项）。

1. 画出相应的计算图。

2. 推导正向和后向传播方程。

3. 计算本节所描述的模型，用于训练和预测的内存占用。

4. 假设你想计算二阶导数。计算图发生了什么？你预计计算需要多长时间？

5. 假设计算图对于你的GPU来说太大了。

1. 你能把它划分到多个GPU上吗？

2. 与小批量训练相比，有哪些优点和缺点？