Deep Learning Note: 1-2 计算图
Contents [show]
1. 计算图
神经网络的训练过程主要包括用于计算网络输出的前向传播(Forward Propagation),和用于计算各参数偏导数的反向传播(Forward Propagation)。通过计算图可以更好地理解这个计算过程。
先看一个简单的例子,对于如下函数:
J(a,b,c)=3(a+bc)
式 (1) 的计算分为三个步骤:首先计算 bc,记为 u,有:
u=bc
然后计算 a+bc 即 a+u,记为 v,有:
v=a+u
最后计算 3(a+bc) 即 3v,有:
J=3v
以上三个计算步骤可以画为如图 1 所示的计算图:
计算图的最后一个节点 J=3v 是我们关心的输出。当 a=5,b=3,c=2 时,按照图 1 的计算过程,可以得到 u=bc=6,v=a+u=11,J=3v=33,如图 2。这个计算过程就是一次前向传播,通过前向传播,得到了函数的输出。
2. 通过计算图计算导数
现在我们想要根据图 2,计算式 J 关于 a、b、c 的偏导,由图 2 中最右边的 J=3v,有:
dJdv=3
接着从 J=3v 的节点,朝反方向移动一步到 v=a+u,由链式法则(Chain Rule)可以得到:
∂J∂a=∂J∂v⋅∂v∂a=3×1=3∂J∂u=∂J∂v⋅∂v∂u=3×1=3
由此就完成了一步反向传播。在上一步中计算的 dJdv,有助于我们在这一步计算 ∂J∂a 和 ∂J∂u。
最后再从 v=a+u 的节点,朝反方向移动一步到 u=bc,可以得到:
∂J∂b=∂J∂u⋅∂u∂b=3c∂J∂c=∂J∂u⋅∂u∂c=3b
当 b=3,c=2 时,有 ∂J∂b=6,∂J∂c=9。通过一次完整的从右向左的反向传播,可以充分利用各个节点的中间结果,有效率地计算得到目标函数对于各个参数的偏导。
3. 通过计算图计算逻辑回归梯度下降
下面展示通过计算图求逻辑回归梯度下降的过程,使用前文中描述的逻辑回归模型,模型输出的预测值 ˆy 为:
ˆy=a=σ(z)
其中:
z=wTx+b
σ(z)=11+e−z
损失函数为:
L(a,y)=−[yloga+(1–y)log(1–a)]
假设只有两个特征 x1、x2,则:
wT=[w1 w2]
可以得到运算图如图 3 所示:
反向计算各偏导的过程如下:
首先求得 ∂L∂a 如下:
∂L∂a=–ya+1–y1–a
然后可以由链式法则求得 ∂L∂z 如下:
∂L∂z=∂L∂a⋅dadz
其中,a=σ(z) 是 Sigmoid 函数,有:
dσ(z)dz=σ(z)(1–σ(z))
将式 (6)、(8) 带入式 (7),得:
∂L∂z=(−ya+1–y1–a)⋅a(1–a)=−y(1–a)+a(1–y)=−y+a
最后求得 ∂L∂w1、∂L∂w2 和 ∂L∂b 如下:
∂L∂w1=∂L∂z⋅∂z∂w1=∂L∂z⋅x1
∂L∂w2=∂L∂z⋅∂z∂w2=∂L∂z⋅x2
∂L∂b=∂L∂z⋅∂z∂b=∂L∂z
这里 ∂L∂z 不再展开。实际应用中,在由式 (9) 求得 ∂L∂z 的值之后,就可以直接带入式 (10)、(11)、(12) 进行计算。