You are on page 1of 18

神经⽹网络中涉及的向量量和矩阵求导

Leow Wee Kheng在CS5240 Theore!cal Founda!ons in Mul!media课程的Matrix


Differen!a!on讲义中只给出下⾯面6种定义:

Type Scalar Vector Matrix

∂y ∂y ∂Y
Scalar ∂x ∂x ∂x
∂y ∂y
Vector ∂x ∂x
∂y
Matrix ∂X

可以仔细阅读上述讲义和其中相关的各种实际线性代数计算例例⼦子。

∂y
其中最核⼼心的是⼀一个vector对另外⼀一个vector求导的 ∂x 的情况。

假设有y = f (x) : Rn → Rm 的输⼊入为⻓长度为n的vector x⽽而产⽣生的输出为⻓长度为m的


∂y
vector y。则 ∂x 的结果也被称为Jocabian,也就是⼀一个m × n的矩阵:
⎡ ∂x1 ∂xn ⎤
∂y1 ∂y1 ∂y1
⋯ ∂xj ⋯
⎢ ⋮ ⋮ ⎥
∂y ⎢ ⎥
⋮ ⋱ ⋮
⎢ ∂y ∂yi ⎥
= ⎢ ∂x1i ∂xn ⎥
∂yi
∂x ⎢ ⎥
⋯ ⋯
⎢ ⎥
∂xj

⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣ ∂ym ⋯ ∂ym
⋯ ∂ym ⎦
∂x1 ∂xj ∂xn

其他的⼏几种定义的情况都可以据此简单扩展⽽而来:

⼀一个scalar可以当作⼀一个⻓长度为1的vector来处理理。
⼀一个shape为(m × n)的matrix可以先拉⻓长变为⼀一个⻓长度为m × n的 vector来处
理理。只有这样处理理,对matrix的求导才能⽤用于chain rule,否则会出现⽭矛盾(参⻅见⽂文
末的例例⼦子)。

But in prac!ce this is not a very useful way of arranging the gradient. 所以通常根据此
matrix的形状和其中元素的位置来排列列(后⾯面有例例⼦子说明这样排列列可以⽅方便便程序计
算),例例如:

上⾯面定义中的 ∂Y
∂x ,需要将shape为m × n的矩阵Y 拉⻓长当作⼀一个⻓长度为m × n的
vector来处理理,然后将结果按照原来Y 的shape排列列。
∂y
上⾯面定义中的 ∂X ,都需要将shape为m × n的矩阵X拉⻓长当作⼀一个⻓长度为m × n
的vector来处理理,然后将结果按照原来X的tranpose的shape来排列列。

∂y
Leow Wee Kheng讲义中,⼀一个vector y或者matrix Y 对matrix X求导,也就是 ∂X 或者
∂Y ∂y ∂Y
∂X 是没有被定义的。但在实际的neural network中,我们常常会遇到 ∂X 以及 ∂X 的求解
问题。为了了解决这类问题,⼈人们提出了了Generalized Jacobian。Jus!n Johnson在其notes
中给出了了如下介绍:

Note: Just as a vector is a one-dimensional list of numbers and a matrix is a two-


dimensional grid of numbers, a tensor is a D-dimensional grid of numbers. Many
opera!ons in deep learning accept tensors as inputs and produce tensors as outputs. For
example an image is usually represented as a three-dimensional grid of numbers, where
the three dimensions correspond to the height, width, and color channels (red, green,
blue) of the image. We must therefore develop a deriva!ve that is compa!ble with
func!ons opera!ng on general tensors.

假设有y = f (x) : Rn1 ×⋯×nDx → Rm1 ×⋯×mDy 的输⼊入为维度为Dx 的tensor x⽽而产


∂y
⽣生的输出为维度为Dy 的tensor y。则 ∂x 的结果也被称为Generalized Jocabian,也就是
⼀一个shape (m1 × ⋯ × mDy ) × (n1 × ⋯ × nDx )的tensor。

∂y
Note:Note that we have separated the dimensions of ∂x into two groups: the first
group matches the dimensions of y and the second group matches the dimensions of x.
With this grouping, we can think of the generalized Jacobian as generaliza!on of a
matrix, where each “row” has the same shape as y and each “column” has the same
shape as x. Now if we let i ∈ ZDy and j ∈ ZDx be vectors of integer indices, then we
can write:

∂y ∂yi
( )i,j =
∂x ∂xj

The indicies i and j are not scalars; instead they are vectors of indicies. yi and xj are
∂y
scalars, so the deriva!ve ∂xi is also a scalar.
j

这样Generalized Jacobian也可以⽤用于Chain Rule。

Alex Smola and Mu Li在他们的STAT-157讲义中有如下总结:


注意这⾥里里STAT-157的讲义中,对 ∂Y
∂X 还考虑了了第⼆二个group内部的排列列顺序(k, n),
Jus!n Johnson则没有考虑内部的排列列顺序(n1 × ⋯ × nDx )。
However, there’s a problem with this approach: the Generalized Jacobian matrices are
typically far too large to fit in memory.

As a concrete example, let’s suppose that f is a linear layer that takes X as input a
minibatch of M vectors, each of dimension Dx , and produces Y a minibatch of M
vectors, each of dimension Dy . Then X is a matrix of shape Dx × M , W is a matrix of
shape Dy × Dx , and Y = f (x, W) = WX is a matrix of shape Dy × M . The
Generalized Jacobian ∂Y
∂X then has shape (Dy × M ) × (Dx × M )。 不不过按照STAT-
157的讲义,更更精确的shape表示应为(Dy × M ) × (M × Dx )。

In a typical neural network we might have N = 64 and M = D = 4096; then ∂Y


∂X
consists of (64 × 4096) × (64 × 4096) scalar values; this is more than 68 billion
numbers; using 32-bit floa!ng point, this Jacobian matrix will take 256 GB of memory to
store. Therefore it is completely hopeless to try and explicitly store and manipulate the
Generalized Jacobian matrix.

However it turns out that for most common neural network layers, we can derive
∂L ∂Y
expressions that compute the product ∂Y ∂X without explicitly forming the
Generalized Jacobian ∂Y
∂X .

所以在神经⽹网络设计的计算中,实际我们并不不会⽤用到很占空间的Generalized Jacobian,
但是Generalized Jacobian能帮助我们理理解求导的推导过程。

单个数据点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。

Note: 在neural network优化过程中(例例如backpropaga!on),最终的loss func!on输出


的值也是⼀一个scalar。

如前所述,对neural network来说,我们可以利利⽤用每⼀一层具有的线性变换的特点来⼤大⼤大简
化计算,⽽而不不需要显式计算出原始Chain rule中的Generalized Jacobian导致的⾼高维度
Tensor。

计算∇W

∂L(k)
根据这个特点,计算W的gradient,也就是 ∂W ,可以先对W中的每个元素单独求导
∂L(k) ∂L(k)
计算 ∂wi,j ,然后再合并排列列起来得到 ∂W 。

∂L(k) ∂L(k) ∂z(k)


=
∂wi,j ∂z(k) ∂wi,j

⾸首先

∂L(k)
= [ ∂z(k) ⋯ ∂z(k) ⋯ ∂z(k) ]
∂L(k) ∂L(k) ∂L(k)
∂z(k) 1 i p

= [δ1(k) ⋯ δi(k) ⋯ δp(k) ]

(k) ∂L(k)
这⾥里里δi = 。
∂z(k)
i

因为z(k) 中的每个元素的计算只和W部分的元素相关,所以

⎡ ∂w1i,j ⎤
∂z(k)

⎡ 0 ⎤
⎢ ⎥
⎢ ⋮ ⎥ ⎢ ⋮ ⎥
⎢ (k) ⎥ ⎢
⎢ ∂zi ⎥ ⎢ (k) ⎥
= ⎢ ∂wi,j ⎥ = ⎢xj ⎥
∂z(k)
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥

∂wi,j
⎢ ⋮ ⎥
⎢ (k) ⎥ ⎣ ⋮

⎣ ∂zp
⎦ 0
∂wi,j

∂z(k) (k) ∂z(k)


这⾥里里 ∂wi,j 是p × 1的vector。同时注意上⾯面的xj 是 ∂wi,j 这个vector的第i个元素(⽽而不不是
第j 个元素)。

所以
∂L(k) ∂L(k) ∂z(k)
=
∂wi,j ∂z(k) ∂wi,j
⎡ 0 ⎤
⎢ ⋮ ⎥
⎢ (k) ⎥
⎢x ⎥
[ ∂z(k) (k) ]
⎢ j ⎥
∂L(k) ∂L(k) ∂L(k)
= ⋯ ⋯
⎢ ⎥
(k)
∂zi ∂zp
⎢ ⋮ ⎥
1

⎣ 0 ⎦

⎡ 0 ⎤
⎢ ⋮ ⎥
⎢ ⎥
(k) ⎢ (k) ⎥
= [δ1(k) δp ] ⎢xj ⎥
(k)
⋯ ⋯
⎢ ⎥
δi
⎢ ⋮ ⎥
⎣ 0 ⎦
(k) (k)
= δi xj

按照Leow Wee Kheng以及STAT-157的nota!on,W的gradient表示为∇W ,本来应该


∂L(k) ∂L(k)
也就是 ∂W ,⽽而 ∂W 的shape和W的transpose的shape是⼀一样。

但是为计算⽅方便便,其实可以让∇W 按照与W相同的shape来排列列其中的元素。⽽而不不是按
∂L(k)
照 ∂W 的shape来排列列。

Since this matrix has the same shape as W , we could just subtract it (!mes the learning
rate) from W when doing gradient descent. So (in a slight abuse of nota!on) let’s find
this matrix as ∇W instead.
⎡ ∂w1,1 ∂w1,n ⎤
∂L(k) ∂L(k) ∂L(k)
⋯ ∂w1,j ⋯
⎢ ⎥
⎢ ⋮ ⋮ ⎥
⎢ ∂L(k) ⎥
⋮ ⋱ ⋮
) =⎢ ∂L(k) ⎥
(k)
∂L
⎢ ∂wi,1 ∂wi,n ⎥
T ∂L(k)
∇W =( ⋯ ⋯
⎢ ⎥
∂wi,j
∂W
⎢ ⋮ ⋮ ⎥
⎢ ⋮ ⋱ ⋮ ⎥
⎣ ∂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)

上⾯面的

⎡δ1 ⎤
(k)

⎢ ⋮ ⎥
⎢ ⎥
⎢ (k) ⎥ ∂L(k) T
δ (k) = ⎢δi ⎥ = ( (k) )
⎢ ⎥
⎢ ⎥
∂z
⎢ ⋮ ⎥
⎣δp(k) ⎦

计算δ (k) ⾮非常重要,是backpropaga!on能够逐层递进的关键计算步骤。

计算∇b

(k) (k)
类似的,计算b的gradient,也就是 ∂L ∂L
∂b ,可以先对W 中的每个元素单独求导计算 ∂bi
∂L(k)
,然后再合并排列列起来得到 ∂b 。

∂L(k) ∂L(k) ∂z(k)


=
∂bi ∂z(k) ∂bi
⎡0⎤
⎢⋮⎥
⎢ ⎥
⎢1⎥
⎢ ⎥
∂L(k) ∂L(k) (k)
[ ∂z(k) ]
∂L
= ⋯ ⋯
⎢ ⎥
∂z(k) ∂z(k)
⎢⋮⎥
1 i p

⎣0⎦

⎡0⎤
⎢⋮⎥
⎢ ⎥
(k) ⎢ ⎥
= [δ1(k) δp ] ⎢1⎥
(k)
⋯ ⋯
⎢ ⎥
δi
⎢⋮⎥
⎣0⎦
(k) (k)
= δi × 1 = δi

按照Leow Wee Kheng以及STAT-157的nota!on,b的gradient表示为∇b ,本来应该也就


是 ∂L ∂L
∂b ,⽽而 ∂b 的shape和b的transpose的shape是⼀一样。
(k)
为计算⽅方便便,其实可以让∇b 按照与b相同的shape来排列列其中的元素。⽽而不不是按照 ∂L
∂b
的shape来排列列。

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

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

[l−1]
对于多层的神经⽹网络,如果把上⾯面的x(k) ,当作前⼀一层的输出a(k) ,在计算
[l−1] (k)
backpropaga!on的时候,当计算前⼀一层的δ (k) ,也就是计算 ∂L
(k) [l−1]
,先要计算
(k) (k)
∂z
∂L ∂L
(k) [l−1] ,也就是这⾥里里的 ∂x(k) 。
∂a
同样根据Chain rule

∂L(k) ∂L(k) ∂z(k) ∂L(k) ∂Wx(k) + b ∂L(k) ∂Wx(k)


= = = ( + 0)
∂x(k) ∂z(k) ∂x(k) ∂z(k) ∂x(k) ∂z(k) ∂x(k)

参⻅见之前的Notes on Vector and Matrix Calculus:

∂Wx(k)
(k)
=W
∂x

所以

∂L(k) ∂L(k) (k) T


(k)
= (k)
W = (δ ) W
∂x ∂z
为计算⽅方便便,其实可以让∇x(k) 按照与x(k) 相同的shape来排列列其中的元素。⽽而不不是按照
∂L(k)
∂x(k)
的shape来排列列。

∂L(k) T
∇x(k) = ( (k) ) = WT δ (k)
∂x

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
根据上图的计算图可知,从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
(k)
∂L ∂m k=1 L 1
= =
∂L(k) ∂L(k) m

为计算⽅方便便,其实可以让∇W 按照与W相同的shape来排列列其中的元素。⽽而不不是按照
∂L
∂W 的shape来排列列。
⎡ ∂w1,1 ∂w1,n ⎤
∂L ∂L ∂L
⋯ ∂w1,j ⋯
⎢ ⋮ ⋮ ⎥
∂L T ⎢ ⎢ ∂L ∂L ⎥

⋮ ⋱ ⋮
) = ⎢ ∂w ∂wi,n ⎥
∂L
⎢ i,1 ⎥
∇W =( ⋯ ⋯
⎢ ⎥
∂wi,j
∂W
⎢ ⋮ ⋮ ⋱ ⋮ ⋮ ⎥
⎣ ∂w
∂L
⋯ ∂L
⋯ ∂L ⎦
p,1 ∂wp,j ∂wp,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

其中
⎡ ∂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) ]


= [( ∂L ∂L(m) T ]
(1)
∂L(k) T
∂z(1) )
T ⋯ ( ∂z(k) ) ⋯ ( ∂z(m) )

计算Δ⾮非常重要,是backpropaga!on能够逐层递进的关键计算步骤。

∂L T
Notes: Δ ̸
= ( ∂Z ) ,两者不不是⼀一回事!和单个数据点是有区别的。

类似的,根据上图的计算图可知,从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)
∑k=1 δ1 ⎤ ⎡m
∑k=1 1 m (k)
∂z(k)
⎢ ⎥
1

⎢ ⎥ ⎢ ⎥
⎢ ⎥
∂L T ⎢ 1 m ∂L(k) ⎥ ⎢ 1 m (k) ⎥
⋮ ⎢

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

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

对于多层的神经⽹网络,如果把上⾯面的X,当作前⼀一层的输出A[l−1] ,在计算
backpropaga!on的时候,当计算前⼀一层的Δ[l−1] ,也就是
[δ (1) ],实际就是计算
[l−1] [l−1] [l−1]
⋯ δ (k) ⋯ δ (m)
[( ∂L(1)
(1) [l−1] )
T ⋯ ( ∂L(k)
(k) [l−1] )
T ⋯ ( ∂L(m)
(m) [l−1] ) ],则需要先计算:
T
∂z ∂z ∂z

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

∂L(k) T
前⾯面已经知道了了如何计算每个数据点的( ∂x(k) ) ,合并在⼀一起很容易易得到结果:

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

下⾯面是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。

Notes:
求导涉及matrix的情况,如果直接按照Leow Wee Kheng讲义中的定义,是⽆无法使⽤用
Chain rule的,要使⽤用Chain rule之前都必须按照前⾯面Generalized Jacobian的⽅方法把
matrix拉⻓长变为Vector,例例如下⾯面的具体的例例⼦子:
∂L ∂L ∂Z
=
∂wi,j ∂Z ∂wi,j

∂L ∂L
因为 ∂wi,j
显然是⼀一个标量量,⽽而如果按照Leow Wee Kheng讲义, ∂Z 是m × p的matrix,
∂Z ∂L
同时 ∂wi,j
是p × m 的matrix,⽤用Chain rule推导出 ∂wi,j 是m × m的matrix,这显然是⽭矛
盾的。

对求导涉及到Matrix的情况,都要按照前⾯面Generalized Jacobian的⽅方法先把matrix拉⻓长
∂L ∂Z
变为Vector,这时 ∂Z 是1 × (p × m)的matrix, ⽽而 ∂w 是(p × m) × 1的matrix,⽤用
i,j
∂L
Chain rule推导推出的 ∂w 是1 × 1的matrix,也就是标量量,结果是正确的。
i,j

Reference

Leow Wee Kheng, Matrix Differen!a!on in CS5240 Theore!cal Founda!ons in


Mul!media

Jus!n Johnson, Deriva!ves, Backpropaga!on, and Vectoriza!on

3. Gradient and Auto Differen!a!on, Alex Smola and Mu Li, STAT 157, Spring
2019, UC Berkeley

Andrew Ng, Notebook: Building your Deep Neural Network: Step by Step in
Neural Network and Deep Learning

You might also like