Processing math: 100%

Deep Learning Note: 1-2 计算图

1. 计算图

  神经网络的训练过程主要包括用于计算网络输出的前向传播(Forward Propagation),和用于计算各参数偏导数的反向传播(Forward Propagation)。通过计算图可以更好地理解这个计算过程。

  先看一个简单的例子,对于如下函数:

J(a,b,c)=3(a+bc)

  式 (1) 的计算分为三个步骤:首先计算 bc,记为 u,有:

u=bc

  然后计算 a+bca+u,记为 v,有:

v=a+u

  最后计算 3(a+bc)3v,有:

J=3v

  以上三个计算步骤可以画为如图 1 所示的计算图:

图 1

图 1

  计算图的最后一个节点 J=3v 是我们关心的输出。当 a=5b=3c=2 时,按照图 1 的计算过程,可以得到 u=bc=6v=a+u=11J=3v=33,如图 2。这个计算过程就是一次前向传播,通过前向传播,得到了函数的输出。

图 2

图 2

2. 通过计算图计算导数

  现在我们想要根据图 2,计算式 J 关于 abc 的偏导,由图 2 中最右边的 J=3v,有:

dJdv=3

  接着从 J=3v 的节点,朝反方向移动一步到 v=a+u,由链式法则(Chain Rule)可以得到:

Ja=Jvva=3×1=3Ju=Jvvu=3×1=3

  由此就完成了一步反向传播。在上一步中计算的 dJdv,有助于我们在这一步计算 JaJu

  最后再从 v=a+u 的节点,朝反方向移动一步到 u=bc,可以得到:

Jb=Juub=3cJc=Juuc=3b

  当 b=3c=2 时,有 Jb=6Jc=9。通过一次完整的从右向左的反向传播,可以充分利用各个节点的中间结果,有效率地计算得到目标函数对于各个参数的偏导。

3. 通过计算图计算逻辑回归梯度下降

  下面展示通过计算图求逻辑回归梯度下降的过程,使用前文中描述的逻辑回归模型,模型输出的预测值 ˆy 为:

ˆy=a=σ(z)

  其中:

z=wTx+b

σ(z)=11+ez

  损失函数为:

L(a,y)=[yloga+(1y)log(1a)]

  假设只有两个特征 x1x2,则:

wT=[w1 w2]

  可以得到运算图如图 3 所示:

图 3

图 3

  反向计算各偏导的过程如下:

  首先求得 La 如下:

La=ya+1y1a

  然后可以由链式法则求得 Lz 如下:

Lz=Ladadz

  其中,a=σ(z) 是 Sigmoid 函数,有:
dσ(z)dz=σ(z)(1σ(z))

  将式 (6)、(8) 带入式 (7),得:

Lz=(ya+1y1a)a(1a)=y(1a)+a(1y)=y+a

  最后求得 Lw1Lw2Lb 如下:

Lw1=Lzzw1=Lzx1

Lw2=Lzzw2=Lzx2

Lb=Lzzb=Lz

  这里 Lz 不再展开。实际应用中,在由式 (9) 求得 Lz 的值之后,就可以直接带入式 (10)、(11)、(12) 进行计算。