0
点赞
收藏
分享

微信扫一扫

week2-part4 Derivatives with a Computation Graph

Python百事通 2022-05-05 阅读 90

week2-part4 Derivatives with a Computation Graph

在上一节中,我们讨论了梯度下降算法,利用函数 J ( w , b ) J(w, b) J(w,b)的导数来更新参数 w , b w, b w,b,不断向代价最低点处迭代。这一节,我们来讨论一下如何利用计算图来对直观、简便地计算导数。

1.Computation Graph

我们首先举一个比逻辑回归更简单,或者说不那么正式的神经网络的例子。

在这里插入图片描述

我们尝试计算函数 J J J J J J是由三个变量 a , b , c a, b, c a,b,c组成的函数, J = 3 ( a + b c ) J = 3(a + b c) J=3(a+bc)。我们可以把步骤细分画成上面的计算图。从图中可以看出,黑色的箭头代表了整个计算从左到右的过程,而为了计算导数,则需要从右到左反向计算。

2.Derivatives with a Computation Graph

我们从计算图中反向来看,求导过程便类似于红色箭头的流向:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQexWTEh-1651713887364)(C:\Users\86191\AppData\Roaming\Typora\typora-user-images\image-20220505091452157.png)]

从图中可以看出,为了计算函数 J J J关于 u u u的导数 d J d u \frac{\mathrm{d} J}{\mathrm{d} u} dudJ,我们需要先进行过程1(红色圆圈),求出 d J d v \frac{\mathrm{d} J}{\mathrm{d} v} dvdJ,再进行过程2。这也就是导数计算中的链式法则,可以推导出求 d J d u \frac{\mathrm{d} J}{\mathrm{d} u} dudJ公式如下
d J d u = d J d v d v d u \frac{\mathrm{d} J}{\mathrm{d} u} = \frac{\mathrm{d} J}{\mathrm{d} v}\frac{\mathrm{d} v}{\mathrm{d} u} dudJ=dvdJdudv

那么同理,在求解出 d J d u \frac{\mathrm{d} J}{\mathrm{d} u} dudJ,也就可以求解出函数 J J J关于 a , b , c a, b, c a,b,c的导数 d J d b ,   d J d a \frac{\mathrm{d} J}{\mathrm{d} b},\ \frac{\mathrm{d} J}{\mathrm{d} a} dbdJ, dadJ
d J d b = d J d u d u d b ,   d J d a = d J d u d u d a \frac{\mathrm{d} J}{\mathrm{d} b} = \frac{\mathrm{d} J}{\mathrm{d} u}\frac{\mathrm{d} u}{\mathrm{d} b},\ \frac{\mathrm{d} J}{\mathrm{d} a} = \frac{\mathrm{d} J}{\mathrm{d} u}\frac{\mathrm{d} u}{\mathrm{d} a} dbdJ=dudJdbdu, dadJ=dudJdadu
其实对于复杂的神经网络求导过程也是如此,我们可以根据计算图,来反向一层层进行求导,达到最终求解出代价函数 J J J关于参数 w , b w, b w,b的导数,来完成梯度下降的求导过程,随后便是不断更新参数,求出最优解了。

下一节,我们将回到逻辑回归函数中,来具体讨论一下逻辑回归的梯度下降过程。

举报

相关推荐

0 条评论