A.2 反向传播

首先是 Cross Entropy Error 层的反向传播。Cross Entropy Error 层的反向传播可以画成图 A-4 那样。

A.2 反向传播 - 图1

图 A-4 交叉熵误差的反向传播

求这个计算图的反向传播时,要注意下面几点。

  • 反向传播的初始值(图 A-4 中最右边的值)是 1(因为 \frac{\partial L}{\partial L}=1)。
  • “×”节点的反向传播将正向传播时的输入值翻转,乘以上游传过来的导数后,再传给下游。
  • “+”节点将上游传来的导数原封不动地传给下游。
  • “log”节点的反向传播遵从下式。

\begin{aligned}&y=\log x\\&\frac{\partial y}{\partial x}=\frac{1}{x}\end{aligned}

遵从以上几点,就可以轻松求得 Cross Entropy Error 的反向传播。结果 \Bigl(-\frac{t_1}{y_1},-\frac{t_2}{y_2},-\frac{t_3}{y_3}\Bigr) 是传给 Softmax 层的反向传播的输入。

下面是 Softmax 层的反向传播的步骤。因为 Softmax 层有些复杂,所以我们来逐一进行确认。

步骤 1

A.2 反向传播 - 图5

前面的层(Cross Entropy Error 层)的反向传播的值传过来。

步骤 2

A.2 反向传播 - 图6

“×”节点将正向传播的值翻转后相乘。这个过程中会进行下面的计算。

-\frac{t_1}{y_1}\exp(a_1)=-t_1\frac{S}{\exp(a_1)}\exp(a_1)=-t_1S\quad\quad\quad\quad\quad({\rm A}.3)

步骤 3

{%}

正向传播时若有分支流出,则反向传播时它们的反向传播的值会相加。因此,这里分成了三支的反向传播的值 (-t_1S,-t_2S,-t_3S) 会被求和。然后,还要对这个相加后的值进行“/”节点的反向传播,结果为 \frac{1}{S}(t_1+t_2+t_3)。这里,(t_1,t_2,t_3) 是教师标签,也是 one-hot 向量。one-hot 向量意味着 (t_1,t_2,t_3)中只有一个元素是 1,其余都是 0。因此,(t_1,t_2,t_3) 的和为 1。

步骤 4

A.2 反向传播 - 图14

“+”节点原封不动地传递上游的值。

步骤 5

A.2 反向传播 - 图15

“×”节点将值翻转后相乘。这里,式子变形时使用了 y_1=\frac{\exp(a_1)}{S}

步骤 6

A.2 反向传播 - 图17

“exp”节点中有下面的关系式成立。

\begin{aligned}&y=\exp(x)\\&\frac{\partial y}{\partial x}=\exp(x)\end{aligned}\quad\quad\quad\quad\quad({\rm A}.4)

根据这个式子,向两个分支的输入和乘以 \exp(a_1) 后的值就是我们要求的反向传播。用式子写出来的话,就是 \Bigl(\frac{1}{S}-\frac{t_1}{\exp(a_1)}\Bigr)\exp(a_1),整理之后为 y_1-t_1。综上,我们推导出,正向传播时输入是 a_1 的节点,它的反向传播是 y_1-t_1。剩下的 a_2a_3 也可以按照相同的步骤求出来(结果分别为 y_2-t_2y_3-t_3)。此外,除了这里介绍的 3 类别分类外,对于 n 类别分类的情况,也可以推导出同样的结果。