Está en la página 1de 12

简明backpropaga!

on说明

之前对backpropaga!on通过vector/matrix calculus做的说明,其实也可以通过对
vector/matrix中单个元素分别求gradient,然后再这些单个元素的gradient拼接为
vector/matrix,对初学者这样理理解起来可能更更容易易。

单个数据点x(k) 的计算

z(k) = Wx(k) + b

其中W是p × n的matrix
x(k) 是n × 1的vector
b是p × 1的vector
z(k) 是p × 1的vector

也就是

⎡z1 ⎤ ⎡w1,1 w1,n ⎤ ⎡x1 ⎤ ⎡b1 ⎤


(k) (k)
⋯ w1,j ⋯
⎢ ⋮ ⎥ ⎢ ⋮ ⎢ ⋮ ⎥ ⎢⋮⎥
⎢ ⎥ ⋮ ⎥ ⎥⎢ ⎥ ⎢ ⎥
⎢ (k) ⎥ ⎢ ⎢ ⎥ ⎢b ⎥
⋮ ⋱ ⋮
⎢zi ⎥ = ⎢ wi,n ⎥
⎥⎢ j ⎥

⎥ ⎢
(k)
+ ⎢ i⎥
⎢ ⎥
⋯ ⋯
⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥
wi,1 wi,j x

⎢ ⋮ ⎥ ⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥ ⎢ ⋮ ⎥ ⎢ ⋮⎥
⎣zp(k) ⎦ ⎣wp,1 ⋯ wp,j ⋯ wp,n ⎦ ⎣x(k)
n
⎦ ⎣bp ⎦

另外

L(k) = f (z(k) )

这⾥里里L(k) 是scalar。
(k)
上⾯面是计算各个zi 再得到L(k) 的computa!on graph。

δ (k) 的定义

为了了⽅方便便表述,我们定义

∂L(k) (k)
(k)
= δi
∂zi

以及
⎡δ1 ⎤
(k)

⎢ ⋮ ⎥
⎢ ⎥
⎢ (k) ⎥
δ (k) = ⎢δi ⎥
⎢ ⎥
⎢ ⎥
⎢ ⋮ ⎥
⎣δp(k) ⎦

W的gradient ∇W

从wi,j 和L(k) 之间只有⼀一条path,所以

(k)
∂L(k) ∂L(k) ∂zi (k) (k)
= (k) = δi xj
∂wi,j ∂zi ∂w i,j

求W的gradient,可以将W中每个元素各⾃自对应的gradient按照W的shape来排列列组合
起来:
⎡ ∂w1,1 ∂w1,n ⎤
∂L(k) ∂L(k) ∂L(k)
⋯ ∂w1,j ⋯
⎢ ⎥
⎢ ⋮ ⋮ ⎥
⎢ ∂L(k) ⎥
⋮ ⋱ ⋮
∇W =⎢
⎢ ∂wi,1 ⋯ ∂L(k)
⋯ ∂L(k) ⎥
∂wi,n ⎥
⎢ ⎥
∂wi,j
⎢ ⋮ ⋮ ⎥
⎢ ⋮ ⋱ ⋮ ⎥
⎣ ∂L ∂L ⎦
(k) (k) (k)
∂L
∂w p,1
⋯ ∂wp,j ⋯ ∂w p,n

⎡δ1 x1 δ1 xn ⎤
(k) (k) (k) (k) (k) (k)
⋯ δ1 xj ⋯
⎢ ⋮ ⋮ ⎥
⎢ ⎥
⎢ (k) (k) ⎥
⋮ ⋱ ⋮
= ⎢δi(k) x(k) δi xn ⎥
(k) (k)
⎢ ⎥
⋯ δi xj ⋯
⎢ ⎥
1

⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣δp(k) x(k) ⋯
(k) (k)
δp xj ⋯ δp xn ⎦
(k) (k)
1

⎡δ1 ⎤
(k)

⎢ ⋮ ⎥
⎢ ⎥
⎢ (k) ⎥ (k)
= ⎢δi ⎥ [x1 xn ]
(k) (k)
⎢ ⎥
⋯ xj ⋯
⎢ ⎥
⎢ ⋮ ⎥
⎣δp(k) ⎦
T
= δ (k) x(k)

b的gradient ∇b

从bi 和L(k) 之间只有⼀一条path,所以

(k)
∂L(k) ∂L(k) ∂zi (k)
= (k) ∂b = δi
∂bi ∂zi i

求b的gradient,可以将b中每个元素各⾃自对应的gradient按照b的shape来排列列组合起
来:
⎡ ∂b1 ⎤
⎡δ1 ⎤
∂L(k) (k)

⎢ ⎥
⎢ ⋮ ⎥ ⎢ ⋮ ⎥
⎢ ∂L(k) ⎥ ⎢ (k) ⎥

∇b = ⎢ ⎥ = ⎢δ ⎥ ⎥
⎢ ∂bi ⎥ ⎢ i ⎥
(k)
=
⎢ ⎥
δ
⎢ ⋮ ⎥ ⎢ ⎢


⎢ (k) ⎥ ⋮
⎣ ∂L ⎦ ⎣δp(k) ⎦
∂bp

x(k) 的gradient ∇x(k)

(k)
⽽而从xj 和L(k) 之间则有p条path,所以
p (k) p
∂L(k) ∂L(k) ∂zi
=∑ = ∑ δi wi,j
(k)
(k) (k) (k)
∂xj i=1 ∂zi ∂xj i=1

求x(k) 的gradient,可以将x(k) 中每个元素各⾃自对应的gradient按照x(k) 的shape来排列列组


合起来:

⎡ ∂x(k) ⎤
∂L(k)
⎡ ∑i=1 δi wi,1 ⎤
p (k)
⎢ ⎥
1

⎢ ⋮ ⎥ ⎢ ⎥
⎢ (k) ⎥ ⎢ ⎥
⎢ ∂L ⎥ ⎢ p ⎥

= ⎢ ∂x(k) ⎥ = ⎢ ∑i=1 δi(k) wi,j ⎥ = WT δ (k)
⎢ j ⎥ ⎢ ⎥
∇x(k)
⎢ ⎥ ⎢ ⎥
⎢ ⋮ ⎥ ⎢ ⎥
⎢ ⎥

⎣∑p δ (k) wi,n ⎦
⎣ ⎦
(k)
∂L i=1 i
∂x(k)
n

m个数据点的计算

可以进⼀一步扩展到每次输⼊入m个数据点的情况:

Z = WX + B

其中Z是p × m的matrix
W依然是p × n的matrix
X是n × m的matrix
B是p × m的matrix,其中每个column都相同,都是由同⼀一个p × 1的vector b通过
broadcast得到的。

也就是

⎡z1 z1 ⎤
(1) (k) (m)
⋯ z1 ⋯
⎢ ⋮ ⋮ ⎥
⎢ ⎥
⎢ (1) (m) ⎥
⋮ ⋱ ⋮
⎢zi zi ⎥
(k)
⎢ ⎥
⋯ zi ⋯
⎢ ⎥
⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣zp(1) ⋯ zp(k) ⋯ zp ⎦
(m)

⎡w1,1 w1,j ⋯ w1,n ⎤ ⎡x1 x1 ⎤


(1) (k) (m)
⋯ ⋯ x1 ⋯
⎢ ⋮ ⎢ ⋮ ⋮ ⎥
⎢ ⋮ ⎥⎥⎢ ⎥
⎢ (1) (m) ⎥
⋮ ⋱ ⋮ ⋮ ⋱ ⋮
=⎢
⎢ wi,1 wi,j ⋯ wi,n ⎥ ⎥⎢ xj ⎥
(k)
⎢ ⎥
⋯ ⋯ ⋯
⎢ ⎥⎢
xj xj
⎢ ⋮ ⎥
⋮ ⋱ ⋮ ⋮ ⎥⎢ ⋮ ⋮ ⎥
⎣wp,1 wp,j ⋯ wp,n ⎦ ⎣x(1)
⋮ ⋱ ⋮
⋯ xn ⎦
(k) (m)
n ⋯ xn ⋯
⎡b1 ⋯ b1 ⋯ b1 ⎤
⎢⋮ ⋮⎥
⎢ ⋮ ⋱ ⋮ ⎥
+⎢
⎢b2 ⋯ ⋯ b2 ⎥

⎢ ⎥
b2
⎢⋮ ⋮ ⋱ ⋮ ⋮⎥
⎣bp ⋯ bp ⋯ bp ⎦

另外
m
1
L = F (Z) = ∑ L(k)
m
k=1
Δ的定义

为了了⽅方便便后续的表达,可以定义:

其中
⎡ ∂z (1) ∂z1(m) ⎤
∂L(1) ∂L(k) ∂L(m)
⋯ ⋯
∂z1(k)
⎢ ⎥
1

⎢ ⋮ ⋮ ⎥
⎢ (1) ⋮ ⋱ ⋮ ⎥
⎢ ∂L ∂L(m) ⎥
Δ = ⎢ ∂z (1) ⎥
∂L(k)
⎢ i ∂zi(m) ⎥
⋯ ⋯
⎢ ⎥
∂zi(k)

⎢ ⋮ ⋮ ⎥
⎢ (1) ⋮ ⋱ ⋮ ⎥
⎣ ∂L(1) ⋯ ∂L(k)
⋯ (m) ⎦
∂L(m)
∂zp ∂zp(k) ∂zp

⎡δ1 δ1 ⎤
(1) (k) (m)
⋯ δ1 ⋯
⎢ ⋮ ⋮ ⎥
⎢ ⎥
⎢ (m) ⎥
⋮ ⋱ ⋮
= ⎢δi(1) δi ⎥
(k)
⎢ ⎥
⋯ δi ⋯
⎢ ⎥
⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣δp(1) ⋯
(k)
δp ⋯ δp ⎦
(m)

= [δ (1) ⋯ δ (k) ⋯ δ (m) ]

W的gradient ∇W

根据上图的计算图可知,从L有m条路路径到W。
m
∂L ∂L ∂L(k) ∂z(k)
=∑
∂wi,j ∂L(k) ∂z(k) ∂wi,j
k=1
m
1 ∂L(k) ∂z(k)
= ∑ (k)
m ∂z ∂wi,j
k=1
m
1
∑ δi xj
(k) (k)
=
m
k=1

其中

1 m
∂L ∂m ∑k=1 L(k) 1
= =
∂L(k) ∂L(k) m

求W的gradient,可以将W中每个元素各⾃自对应的gradient按照W的shape来排列列组合
起来:
⎡ ∂w1,1 ∂w1,n ⎤
∂L ∂L ∂L
⋯ ∂w1,j ⋯
⎢ ⋮ ⋮ ⎥
⎢ ⎥
⎢ ∂L ∂L ⎥
⋮ ⋱ ⋮
= ⎢ ∂w ∂wi,n ⎥
∂L
⎢ i,1 ⎥
∇W ⋯ ⋯
⎢ ⎥
∂wi,j

⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣ ∂w
∂L
⋯ ∂L
⋯ ∂L ⎦
p,1 ∂wp,j ∂w p,n

⎡ k=1 1 x1 ∑k=1 δ1 xn ⎤
m (k) (k) m (k) (k) m (k) (k)
∑ δ ⋯ ∑k=1 δ1 xj ⋯
⎢ ⎥
1 ⎢ ⎥

⎢ (k) (k) ⎥
⋮ ⋮ ⋮ ⋮
= ⎢∑m (k) (k) (k) (k)
∑k=1 δi xn ⎥
m ⎢ k=1 i 1 ⎥
m m
δ x ⋯ ∑k=1 δi xj ⋯
⎢ ⎥
⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣∑m δp(k) x(k) ⋯
m (k) (k)
∑k=1 δp xj ⋯ ∑k=1 δp xn ⎦
m (k) (k)
k=1 1

⎡δ1 δ1 ⎤ ⎡ x1 xn ⎤
(1) (k) (m) (1) (1) (1)
⋯ δ1 ⋯ ⋯ xj ⋯
⎢ ⋮ ⋮ ⎥ ⎢ ⋮ ⎥
1 ⎢ ⎥⎢ ⋮ ⎥
⋱ ⋱
⎢ (m) ⎥ ⎢ (k) (k) ⎥
⋮ ⋮ ⋮ ⋮
= ⎢δi(1) (k)
δi ⎥ ⎢ x1
(k)
xn ⎥
m⎢ ⎥⎢ ⎥
⋯ δi ⋯ ⋯ xj ⋯
⎢ ⎥⎢ ⎥
⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣δp(1) ⋯
(k)
δp ⋯ δp ⎦ ⎣x(m)
(m)

(m)
xj ⋯ xn ⎦
(m)
1
1
= ΔXT
m

b的gradient ∇b

根据上图的计算图可知,从L有m条路路径到b。
m
∂L ∂L ∂L(k) ∂z(k)
=∑
∂bi ∂L(k) ∂z(k) ∂bi
k=1
m
1 ∂L(k) ∂z(k)
= ∑ (k)
m ∂z ∂bi
k=1
m
1 ∂L(k)
= ∑ (k)
m ∂z k=1
m
1
= ∑ δi
(k)
m
k=1

⎡m ⎤
1 m ∂L(k)
⎡ m ∑k=1 δ1 ⎤
∑k=1 1 m (k)
∂z(k)
⎢ ⎥
1

⎢ ⎥ ⎢ ⎥
⎢ ⋮ ⎥ ⎢ ⎥
⎢ 1 ∑m ∂L(k) ⎥ ⎢ 1 m (k) ⎥
⋮ m
∇b = ⎢ m k=1 ∂z(k) ⎥ = ⎢ m ∑k=1 δi ⎥ =
1
∑ δ (k)
⎢ i ⎥ ⎢ ⎥ m
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
k=1
⎢ ⎥
⋮ ⋮
⎣ 1 ∑m δp(k) ⎦
⎣ m ∑k=1 (k) ⎦
1 m ∂L(k)
m k=1
∂zp

上⾯面的步骤实际是将Δ的列列相加再求平均。

∇x 的定义

∇X = [∇x(1) ⋯ ∇x(k) ⋯ ∇x(m) ]


= [WT δ (1) ⋯ WT δ (k) ⋯ WT δ (m) ]
= WT Δ

注意:∇x(k) 不不是L对x(k) 求导得到的gradient,⽽而只是将所有的∇x(k) 按照X的shape排


列列在⼀一起。计算∇x 是为了了计算神经⽹网络前⼀一层的Δ。

实际程序

下⾯面是deep learning.ai的Notebook: Building your Deep Neural Network: Step by Step


in Neural Network and Deep Learning中给出计算⽅方法,和上⾯面推导的结果是完全⼀一致
的,可以加以对照:

上图中的dW [l] 就是本⽂文中∇W 。


上图中的db[l] 就是本⽂文中∇b 。
上图中的dA[l−1] 就是本⽂文中的∇X 。
上图中的dZ [l] 就是本⽂文中的Δ。
上图中的W [l] 就是本⽂文中W。
上图中的b[l] 就是本⽂文中b。
上图中的A[l−1] 就是本⽂文中X。

También podría gustarte