Softmax-with-Loss层的计算图 | Softmax梯度推导 | Loss损失函数

Softmax-with-Loss层的计算图

概述

softmax 函数称为softmax 层,交叉熵误差称为Cross Entropy Error 层,两者的组合称为Softmax-with-Loss 层。Softmax-with-Loss 层可以画成所下图所示的计算图。

在这里插入图片描述

图A-1 的计算图中假定了一个进行3 类别分类的神经网络。从前面的层输入的是 ( a 1 , a 2 , a 3 ) (a_1, a_2, a_3) (a1,a2,a3),softmax 层输出 ( y 1 , y 2 , y 3 ) (y_1, y_2, y_3) (y1,y2,y3)。此外,教师标签是 ( t 1 , t 2 , t 3 ) (t_1, t_2, t_3) (t1,t2,t3),Cross Entropy Error 层输出损失L。

如图A-1 所示,Softmax-with-Loss 层的反向传播的结果为 ( y 1 − t 1 , y 2 − t 2 , y 3 − t 3 ) (y_1 − t_1, y_2 − t_2, y_3 − t_3) (y1t1,y2t2,y3t3)

正向传播

图A-1 的计算图中省略了Softmax 层和Cross Entropy Error 层的内容。这里,我们来画出这两个层的内容。
首先是Softmax层。softmax 函数可由下式表示。
y k = e a k ∑ i = 1 n e a i y_{k}=\frac{e^{a_{k}}}{\sum_{i=1}^{n}e^{a_{i}}} yk=i=1neaieak
因此,用计算图表示Softmax层的话,则如图A-2 所示。图A-2 的计算图中,指数的和(相当于上式的分母)简写为S,最终的输出记为 ( y 1 , y 2 , y 3 ) (y_1, y_2, y_3) (y1,y2,y3)

在这里插入图片描述

接下来是Cross Entropy Error 层。交叉熵误差可由下式表示。
L = − ∑ k t k log ⁡ y k L=-\sum_{k}t_{k}\log y_{k} L=ktklogyk
根据上式,Cross Entropy Error 层的计算图可以画成图A-3 那样。
图A-3 的计算图很直观地表示出了上式,所以应该没有特别难的地方。下一节,我们将看一下反向传播。

在这里插入图片描述

反向传播

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

在这里插入图片描述

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

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

∂ y ∂ x = 1 x \frac{\partial y}{\partial x}=\frac{1}{x} xy=x1

遵从以上几点,就可以轻松求得Cross Entropy Error 的反向传播。结果 ( − t 1 y 1 , − t 2 y 2 , − t 3 y 3 ) (-\frac{t_1}{y_1},-\frac{t_2}{y_2},-\frac{t_3}{y_3}) (y1t1,y2t2,y3t3)是传给Softmax层的反向传播的输入。

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

步骤1

在这里插入图片描述

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

步骤2

在这里插入图片描述

”ד节点将正向传播的值翻转后相乘。这个过程中会进行下面的计算。
− t 1 y 1 e a 1 = − t 1 S e a 1 e a 1 = − t 1 S -\frac{t_1}{y_1}e^{a_1} = -t_{1}\frac{S}{e^{a_1}}e^{a_1} = -t_{1}S y1t1ea1=t1ea1Sea1=t1S

步骤3

在这里插入图片描述

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

步骤4

在这里插入图片描述

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

步骤5

在这里插入图片描述

“×”节点将值翻转后相乘。这里,式子变形时使用了
y 1 = e a 1 S y_1=\frac{e^{a_1}}{S} y1=Sea1

步骤6

在这里插入图片描述

“exp”节点中有下面的关系式成立。
y = e x y=e^x y=ex

∂ y ∂ x = e x \frac{\partial y}{\partial x}=e^x xy=ex

根据这个式子,向两个分支的输入和乘以 e a 1 e^{a_{1}} ea1后的值就是我们要求的反向传播。用式子写出来的话,就是 ( 1 S − t 1 e a 1 ) e a 1 (\frac{1}{S}-\frac{t_1}{e^{a_1}})e^{a_1} (S1ea1t1)ea1,整理之后为 y 1 − t 1 y_1 − t_1 y1t1。综上,我们推导出,正向传播时输入是 a 1 a_1 a1 的节点,它的反向传播是 y 1 − t 1 y_1 − t_1 y1t1。剩下的 a 2 a_2 a2 a 3 a_3 a3 也可以按照相同的步骤求出来(结果分别为 y 2 − t 2 y_2 − t_2 y2t2 y 3 − t 3 y_3 − t_3 y3t3)。此外,除了这里介绍的3 类别分类外,对于n类别分类的情况,也可以推导出同样的结果。

小结

上面,我们画出了Softmax-with-Loss 层的计算图的全部内容,并求了它的反向传播。未做省略的Softmax-with-Loss 层的计算图如图所示。

在这里插入图片描述

图A-5 的计算图看上去很复杂,但是使用计算图逐个确认的话,求导(反向传播的步骤)也并没有那么复杂。除了这里介绍的Softmax-with-Loss 层,遇到其他看上去很难的层(如Batch Normalization 层)时,请一定按照这里的步骤思考一下。相信会比只看数学式更容易理解。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值