基本函数导数公式

Copyright © Microsoft Corporation. All rights reserved.
适用于License版权许可

更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区

如何浏览本系列教程

由于里面包含了大量必要的数学公式,都是用LaTex格式编写的,所以:

  1. 如果使用浏览器在线观看的话,可以使用Chrome浏览器,加这个Math展示控件

  2. 也可以clone全部内容到本地,然后用VSCode浏览,但VSCode中需要安装能读取Markdown格式的扩展,比如Markdown Preview Enhanced.

这篇文章呢更多的是一些可能要用到的数学公式的推导,是一种理论基础,感兴趣的同学可以仔细瞅瞅,想直接上手的同学也可以直接跳过这一篇~

下面进入正题!站稳了别趴下!

  1. y=cy=cy=c

(1)y′=0y'=0 \tag 1y′=0(1)
2. y=xay=x^ay=xa

(2)y′=axa−1y'=ax^{a-1} \tag 2y′=axa−1(2)

  1. y=logaxy=log_axy=loga​x

(3)y′=1xlogae=1xlnay'=\frac{1}{x}log_ae=\frac{1}{xlna} \tag 3y′=x1​loga​e=xlna1​(3)
(因为logae=1logea=1lna)(因为log_ae=\frac{1}{log_ea}=\frac{1}{lna})(因为loga​e=loge​a1​=lna1​)

  1. y=lnxy=lnxy=lnx

(4)y′=1xy'=\frac{1}{x} \tag4y′=x1​(4)

  1. y=axy=a^xy=ax

(5)y′=axlnay'=a^xlna \tag5y′=axlna(5)

  1. y=exy=e^xy=ex

(6)y′=exy'=e^x \tag6y′=ex(6)

  1. y=e−xy=e^{-x}y=e−x

(7)y′=−e−xy'=-e^{-x} \tag7y′=−e−x(7)

  1. 正弦函数y=sin(x)y=sin(x)y=sin(x)

(8)y′=cos(x)y'=cos(x) \tag 8y′=cos(x)(8)

  1. 余弦函数 y=cos(x)y=cos(x)y=cos(x)

(9)y′=−sin(x)y'=-sin(x) \tag 9y′=−sin(x)(9)

  1. 正切函数 y=tg(x)y=tg(x)y=tg(x)

(10)y′=sec2(x)=1cos2xy'=sec^2(x)=\frac{1}{cos^2x} \tag{10}y′=sec2(x)=cos2x1​(10)

  1. 余切函数 y=ctg(x)y=ctg(x)y=ctg(x)

(11)y′=−csc2(x)y'=-csc^2(x) \tag{11}y′=−csc2(x)(11)

  1. 反正弦函数 y=arcsin(x)y=arcsin(x)y=arcsin(x)

(12)y′=11−x2y'=\frac{1}{\sqrt{1-x^2}} \tag{12}y′=1−x2​1​(12)

  1. 反余弦函数 y=arccos(x)y=arccos(x)y=arccos(x)

(13)y′=−11−x2y'=-\frac{1}{\sqrt{1-x^2}} \tag{13}y′=−1−x2​1​(13)

  1. 反正切函数 y=arctan(x)y=arctan(x)y=arctan(x)

(14)y′=11+x2y'=\frac{1}{1+x^2} \tag{14}y′=1+x21​(14)

  1. 反余切函数 y=arcctg(x)y=arcctg(x)y=arcctg(x)

(15)y′=−11+x2y'=-\frac{1}{1+x^2} \tag{15}y′=−1+x21​(15)

  1. 双曲正弦函数 y=sinh(x)=(ex−e−x)/2y=sinh(x)=(e^x-e^{-x})/2y=sinh(x)=(ex−e−x)/2

(16)y′=cosh(x)y'=cosh(x) \tag{16}y′=cosh(x)(16)

  1. 双曲余弦函数 y=cosh(x)=(ex+e−x)/2y=cosh(x)=(e^x+e^{-x})/2y=cosh(x)=(ex+e−x)/2

(17)y′=sinh(x)y'=sinh(x) \tag{17}y′=sinh(x)(17)

  1. 双曲正切函数y=tanh(x)=(ex−e−x)/(ex+e−x)y=tanh(x)=(e^x-e^{-x})/(e^x+e^{-x})y=tanh(x)=(ex−e−x)/(ex+e−x)

(18)y′=sech2(x)=1−tanh2(x)y'=sech^2(x)=1-tanh^2(x) \tag{18}y′=sech2(x)=1−tanh2(x)(18)

  1. 双曲余切函数y=coth(x)=(ex+e−x)/(ex−e−x)y=coth(x)=(e^x+e^{-x})/(e^x-e^{-x})y=coth(x)=(ex+e−x)/(ex−e−x)

(19)y′=−csch2(x)y'=-csch^2(x) \tag{19}y′=−csch2(x)(19)

  1. 双曲正割函数y=sech(x)=2/(ex+e−x)y=sech(x)=2/(e^x+e^{-x})y=sech(x)=2/(ex+e−x)

(20)y′=−sech(x)∗tanh(x)y'=-sech(x)*tanh(x) \tag{20}y′=−sech(x)∗tanh(x)(20)

  1. 双曲余割函数y=csch(x)=2/(ex−e−x)y=csch(x)=2/(e^x-e^{-x})y=csch(x)=2/(ex−e−x)

(21)y′=−csch(x)∗coth(x)y'=-csch(x)*coth(x) \tag{21}y′=−csch(x)∗coth(x)(21)

导数四则运算

  1. (30)[u(x)+v(x)]’=u’(x)+v’(x)[u(x) + v(x)]’ = u’(x) + v’(x) \tag{30}[u(x)+v(x)]’=u’(x)+v’(x)(30)
  2. (31)[u(x)−v(x)]’=u’(x)−v’(x)[u(x) - v(x)]’ = u’(x) - v’(x) \tag{31}[u(x)−v(x)]’=u’(x)−v’(x)(31)
  3. (32)[u(x)∗v(x)]’=u’(x)∗v(x)+v’(x)∗u(x)[u(x)*v(x)]’ = u’(x)*v(x) + v’(x)*u(x) \tag{32}[u(x)∗v(x)]’=u’(x)∗v(x)+v’(x)∗u(x)(32)
  4. (33)[u(x)v(x)]′=u′(x)v(x)−v′(x)u(x)v2(x)[\frac{u(x)}{v(x)}]'=\frac{u'(x)v(x)-v'(x)u(x)}{v^2(x)} \tag{33}[v(x)u(x)​]′=v2(x)u′(x)v(x)−v′(x)u(x)​(33)

偏导数

  1. 如Z=f(x,y)Z=f(x,y)Z=f(x,y)

则Z对x的偏导可以理解为当y是个常数时,Z单独对x求导:

(40)Zx′=fx′(x,y)=∂Z∂xZ'_x=f'_x(x,y)=\frac{\partial{Z}}{\partial{x}} \tag{40}Zx′​=fx′​(x,y)=∂x∂Z​(40)

则Z对y的偏导可以理解为当x是个常数时,Z单独对y求导:

(41)Zy′=fy′(x,y)=∂Z∂yZ'_y=f'_y(x,y)=\frac{\partial{Z}}{\partial{y}} \tag{41}Zy′​=fy′​(x,y)=∂y∂Z​(41)

在二元函数中,偏导的何意义,就是对任意的y=y0y=y_0y=y0​的取值,在二元函数曲面上做一个y=y0y=y_0y=y0​切片,得到Z=f(x,y0)Z = f(x, y_0)Z=f(x,y0​)的曲线,这条曲线的一阶导数就是Z对x的偏导。对x=x0x=x_0x=x0​同样,就是Z对y的偏导。

复合函数求导(链式法则)

  1. 如果 y=f(u),u=g(x)y=f(u), u=g(x)y=f(u),u=g(x) 则

(50)yx′=f′(u)⋅u′(x)=yu′⋅ux′=dydu⋅dudxy'_x = f'(u) \cdot u'(x) = y'_u \cdot u'_x=\frac{dy}{du} \cdot \frac{du}{dx} \tag{50}yx′​=f′(u)⋅u′(x)=yu′​⋅ux′​=dudy​⋅dxdu​(50)

  1. 如果y=f(u),u=g(v),v=h(x)y=f(u),u=g(v),v=h(x)y=f(u),u=g(v),v=h(x) 则

(51)dydx=f′(u)⋅g′(v)⋅h′(x)=dydu⋅dudv⋅dvdx\frac{dy}{dx}=f'(u) \cdot g'(v) \cdot h'(x)=\frac{dy}{du} \cdot \frac{du}{dv} \cdot \frac{dv}{dx} \tag{51} dxdy​=f′(u)⋅g′(v)⋅h′(x)=dudy​⋅dvdu​⋅dxdv​(51)

  1. 如Z=f(U,V)Z=f(U,V)Z=f(U,V),通过中间变量U=g(x,y),V=h(x,y)U = g(x,y), V=h(x,y)U=g(x,y),V=h(x,y)成为x,y的复合函数Z=f[g(x,y),h(x,y)]Z=f[g(x,y),h(x,y)]Z=f[g(x,y),h(x,y)]

(52)∂Z∂x=∂Z∂U⋅∂U∂x+∂Z∂V⋅∂V∂x\frac{\partial{Z}}{\partial{x}}=\frac{\partial{Z}}{\partial{U}} \cdot \frac{\partial{U}}{\partial{x}} + \frac{\partial{Z}}{\partial{V}} \cdot \frac{\partial{V}}{\partial{x}} \tag{52} ∂x∂Z​=∂U∂Z​⋅∂x∂U​+∂V∂Z​⋅∂x∂V​(52)

∂Z∂y=∂Z∂U∗∂U∂y+∂Z∂V∗∂V∂y\frac{\partial{Z}}{\partial{y}}=\frac{\partial{Z}}{\partial{U}} * \frac{\partial{U}}{\partial{y}} + \frac{\partial{Z}}{\partial{V}} * \frac{\partial{V}}{\partial{y}} ∂y∂Z​=∂U∂Z​∗∂y∂U​+∂V∂Z​∗∂y∂V​

矩阵求导

如A,B,XA,B,XA,B,X都是矩阵,

(60)B∂(AX)∂X=ATBB\frac{\partial{(AX)}}{\partial{X}} = A^TB \tag{60} B∂X∂(AX)​=ATB(60)

(61)B∂(XA)∂X=BATB\frac{\partial{(XA)}}{\partial{X}} = BA^T \tag{61} B∂X∂(XA)​=BAT(61)

(62)∂(XTA)∂X=∂(ATX)∂X=A\frac{\partial{(X^TA)}}{\partial{X}} = \frac{\partial{(A^TX)}}{\partial{X}}=A \tag{62} ∂X∂(XTA)​=∂X∂(ATX)​=A(62)

(63)∂(ATXB)∂X=ABT\frac{\partial{(A^TXB)}}{\partial{X}} = AB^T \tag{63} ∂X∂(ATXB)​=ABT(63)

(64)∂(ATXTB)∂X=BAT,dXTAXdX=(A+AT)X\frac{\partial{(A^TX^TB)}}{\partial{X}} = BA^T, {dX^TAX \over dX} = (A+A^T)X \tag{64} ∂X∂(ATXTB)​=BAT,dXdXTAX​=(A+AT)X(64)

(65)dXTdX=I,dXdXT=I,dXTXdX=2X{dX^T \over dX} = I, {dX \over dX^T} = I, {dX^TX \over dX}=2X\tag{65}dXdXT​=I,dXTdX​=I,dXdXTX​=2X(65)

dudXT=(duTdX)T{du \over dX^T} = ({du^T \over dX})^TdXTdu​=(dXduT​)T

(66)duTvdx=duTdxv+dvTdxuT,duvTdx=dudxvT+udvTdx{du^Tv \over dx} = {du^T \over dx}v + {dv^T \over dx}u^T, {duv^T \over dx} = {du \over dx}v^T + u{dv^T \over dx} \tag{66}dxduTv​=dxduT​v+dxdvT​uT,dxduvT​=dxdu​vT+udxdvT​(66)

(67)dABdX=dAdXB+AdBdX{dAB \over dX} = {dA \over dX}B + A{dB \over dX} \tag{67}dXdAB​=dXdA​B+AdXdB​(67)

(68)duTXvdx=uvT,duTXTXudX=2XuuT{du^TXv \over dx}=uv^T, {du^TX^TXu \over dX}=2Xuu^T \tag{68}dxduTXv​=uvT,dXduTXTXu​=2XuuT(68)

(69)d[(Xu−v)T(Xu−v)]dX=2(Xu−v)uT{d[(Xu-v)^T(Xu-v)] \over dX}=2(Xu-v)u^T \tag{69}dXd[(Xu−v)T(Xu−v)]​=2(Xu−v)uT(69)

激活函数求导

sigmoid函数:A=11+e−ZA = \frac{1}{1+e^{-Z}}A=1+e−Z1​

利用公式33,令:u=1,v=1+e−Zu=1,v=1+e^{-Z}u=1,v=1+e−Z 则

(70)Az′=u′v−v′uv2=0−(1+e−z)′(1+e−z)2A'_z = \frac{u'v-v'u}{v^2}=\frac{0-(1+e^{-z})'}{(1+e^{-z})^2} \tag{70} Az′​=v2u′v−v′u​=(1+e−z)20−(1+e−z)′​(70)
=e−z(1+e−z)2=1+e−z−1(1+e−z)2=\frac{e^{-z}}{(1+e^{-z})^2} =\frac{1+e^{-z}-1}{(1+e^{-z})^2} =(1+e−z)2e−z​=(1+e−z)21+e−z−1​
=11+e−z−(11+e−z)2=\frac{1}{1+e^{-z}}-(\frac{1}{1+e^{-z}})^2 =1+e−z1​−(1+e−z1​)2
=A−A2=A(1−A)=A-A^2=A(1-A) =A−A2=A(1−A)

tanh函数:A=eZ−e−ZeZ+e−ZA=\frac{e^{Z}-e^{-Z}}{e^{Z}+e^{-Z}}A=eZ+e−ZeZ−e−Z​

利用公式23,令:u=eZ−e−Z,v=eZ+e−Zu={e^{Z}-e^{-Z}},v=e^{Z}+e^{-Z}u=eZ−e−Z,v=eZ+e−Z 则

(71)AZ′=u′v−v′uv2A'_Z=\frac{u'v-v'u}{v^2} \tag{71} AZ′​=v2u′v−v′u​(71)
=(eZ−e−Z)′(eZ+e−Z)−(eZ+e−Z)′(eZ−e−Z)(eZ+e−Z)2=\frac{(e^{Z}-e^{-Z})'(e^{Z}+e^{-Z})-(e^{Z}+e^{-Z})'(e^{Z}-e^{-Z})}{(e^{Z}+e^{-Z})^2} =(eZ+e−Z)2(eZ−e−Z)′(eZ+e−Z)−(eZ+e−Z)′(eZ−e−Z)​
=(eZ+e−Z)(eZ+e−Z)−(eZ−e−Z)(eZ−e−Z)(eZ+e−Z)2=\frac{(e^{Z}+e^{-Z})(e^{Z}+e^{-Z})-(e^{Z}-e^{-Z})(e^{Z}-e^{-Z})}{(e^{Z}+e^{-Z})^2} =(eZ+e−Z)2(eZ+e−Z)(eZ+e−Z)−(eZ−e−Z)(eZ−e−Z)​
=(eZ+e−Z)2−(eZ−e−Z)2(eZ+e−Z)2=\frac{(e^{Z}+e^{-Z})^2-(e^{Z}-e^{-Z})^2}{(e^{Z}+e^{-Z})^2} =(eZ+e−Z)2(eZ+e−Z)2−(eZ−e−Z)2​
=1−((eZ−e−ZeZ+e−Z)2=1−A2=1-(\frac{(e^{Z}-e^{-Z}}{e^{Z}+e^{-Z}})^2=1-A^2 =1−(eZ+e−Z(eZ−e−Z​)2=1−A2

反向传播四大公式推导

著名的反向传播四大公式是:

(80)δL=∇aC⊙σ′(ZL)\delta^{L} = \nabla_{a}C \odot \sigma_{'}(Z^L) \tag{80}δL=∇a​C⊙σ′​(ZL)(80)
(81)δl=((Wl+1)Tδl+1)⊙σ′(Zl)\delta^{l} = ((W^{l + 1})^T\delta^{l+1})\odot\sigma_{'}(Z^l) \tag{81}δl=((Wl+1)Tδl+1)⊙σ′​(Zl)(81)
(82)∂C∂bjl=δjl\frac{\partial{C}}{\partial{b_j^l}} = \delta_j^l \tag{82}∂bjl​∂C​=δjl​(82)
(83)∂C∂wjkl=akl−1δjl\frac{\partial{C}}{\partial{w_{jk}^{l}}} = a_k^{l-1}\delta_j^l \tag{83}∂wjkl​∂C​=akl−1​δjl​(83)

下面我们用一个简单的两个神经元的全连接神经网络来直观解释一下这四个公式,

每个结点的输入输出标记如图上所示,使用MSE作为计算loss的函数,那么可以得到这张计算图中的计算过公式如下所示:

e01=12(y−a13)2e_{01} = \frac{1}{2}(y-a_1^3)^2e01​=21​(y−a13​)2
a13=sigmoid(z13)a_1^3 = sigmoid(z_1^3)a13​=sigmoid(z13​)
z13=(w112⋅a12+w122⋅a22+b13)z_1^3 = (w_{11}^2 \cdot a_1^2 + w_{12}^2 \cdot a_2^2 + b_1^3)z13​=(w112​⋅a12​+w122​⋅a22​+b13​)
a12=sigmoid(z12)a_1^2 = sigmoid(z_1^2)a12​=sigmoid(z12​)
z12=(w111⋅a11+w121⋅a21+b12)z_1^2 = (w_{11}^1 \cdot a_1^1 + w_{12}^1 \cdot a_2^1 + b_1^2)z12​=(w111​⋅a11​+w121​⋅a21​+b12​)

我们按照反向传播中梯度下降的原理来对损失求梯度,计算过程如下:

∂eo1∂w112=∂eo1∂a13∂a13∂z13∂z13∂w112=∂eo1∂a13∂a13∂z13a12\frac{\partial{e_{o1}}}{\partial{w_{11}^2}} = \frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}\frac{\partial{z_{1}^3}}{\partial{w_{11}^2}}=\frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}a_{1}^2∂w112​∂eo1​​=∂a13​∂eo1​​∂z13​∂a13​​∂w112​∂z13​​=∂a13​∂eo1​​∂z13​∂a13​​a12​

∂eo1∂w122=∂eo1∂a13∂a13∂z13∂z13∂w122=∂eo1∂a13∂a13∂z13a22\frac{\partial{e_{o1}}}{\partial{w_{12}^2}} = \frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}\frac{\partial{z_{1}^3}}{\partial{w_{12}^2}}=\frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}a_{2}^2∂w122​∂eo1​​=∂a13​∂eo1​​∂z13​∂a13​​∂w122​∂z13​​=∂a13​∂eo1​​∂z13​∂a13​​a22​

∂eo1∂w111=∂eo1∂a13∂a13∂z13∂z13∂a12∂a12∂z12∂z12∂w111=∂eo1∂a13∂a13∂z13∂z13∂a12∂a12∂z12a11\frac{\partial{e_{o1}}}{\partial{w_{11}^1}} = \frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}\frac{\partial{z_{1}^3}}{\partial{a_{1}^2}}\frac{\partial{a_{1}^2}}{\partial{z_{1}^2}}\frac{\partial{z_{1}^2}}{\partial{w_{11}^1}} = \frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}\frac{\partial{z_{1}^3}}{\partial{a_{1}^2}}\frac{\partial{a_{1}^2}}{\partial{z_{1}^2}}a_1^1∂w111​∂eo1​​=∂a13​∂eo1​​∂z13​∂a13​​∂a12​∂z13​​∂z12​∂a12​​∂w111​∂z12​​=∂a13​∂eo1​​∂z13​∂a13​​∂a12​∂z13​​∂z12​∂a12​​a11​

=∂eo1∂a13∂a13∂z13w112∂a12∂z12a11=\frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}w_{11}^2\frac{\partial{a_{1}^2}}{\partial{z_{1}^2}}a_1^1=∂a13​∂eo1​​∂z13​∂a13​​w112​∂z12​∂a12​​a11​

∂eo1∂w121=∂eo1∂a13∂a13∂z13∂z13∂a22∂a22∂z12∂z12∂w121=∂eo1∂a13∂a13∂z13∂z13∂a22∂a22∂z12a22\frac{\partial{e_{o1}}}{\partial{w_{12}^1}} = \frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}\frac{\partial{z_{1}^3}}{\partial{a_{2}^2}}\frac{\partial{a_{2}^2}}{\partial{z_{1}^2}}\frac{\partial{z_{1}^2}}{\partial{w_{12}^1}} = \frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}\frac{\partial{z_{1}^3}}{\partial{a_{2}^2}}\frac{\partial{a_{2}^2}}{\partial{z_{1}^2}}a_2^2∂w121​∂eo1​​=∂a13​∂eo1​​∂z13​∂a13​​∂a22​∂z13​​∂z12​∂a22​​∂w121​∂z12​​=∂a13​∂eo1​​∂z13​∂a13​​∂a22​∂z13​​∂z12​∂a22​​a22​

=∂eo1∂a13∂a13∂z13w122∂a22∂z12a22=\frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}w_{12}^2\frac{\partial{a_{2}^2}}{\partial{z_{1}^2}}a_2^2=∂a13​∂eo1​​∂z13​∂a13​​w122​∂z12​∂a22​​a22​

上述式中,∂a∂z\frac{\partial{a}}{\partial{z}}∂z∂a​是激活函数的导数,即σ′(z)\sigma^{'}(z)σ′(z)项。观察到在求偏导数过程中有共同项∂eo1∂a13∂a13∂z13\frac{\partial{e_{o1}}}{\partial{a_{1}^3}}\frac{\partial{a_{1}^3}}{\partial{z_{1}^3}}∂a13​∂eo1​​∂z13​∂a13​​,采用δ\deltaδ符号记录,用矩阵形式表示,
即:

δL=[∂eo1∂aiL∂aiL∂ziL]=∇aC⊙σ′(ZL)\delta^L = [\frac{\partial{e_{o1}}}{\partial{a_{i}^L}}\frac{\partial{a_{i}^L}}{\partial{z_{i}^L}}] = \nabla_{a}C\odot\sigma^{'}(Z^L)δL=[∂aiL​∂eo1​​∂ziL​∂aiL​​]=∇a​C⊙σ′(ZL)

上述式中,[ai][a_i][ai​]表示一个元素是a的矩阵,∇aC\nabla_{a}C∇a​C表示将损失CCC对aaa求梯度,⊙\odot⊙表示矩阵element wise的乘积(也就是矩阵对应位置的元素相乘)。

从上面的推导过程中,我们可以得出δ\deltaδ矩阵的递推公式:

δL−1=(WL)T[∂eo1∂aiL∂aiL∂ziL]⊙σ′(ZL−1)\delta^{L-1} = (W^L)^T[\frac{\partial{e_{o1}}}{\partial{a_{i}^L}}\frac{\partial{a_{i}^L}}{\partial{z_{i}^L}}]\odot\sigma^{'}(Z^{L - 1})δL−1=(WL)T[∂aiL​∂eo1​​∂ziL​∂aiL​​]⊙σ′(ZL−1)

所以在反向传播过程中只需要逐层利用上一层的δl\delta^lδl进行递推即可。

相对而言,这是一个非常直观的结果,这份推导过程也是不严谨的。下面,我们会从比较严格的数学定义角度进行推导,首先要补充一些定义。

标量对矩阵导数的定义

假定yyy是一个标量,XXX是一个N×MN \times MN×M大小的矩阵,有y=f(X)y=f(X)y=f(X), f()f()f()是一个函数。我们来看dfdfdf应该如何计算。

首先给出定义:

df=∑jM∑iN∂f∂xijdxijdf = \sum_j^M\sum_i^N \frac{\partial{f}}{\partial{x_{ij}}}dx_{ij} df=j∑M​i∑N​∂xij​∂f​dxij​

下面我们引入矩阵迹的概念,所谓矩阵的迹,就是矩阵对角线元素之和。也就是说:

tr(X)=∑ixiitr(X) = \sum_i x_{ii} tr(X)=i∑​xii​

引入迹的概念后,我们来看上面的梯度计算是不是可以用迹来表达呢?

(90)∂f∂X=(∂f∂x11∂f∂x12…∂f∂x1M∂f∂x21∂f∂x22…∂f∂x2M⋮⋮⋱⋮∂f∂xN1∂f∂xN2…∂f∂xNM)\frac{\partial{f}}{\partial{X}} = \begin{pmatrix} \frac{\partial{f}}{\partial{x_{11}}} & \frac{\partial{f}}{\partial{x_{12}}} & \dots & \frac{\partial{f}}{\partial{x_{1M}}} \\ \frac{\partial{f}}{\partial{x_{21}}} & \frac{\partial{f}}{\partial{x_{22}}} & \dots & \frac{\partial{f}}{\partial{x_{2M}}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial{f}}{\partial{x_{N1}}} & \frac{\partial{f}}{\partial{x_{N2}}} & \dots & \frac{\partial{f}}{\partial{x_{NM}}} \end{pmatrix} \tag{90} ∂X∂f​=⎝⎜⎜⎜⎜⎛​∂x11​∂f​∂x21​∂f​⋮∂xN1​∂f​​∂x12​∂f​∂x22​∂f​⋮∂xN2​∂f​​……⋱…​∂x1M​∂f​∂x2M​∂f​⋮∂xNM​∂f​​⎠⎟⎟⎟⎟⎞​(90)

(91)dX=(dx11dx12…dx1Mdx21dx22…dx2M⋮⋮⋱⋮dxN1dxN2…dxNM)dX = \begin{pmatrix} dx_{11} & d{x_{12}} & \dots & d{x_{1M}} \\ d{x_{21}} & d{x_{22}} & \dots & d{x_{2M}} \\ \vdots & \vdots & \ddots & \vdots \\ d{x_{N1}} & d{x_{N2}} & \dots & d{x_{NM}} \end{pmatrix} \tag{91} dX=⎝⎜⎜⎜⎛​dx11​dx21​⋮dxN1​​dx12​dx22​⋮dxN2​​……⋱…​dx1M​dx2M​⋮dxNM​​⎠⎟⎟⎟⎞​(91)

我们来看矩阵(90)(90)(90)的转置和矩阵(91)(91)(91)乘积的对角线元素

((∂f∂X)TdX)jj=∑iN∂f∂xijdxij((\frac{\partial f}{\partial X})^T dX)_{jj}=\sum_i^N \frac{\partial f}{\partial x_{ij}} dx_{ij} ((∂X∂f​)TdX)jj​=i∑N​∂xij​∂f​dxij​

因此,

(92)tr((∂f∂X)TdX)=∑jM∑iN∂f∂xijdxij=df=tr(df)tr({(\frac{\partial{f}}{\partial{X}})}^TdX) = \sum_j^M\sum_i^N\frac{\partial{f}}{\partial{x_{ij}}}dx_{ij} = df = tr(df) \tag{92} tr((∂X∂f​)TdX)=j∑M​i∑N​∂xij​∂f​dxij​=df=tr(df)(92)

上式的最后一个等号是因为dfdfdf是一个标量,标量的迹就等于其本身。

矩阵迹和导数的部分性质

这里将会给出部分矩阵的迹和导数的性质,作为后面推导过程的参考。性子急的同学可以姑且默认这是一些结论。

(93)d(X+Y)=dX+dYd(X + Y) = dX + dY \tag{93} d(X+Y)=dX+dY(93)
(94)d(XY)=(dX)Y+X(dY)d(XY) = (dX)Y + X(dY)\tag{94} d(XY)=(dX)Y+X(dY)(94)
(95)dXT=(dX)TdX^T = {(dX)}^T \tag{95} dXT=(dX)T(95)
(96)d(tr(X))=tr(dX)d(tr(X)) = tr(dX) \tag{96} d(tr(X))=tr(dX)(96)
(97)d(X⊙Y)=dX⊙Y+X⊙dYd(X \odot Y) = dX \odot Y + X \odot dY \tag{97} d(X⊙Y)=dX⊙Y+X⊙dY(97)
(98)d(f(X))=f′(X)⊙dXd(f(X)) = f^{'}(X) \odot dX \tag{98} d(f(X))=f′(X)⊙dX(98)
(99)tr(XY)=tr(YX)tr(XY) = tr(YX) \tag{99} tr(XY)=tr(YX)(99)
(100)tr(AT(B⊙C))=tr((A⊙B)TC)tr(A^T (B \odot C)) = tr((A \odot B)^T C) \tag{100} tr(AT(B⊙C))=tr((A⊙B)TC)(100)

以上各性质的证明方法类似,我们选取式(94)作为证明的示例:

Z=XYZ = XY Z=XY

则Z中的任意一项是

zij=∑kxikykjz_{ij} = \sum_k x_{ik}y_{kj} zij​=k∑​xik​ykj​
dzij=∑kd(xikykj)dz_{ij} = \sum_k d(x_{ik}y_{kj}) dzij​=k∑​d(xik​ykj​)
=∑k(dxik)ykj+∑kxik(dykj)= \sum_k (dx_{ik}) y_{kj} + \sum_k x_{ik} (dy_{kj}) =k∑​(dxik​)ykj​+k∑​xik​(dykj​)
=dXij⋅Yij+Xij⋅dYij=dX_{ij} \cdot Y_{ij} + X_{ij} \cdot dY_{ij} =dXij​⋅Yij​+Xij​⋅dYij​
从上式可见,dZdZdZ的每一项和(dX)Y+X(dY)(dX)Y + X(dY)(dX)Y+X(dY)的每一项都是相等的。因此,可以得出式(94)成立。

神经网络有关公式证明:

  • 首先,来看一个通用情况,已知f=ATXBf = A^TXBf=ATXB,A,BA,BA,B是常矢量,希望得到∂f∂X\frac{\partial{f}}{\partial{X}}∂X∂f​,推导过程如下

    根据式(94),

    df=d(ATXB)=d(ATX)B+ATX(dB)=d(ATX)B+0=d(AT)XB+ATdXB=ATdXBdf = d(A^TXB) = d(A^TX)B + A^TX(dB) = d(A^TX)B + 0 = d(A^T)XB+A^TdXB = A^TdXB df=d(ATXB)=d(ATX)B+ATX(dB)=d(ATX)B+0=d(AT)XB+ATdXB=ATdXB

    由于dfdfdf是一个标量,标量的迹等于本身,同时利用公式(99):

    df=tr(df)=tr(ATdXB)=tr(BATdX)df = tr(df) = tr(A^TdXB) = tr(BA^TdX) df=tr(df)=tr(ATdXB)=tr(BATdX)

    由于公式(92):

    tr(df)=tr((∂f∂X)TdX)tr(df) = tr({(\frac{\partial{f}}{\partial{X}})}^TdX) tr(df)=tr((∂X∂f​)TdX)

    可以得到:

    (∂f∂X)T=BAT(\frac{\partial{f}}{\partial{X}})^T = BA^T (∂X∂f​)T=BAT
    (101)∂f∂X=ABT\frac{\partial{f}}{\partial{X}} = AB^T \tag{101} ∂X∂f​=ABT(101)

  • 我们来看全连接层的情况:

    Y=WX+BY = WX + BY=WX+B

    取全连接层其中一个元素

    y=wX+by = wX + by=wX+b

    这里的www是权重矩阵的一行,尺寸是1×M1 \times M1×M,X是一个大小为M×1M \times 1M×1的矢量,y是一个标量,若添加一个大小是1的单位阵,上式整体保持不变:

    y=(wT)TXI+by = (w^T)^TXI + by=(wT)TXI+b

    利用式(92),可以得到

    ∂y∂X=ITwT=wT\frac{\partial{y}}{\partial{X}} = I^Tw^T = w^T∂X∂y​=ITwT=wT

    因此在误差传递的四大公式中,在根据上层传递回来的误差δ\deltaδ继续传递的过程中,利用链式法则,有

    δL−1=(WL)TδL⊙σ′(ZL−1)\delta^{L-1} = (W^L)^T \delta^L \odot \sigma^{'}(Z^{L - 1})δL−1=(WL)TδL⊙σ′(ZL−1)

    同理,若将y=wX+by=wX+by=wX+b视作:

    y=IwX+by = IwX + b y=IwX+b

    那么利用式(92),可以得到:

    ∂y∂w=XT\frac{\partial{y}}{\partial{w}} = X^T∂w∂y​=XT

  • 使用softmax和交叉熵来计算损失的情况下:

    l=−YTlog(softmax(Z))l = - Y^Tlog(softmax(Z))l=−YTlog(softmax(Z))

    式中,yyy是数据的标签,ZZZ是网络预测的输出,yyy和ZZZ的维度是N×1N \times 1N×1。经过softmax处理作为概率。希望能够得到∂l∂Z\frac{\partial{l}}{\partial{Z}}∂Z∂l​,下面是推导的过程:

    softmax(Z)=exp(Z)1Texp(Z)softmax(Z) = \frac{exp(Z)}{\boldsymbol{1}^Texp(Z)} softmax(Z)=1Texp(Z)exp(Z)​

    其中, 1\boldsymbol{1}1是一个维度是N×1N \times 1N×1的全1向量。将softmax表达式代入损失函数中,有

    (102)dl=−YTd(log(softmax(Z)))=−YTd(logexp(Z)1Texp(Z))=−YTdZ+YT1d(log(1Texp(Z)))dl = -Y^T d(log(softmax(Z)))\\ = -Y^T d (log\frac{exp(Z)}{\boldsymbol{1}^Texp(Z)}) \\ = -Y^T dZ + Y^T \boldsymbol{1}d(log(\boldsymbol{1}^Texp(Z))) \tag{102} dl=−YTd(log(softmax(Z)))=−YTd(log1Texp(Z)exp(Z)​)=−YTdZ+YT1d(log(1Texp(Z)))(102)

    下面来化简式(102)的后半部分,利用式(98):

    d(log(1Texp(Z)))=log′(1Texp(Z))⊙dZ=1T(exp(Z)⊙dZ)1Texp(Z)d(log(\boldsymbol{1}^Texp(Z))) = log^{'}(\boldsymbol{1}^Texp(Z)) \odot dZ = \frac{\boldsymbol{1}^T(exp(Z)\odot dZ)}{\boldsymbol{1}^Texp(Z)} d(log(1Texp(Z)))=log′(1Texp(Z))⊙dZ=1Texp(Z)1T(exp(Z)⊙dZ)​

    利用式(100),可以得到

    tr(YT11T(exp(Z)⊙dZ)1Texp(Z))=tr(YT1(1⊙(exp(Z))TdZ)1Texp(Z))tr(Y^T \boldsymbol{1}\frac{\boldsymbol{1}^T(exp(Z)\odot dZ)}{\boldsymbol{1}^Texp(Z)}) = tr(Y^T \boldsymbol{1}\frac{(\boldsymbol{1} \odot (exp(Z))^T dZ)}{\boldsymbol{1}^Texp(Z)}) tr(YT11Texp(Z)1T(exp(Z)⊙dZ)​)=tr(YT11Texp(Z)(1⊙(exp(Z))TdZ)​)
    (103)=tr(YT1exp(Z)TdZ1Texp(Z))=tr(YT1softmax(Z)TdZ)= tr(Y^T \boldsymbol{1}\frac{exp(Z)^T dZ}{\boldsymbol{1}^Texp(Z)}) = tr(Y^T \boldsymbol{1} softmax(Z)^TdZ) \tag{103} =tr(YT11Texp(Z)exp(Z)TdZ​)=tr(YT1softmax(Z)TdZ)(103)

    将式(103)代入式(102)并两边取迹,可以得到:

    dl=tr(dl)=tr(−yTdZ+yT1softmax(Z)TdZ)=tr((∂l∂Z)TdZ)dl = tr(dl) = tr(-y^T dZ + y^T\boldsymbol{1}softmax(Z)^TdZ) = tr((\frac{\partial{l}}{\partial{Z}})^TdZ) dl=tr(dl)=tr(−yTdZ+yT1softmax(Z)TdZ)=tr((∂Z∂l​)TdZ)

    在分类问题中,一个标签中只有一项会是1,所以YT1=1Y^T\boldsymbol{1} = 1YT1=1,因此有

    ∂l∂Z=softmax(Z)−Y\frac{\partial{l}}{\partial{Z}} = softmax(Z) - Y ∂Z∂l​=softmax(Z)−Y

    这也就是在损失函数中计算反向传播的误差的公式。

参考资料

矩阵求导术
点击这里学习更多神经网络基本课程
点击这里提交问题与建议
联系我们: msraeduhub@microsoft.com
学习了这么多,还没过瘾怎么办?欢迎加入“微软 AI 应用开发实战交流群”,跟大家一起畅谈AI,答疑解惑。扫描下方二维码,回复“申请入群”,即刻邀请你入群。

神经网络基本原理简明教程-0-基本函数导数公式相关推荐

  1. 神经网络基本原理简明教程

    神经网络基本原理简明教程 软件以及环境的准备 git安装官网 https://git-scm.com/ 介绍: Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. gith ...

  2. 神经网络基本原理简明教程之基础知识之数学表达式

    1.1 基本函数导数公式 1.1.1 基本函数及其导数 公式序号 函数 导数 备注 1 y=c y′=0 2 y=xa y′=axa−1 3 y=logax y′=1xlogae=1xlna 4 y= ...

  3. 神经网络基本原理简明教程-0-Python-Numpy库的点滴

    Python中的Numpy的基本知识 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习 ...

  4. 【微软出品】AI-神经网络基本原理简明教程

    来自 | 专知 [导读]我们现在有了很多非常厉害的深度学习框架,比如Tensorflow,CNTK,PaddlePaddle,Caffe2等等.然而,这些为了解决实际的应用问题而生的,而不是用来学习& ...

  5. CSDN Markdown简明教程3-表格和公式

    0. 目录 目录 前言 表格 1 表格 2 表格对齐方式 公式 1 行内公式 2 陈列公式displayed formulas 3 MathJax语法 深入 声明 1. 前言 Markdown是一种轻 ...

  6. 系列之0-基本数学导数公式

    基本函数导数公式 全套教程请点击:微软 AI 开发教程 基本数学导数公式 这篇文章的内容更多的是一些可能要用到的数学公式的导数公式和推导,是一种理论基础,感兴趣的同学可以仔细瞅瞅,想直接上手的同学也可 ...

  7. AI应用开发基础傻瓜书系列附录-基本数学导数公式

    基本函数导数公式 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智 ...

  8. 《CSDN Markdown简明教程》课程上线!

    ++++++++++++++++++++++++++ --视频教程地址---– ++++++++++++++++++++++++++ 0. 目录 目录 前言 课程详情 课程介绍 课程目标 课程目录 课 ...

  9. python 三引号_Python 简明教程 --- 4,Python 变量与基本数据类型

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 任何一个人都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码. -- Marti ...

最新文章

  1. 编写五子棋的完整python代码_python制作简单五子棋游戏
  2. ffmpeg 基本用法大全
  3. 【Tools】Modbus Slave 7安装详解
  4. error when defining a rule - SAP loyalty management的积分定义规则
  5. python爬虫入门心得体会,python爬虫入门和实例
  6. 实现用于意图识别的文本分类神经网络
  7. 使用Fresco实现简单的显示一张图片
  8. 下行文格式图片_下行文标准模版
  9. 上海车牌拍卖服务器响应时间,上海拍牌技巧:”48秒+700” 最晚出价为55秒
  10. 网页制作:制作一个官网
  11. signature=eccf62e7a0495066ee494ebfc791f8cc,测试帖,勿进
  12. LoRa和NB-IoT会长期共存吗?
  13. 项目是如何死掉的?太过真实!哈哈哈~嗝~~
  14. 基于vue+elementui 月子中心会所系统web
  15. OnWorks-免费Windows/Linux/MAC等系统云服务器
  16. Photoshop PS图层混合模式详解
  17. 【P9】Point to the Expression:Solving Algebraic Word Problems using the Expression-Pointer Transformer
  18. 创客学院 level1第二节学习完成
  19. 解决友坚恒天4412不能读取U盘的问题
  20. 签名MD5与文件MD5概念

热门文章

  1. Docker基础篇之快速上手
  2. 本地项目关联远程 git 仓库
  3. 计算机视觉目标检测之selective search算法
  4. Matlab多项式和符号函数简介
  5. 微信点餐小程序怎么做?微信小程序点餐系统制作
  6. 【金融风险管理】python进行股票标准差、方差、均值、离散系数、标准化、对数收益率
  7. HTML+CSS网页设计期末课程大作——运动系列NBA篮球主题(7页) 大学生运网页作品 篮球设计作业模板
  8. 教会微信:突破文件发送100M限制
  9. 你必须知道的家庭急救常识
  10. verilog 实现32位加法器(超前进位)