# 1 搭建环境 # 2 模型训练

1. forward阶段：在forward阶段，我们将输入送入模型，正向计算出结果；
2. backward阶段：用于计算梯度并更新权重参数；

1. 在forward阶段，每个层会缓存下所有的数据，包括输入和中间变量，这些缓存下来的值会用于backward阶段的计算。

# 3 Backprop: Softmax

$L = - ln (p_c)$

$\frac{\partial L}{\partial o u t_si}=\left\{\begin{array}{ll} 0 & \text { if } i \neq c \\ -\frac{1}{p_{i}} & \text { if } i=c \end{array}\right.$

• input的形状
• input展平后的值
• totals，softmax激励函数的输入

$o u t_sc=\frac{e^{t_{c}}}{\sum_{i} e^{t_{i}}}=\frac{e^{t_{c}}}{S}$

\begin{aligned} \frac{\partial o u t_sc}{\partial t_{k}} &=-e^{t_{c}} S^{-2}\left(\frac{\partial S}{\partial t_{k}}\right) \\ &=-e^{t_{c}} S^{-2}\left(e^{t_{k}}\right) \\ &=\frac{-e^{t_{c}} e^{t_{k}}}{S^{2}} \end{aligned}

\begin{aligned} \frac{\partial o u t_sc}{\partial t_{c}} &=\frac{S e^{t_{c}}-e^{t_{c}} \frac{\partial S}{\partial t_{c}}}{S^{2}} \\ &=\frac{S e^{t_{c}}-e^{t_{c}} e^{t_{c}}}{S^{2}} \\ &=\frac{e^{t_{c}}\left(S-e^{t_{c}}\right)}{S^{2}} \end{aligned}

1. 我们使用$\partial \mathrm{L} / \partial \mathrm{W}$ 来更新Weights矩阵；
2. 我们使用$\partial \mathrm{L} / \partial \mathrm{b}$ 来更新bias向量;
3. $\partial \mathrm{L} / \partial i n p u t$被送往上一层；

$t=w \cdot input +b$

\begin{aligned} &\frac{\partial t}{\partial w}=i n p u t\\ &\frac{\partial t}{\partial b}=1\\ &\frac{\partial t}{\partial i n p u t}=w \end{aligned}

\begin{aligned} \frac{\partial L}{\partial w} &=\frac{\partial L}{\partial o u t} * \frac{\partial o u t}{\partial t} * \frac{\partial t}{\partial w} \\ \frac{\partial L}{\partial b} &=\frac{\partial L}{\partial o u t} * \frac{\partial o u t}{\partial t} * \frac{\partial t}{\partial b} \\ \frac{\partial L}{\partial i n p u t} &=\frac{\partial L}{\partial o u t} * \frac{\partial o u t}{\partial t} * \frac{\partial t}{\partial i n p u t} \end{aligned}

# 4 Backprop: Max Pooling

Max Pooling层其实没有任何参数，但是我们还是要实现backprop操作以将梯度操作继续向前传导。我们还是从forward开始

MaxPool 的正向操作是将输入划分为$2\times 2$的小格子，每个格子里面输出最大值。那么backprop时，我们则将backprop的输入尺寸加倍，并将梯度值传递到Pooling时最大值所在的位置，其他位置上则为 0。  Max Pooling的backprop操作到这里就可以了。

# 5 Backprop: Conv  \begin{aligned} \operatorname{out}(\mathrm{i}, \mathrm{j}) &=\text { convolve(image, filter }) \\ &=\sum_{x=0}^{3} \sum_{y=0}^{3} \operatornameimagei+x, j+y * \text filter x, y \\ & \frac{\partial \operatornameouti, j}{\partial \operatornamefilterx, y}=\operatornameimagei+x, j+y \end{aligned}

$\frac{\partial L}{\partial \text filter x, y}=\sum_{i} \sum_{j} \frac{\partial L}{\partial \text out i, j} * \frac{\partial \text out i, j}{\partial \text filter x, y}$