深度学习网络反向传播时梯度计算图(Computational Graph)详解

  首先,引出一个术语:gate。它指一个函数,也可以理解为上一个例子中的circuit diagram的每个节点。比如q=x+y是一个gate,f=qz也是一个gate。任何一类可微函数都可以作为一个gate,我们可以把多个gate组合成一个gate,或者在方便的时候把一个gate分解成多个gate。下面看例子:
在这里插入图片描述
  这个表达式描述了一个使用sigmoid激活函数的二维神经元(输入x和权重w)。但现在让我们简单地把它看作是从输入w,x到一个数的函数。该函数由多个gate组成,可以拆解为更简单的函数:
在这里插入图片描述
其中,函数fc、fa分别用常数c来转换输入,用常数a来缩放输入。这些是加法和乘法在技术上的特殊情况,但是我们在这里把它们作为(新的)一元gate来介绍,因为我们不需要常数c,a的梯度。整个circuit如下所示:
在这里插入图片描述
  上图中的输入是[x0,x1],神经元的(待学习)权重是[w0,w1,w2]。sigmoid神经元可以将输入缩放到0~1的范围内。下面对这个图上的每一个红色数字的由来都进行讲解:

  • 1.00。最右侧的1.00是默认的从输出端向后传递的梯度初始值。然后后面计算的所有新的梯度值都是通过对应的导数值与前一步计算的梯度值之间的乘积。
  • -0.53。由于f(x)=1/x的导数是-1/x2,所以-0.53=(-1/1.372)*1.00
  • -0.53。由于f(x)=c+x的导数是1,所以-0.53=1*(-0.53)
  • -0.20。由于f(x)=ex的导数是ex,所以-0.20=e-1.00*(-0.53)
  • 0.20。由于f(x)=ax的导数是a,而这里,a=-1,所以0.20=-1*(-0.20)
  • 接下来出现分叉了,可以看到总共有三个分叉,为了方便文字表述。这里从右到左依次记为分叉1、分叉2、分叉3,然后每个分叉分为上和下。
  • 分叉1下的0.20。由于f(x)=c+x的导数是1,所以0.20=1*0.20
  • 分叉1上的0.20。由于f(x)=c+x的导数是1,所以0.20=1*0.20
  • 分叉2上的0.20。由于f(x)=c+x的导数是1,所以0.20=1*0.20
  • 上分叉3上的-0.20。由于f(x)=ax的导数是a,而这里,a=-1.00(即x0的值),所以-0.20=-1*0.20
  • 上分叉3下的0.39。由于f(x)=ax的导数是a,而这里,a=2.00(即w0的值),所以0.40=2.00*0.20(图上写的是0.39,可能是计算机计算时候的精度问题,如果单从图上数据推算的话,值应该是0.40,后面也有一样的情况,同理。)
  • 分叉2下的0.20。由于f(x)=c+x的导数是1,所以0.20=1*0.20
  • 下分叉3上的-0.39。由于f(x)=ax的导数是a,而这里,a=-2.00(即x1的值),所以-0.39=-2.00*0.20
  • 下分叉3下的-0.59。由于f(x)=ax的导数是a,而这里,a=-2.00(即w1的值),所以-0.59=-3.00*0.20
  • 好了,分析完毕!




*上述实例图来自CS231n课程作业网站,该网站需要翻墙才能访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeeq_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值