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
我们从计算图中反向来看,求导过程便类似于红色箭头的流向:
从图中可以看出,为了计算函数
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的导数,来完成梯度下降的求导过程,随后便是不断更新参数,求出最优解了。
下一节,我们将回到逻辑回归函数中,来具体讨论一下逻辑回归的梯度下降过程。