深度学习中的Matrix Calculus (1): Jacobian And Chain Rule

  在深度学习里边,一个最重要的过程是Back Propagation,也就是计算梯度用于做梯度下降优化。然而在BP中,充斥着大量的矩阵微分运算以及各种转化技巧,导致没有学过矩阵论或者矩阵分析的童鞋感到压力山大,所以《深度学习反向求导》这个系列文章主要用最简洁的内容把Matrix Calculus这块的所需内容阐述一遍。

背景:以DNN为例

  DNN,也就是隐含层基本上都是全连接这种神经网络,是一类比较容易分析的神经网络。就以这个为例,阐明我们的目标和任务。

  DNN的各层前向计算如下:

{ZL=WLAL1+bL,AL=σ(ZL)L=1,,N. { Z L = W L A L − 1 + b L , A L = σ ( Z L ) L = 1 , … , N .

其中, ZL Z L 是第 L L 层的全连接层(FC)的输出,是一个nL×1的向量, AL A L 是第 L L 层的激活层的输出,A0=X也就是输入, WL W L 是第 L L 层的权重(weights),是一个nL×nL1的矩阵。整个网络的损失函数(loss function)是:

J=J(ZN) J = J ( Z N )

而BP则是需要计算:

JWL=JZNZNZN1  ZL+1ZLZLWL,JbL=JZNZNZN1  ZL+1ZLZLbL L=1,2,,N { ∂ J ∂ W L = ∂ J ∂ Z N ⋅ ∂ Z N ∂ Z N − 1 ⋅   ⋯   ⋅ ∂ Z L + 1 ∂ Z L ⋅ ∂ Z L ∂ W L , ∂ J ∂ b L = ∂ J ∂ Z N ⋅ ∂ Z N ∂ Z N − 1 ⋅   ⋯   ⋅ ∂ Z L + 1 ∂ Z L ⋅ ∂ Z L ∂ b L ∀   L = 1 , 2 , … , N

然后:

ZLZL1=ZLAL1AL1ZL1 ∂ Z L ∂ Z L − 1 = ∂ Z L ∂ A L − 1 ⋅ ∂ A L − 1 ∂ Z L − 1

  可见这里边有很多应用链式法则和矩阵求导。所以需要把这块仔细研究好。

  所以本篇加上后续的文章一共三篇,内容分别是基本的Jacobian(向量对向量求导,面向 ZLZL1 ∂ Z L ∂ Z L − 1 )这个基本上多元微积分中都学过了,属于回顾;复杂一些的向量和矩阵的函数的求导,主要是迹(trace)的应用(面向 JZN ∂ J ∂ Z N );对矩阵求导,主要是Kronecker积的应用,面向 ZLWL ∂ Z L ∂ W L

Vector Calculus

  这个部分其实就是多元微积分的内容,也即 f=f(x,y) f = f ( x , y ) ,那么 f f 的梯度:

f=[fxfy]

  例如 f=f(x,y)=3x2y f = f ( x , y ) = 3 x 2 y 那么 f=[6xy3x2] ▽ f = [ 6 x y 3 x 2 ] .

Matrix Calculus

  假如我们除了有 f f 这个函数,还有g这个函数,那么我们如果把 f f g的梯度按行堆起来,就得到了Jacobian矩阵(雅克比矩阵):

[fg]=fxgxfyfy [ ▽ f ▽ g ] = [ ∂ f ∂ x ∂ f ∂ y ∂ g ∂ x ∂ f ∂ y ]

  一般的,如果 x x 是一个 n×1 n × 1 的向量:

x=x1x2xn x = [ x 1 x 2 ⋮ x n ]

   y y 是一个 m×1 m × 1 的向量,每一个元素 yi y i x x 的函数:
y=y1y2yn=f1(x)f2(x)fn(x) y = [ y 1 y 2 ⋮ y n ] = [ f 1 ( x ) f 2 ( x ) ⋮ f n ( x ) ]

  那么对应的Jacobian矩阵是:
yx=f1x1f2x1fmx1f1x2f2x2fmx2f1xnf2xnfmxn ∂ y ∂ x = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 … ∂ f 1 ∂ x n ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 … ∂ f 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ f m ∂ x 1 ∂ f m ∂ x 2 … ∂ f m ∂ x n ]

Derivative of Element-Wise Operators

  这个element-wise,也就是针对向量中每一个元素进行运算,例如两个向量求和、求差,逐元素求乘法,逐元素算一个函数等等,这个很简单,直接对着雅克比矩阵的定义就可以计算出来。(下面的例子懒得打公式,就直接贴图了)

  又比如 y=Ax y = A x ,那么 yx=A ∂ y ∂ x = A ,那么对于 y=ixi y = ∑ i x i ,可以写作 y=1Tx y = 1 T x ,所以梯度也就是 yx=1T ∂ y ∂ x = 1 T

  再比如DNN中的 AL=σ(ZL) A L = σ ( Z L ) ,雅克比矩阵就是

ALZL=diag(σ(ZL)) ∂ A L ∂ Z L = d i a g ( σ ′ ( Z L ) )

  这是因为逐元素求函数, aLi=σ(zLi) a i L = σ ( z i L ) ,只和自己对应的那个元素求,所以雅克比矩阵是一个对角阵。

链式法则 Chain Rule

  链式法则本身其实很简单,如果 f:RmRn f : R m → R n , g:RnRk g : R n → R k ,那么:

g(f(x))x=gffx ∂ g ( f ( x ) ) ∂ x = ∂ g ∂ f ⋅ ∂ f ∂ x

  这个证明用total derivative就可以证了,很简单的(Hint:
f(x+Δx,y+Δy)f(x,y)=f(x+Δx,y+Δy)f(x,y+Δy)+f(x,y+Δy)f(x+Δx,y+Δy) f ( x + Δ x , y + Δ y ) − f ( x , y ) = f ( x + Δ x , y + Δ y ) − f ( x , y + Δ y ) + f ( x , y + Δ y ) − f ( x + Δ x , y + Δ y ) )。

所以有如下的表达式:

ZLZL1=ZLAL1AL1ZL1 ∂ Z L ∂ Z L − 1 = ∂ Z L ∂ A L − 1 ⋅ ∂ A L − 1 ∂ Z L − 1

上边已经计算了:

ZLAL1=WL ∂ Z L ∂ A L − 1 = W L

ALZL=diag(σ(ZL)) ∂ A L ∂ Z L = d i a g ( σ ′ ( Z L ) )

所以:

ZLZL1=ZLAL1AL1ZL1=WLdiag(σ(ZL)) ∂ Z L ∂ Z L − 1 = ∂ Z L ∂ A L − 1 ⋅ ∂ A L − 1 ∂ Z L − 1 = W L ⋅ d i a g ( σ ′ ( Z L ) )

这样就得到了一个BP中一个重要的结果。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值