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

基本函数导数公式

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=axa1(2)

  1. y=logaxy=log_axy=logax

(3)y′=1xlogae=1xlnay'=\frac{1}{x}log_ae=\frac{1}{xlna} \tag 3y=x1logae=xlna1(3)
(因为logae=1logea=1lna)(因为log_ae=\frac{1}{log_ea}=\frac{1}{lna})(logae=logea1=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=ex

(7)y′=−e−xy'=-e^{-x} \tag7y=ex(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=1x21(12)

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

(13)y′=−11−x2y'=-\frac{1}{\sqrt{1-x^2}} \tag{13}y=1x21(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)=(exex)/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+ex)/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)=(exex)/(ex+ex)

(18)y′=sech2(x)=1−tanh2(x)y'=sech^2(x)=1-tanh^2(x) \tag{18}y=sech2(x)=1tanh2(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+ex)/(exex)

(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+ex)

(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/(exex)

(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)=xZ(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)=yZ(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)=yuux=dudydxdu(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)=dudydvdudxdv(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} xZ=UZxU+VZxV(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}} yZ=UZyU+VZyV

矩阵求导

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

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

(61)B∂(XA)∂X=BATB\frac{\partial{(XA)}}{\partial{X}} = BA^T \tag{61} BX(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=dxduTv+dxdvTuT,dxduvT=dxduvT+udxdvT(66)

(67)dABdX=dAdXB+AdBdX{dAB \over dX} = {dA \over dX}B + A{dB \over dX} \tag{67}dXdAB=dXdAB+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[(Xuv)T(Xuv)]=2(Xuv)uT(69)

激活函数求导

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

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

(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=v2uvvu=(1+ez)20(1+ez)(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+ez)2ez=(1+ez)21+ez1
=11+e−z−(11+e−z)2=\frac{1}{1+e^{-z}}-(\frac{1}{1+e^{-z}})^2 =1+ez1(1+ez1)2
=A−A2=A(1−A)=A-A^2=A(1-A) =AA2=A(1A)

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

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

(71)AZ′=u′v−v′uv2A'_Z=\frac{u'v-v'u}{v^2} \tag{71} AZ=v2uvvu(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+eZ)2(eZeZ)(eZ+eZ)(eZ+eZ)(eZeZ)
=(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+eZ)2(eZ+eZ)(eZ+eZ)(eZeZ)(eZeZ)
=(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+eZ)2(eZ+eZ)2(eZeZ)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+eZ(eZeZ)2=1A2

反向传播四大公式推导

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

(80)δL=∇aC⊙σ′(ZL)\delta^{L} = \nabla_{a}C \odot \sigma_{'}(Z^L) \tag{80}δL=aCσ(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}bjlC=δjl(82)
(83)∂C∂wjkl=akl−1δjl\frac{\partial{C}}{\partial{w_{jk}^{l}}} = a_k^{l-1}\delta_j^l \tag{83}wjklC=akl1δjl(83)

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

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

e01=12(y−a13)2e_{01} = \frac{1}{2}(y-a_1^3)^2e01=21(ya13)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=(w112a12+w122a22+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=(w111a11+w121a21+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}^2w112eo1=a13eo1z13a13w112z13=a13eo1z13a13a12

∂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}^2w122eo1=a13eo1z13a13w122z13=a13eo1z13a13a22

∂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^1w111eo1=a13eo1z13a13a12z13z12a12w111z12=a13eo1z13a13a12z13z12a12a11

=∂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=a13eo1z13a13w112z12a12a11

∂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^2w121eo1=a13eo1z13a13a22z13z12a22w121z12=a13eo1z13a13a22z13z12a22a22

=∂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=a13eo1z13a13w122z12a22a22

上述式中,∂a∂z\frac{\partial{a}}{\partial{z}}za是激活函数的导数,即σ′(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}}a13eo1z13a13,采用δ\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=[aiLeo1ziLaiL]=aCσ(ZL)

上述式中,[ai][a_i][ai]表示一个元素是a的矩阵,∇aC\nabla_{a}CaC表示将损失CCCaaa求梯度,⊙\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})δL1=(WL)T[aiLeo1ziLaiL]σ(ZL1)

所以在反向传播过程中只需要逐层利用上一层的δ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=jMiNxijfdxij

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

tr(X)=∑ixiitr(X) = \sum_i x_{ii} tr(X)=ixii

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

(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} Xf=x11fx21fxN1fx12fx22fxN2fx1Mfx2MfxNMf(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=dx11dx21dxN1dx12dx22dxN2dx1Mdx2MdxNM(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} ((Xf)TdX)jj=iNxijfdxij

因此,

(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((Xf)TdX)=jMiNxijfdxij=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(XY)=dXY+XdY(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(BC))=tr((AB)TC)(100)

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

Z=XYZ = XY Z=XY

则Z中的任意一项是

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

神经网络有关公式证明:

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

    根据式(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((Xf)TdX)

    可以得到:

    (∂f∂X)T=BAT(\frac{\partial{f}}{\partial{X}})^T = BA^T (Xf)T=BAT
    (101)∂f∂X=ABT\frac{\partial{f}}{\partial{X}} = AB^T \tag{101} Xf=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^TXy=ITwT=wT

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

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

    同理,若将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^Twy=XT

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

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

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

    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((Zl)TdZ)

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

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

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

参考资料

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软发布人工智能教育与学习共建社区

步入2019,人工智能(Artificial Intelligence)的浪潮依然汹涌,各国对于AI人才的需求进一步加大:2月,美国总统特朗普签署行政命令,正式启动美国人工智能计划;加拿大正通过“全球技能战…

流量复制_快速体验之《gor+diffy实现线上流量复制到测试环境》

对于没有副作用的接口(重复发送不会产生两份数据、不会产生多余的监控统计等等),就可以用这种方式方便的做回归测试。 部署三个不接外部流量的服务,两份老版本、一份新版本,把生产环境的流量复制到 Diffy 上。 如果生产环境支持通过请求头之类…

顶级程序员的心得 –– Coders at Work

顶级程序员的心得 –– Coders at Work说明:这篇文章是我 2010 年的原创,但是发现 csdn 的版本把格式全部搞坏了,原文在这里 我2009年读了 “Coders at Work”, 这是作者对15 位顶级程序员的采访, 总共600页。 从采访的模式看&…

springboot 技术图谱_java后台(Springboot)开发知识图谱高频技术汇总-学习路线...

【原创】java后台(Springboot)开发知识图谱&&高频技术汇总1.引言:学习一个新的技术时,其实不在于跟着某个教程敲出了几行、几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开…

CSDN 原力 -- beta 测试中

更新 2022/8: 我们把原力等级和 “学习成就” 结合起来了。 请看: http://edu.csdn.net/me/softwareteacher 2022/7: 能用算法来判定一个 IT技术博客的质量么? 我们发布了博客质量分 API https://www.csdn.net/qc 大家可以去试一试。 2022/6&#xff1…

华为的涉外知识产权工程师_华为法务社招 | 岗位:高级知识产权工程师

//岗位一:高级知识产权工程师(网联车)//工作地点:上海岗位职责1、 负责智能车/电动车业务领域的专利包管理,为专利规划与分析,申请布局,授权应用等全流程提供专业服务;协助研发部门挖掘专利idea&#xff1b…

2021 部分团队的年终总结

博客主站: 这是 CSDN 的核心业务,持续投入,念念不忘,必有回响。 https://blog.csdn.net/weixin_42481955/article/details/121942860 社区:我们想让社区成为 IT 人的 ‘票圈’ 和 ‘公号’, 目前只是迈出…

gtx1660是什么级别的_GTX1660Ti到底属于什么系列?Nvidia一句话定性了

原标题:GTX1660Ti到底属于什么系列?Nvidia一句话定性了目前大家已经能够从不少渠道买到Nvidia最新的GTX 1660 Ti显卡了,娱乐大师将近20万的分数可以说确实挺不错,而基于图灵构架的它在玩游戏上面也丝毫不弱于GTX 1070,…

博客写作在App

测试在App 上写作博客。 今天和公司的小伙伴去山里总结工作讨论新年的计划。 1)抓住历史给开发者的机遇 2)聚焦,做出非常高质量的产品,体验和运营。做全行业第一。做最好的开发者内容和生态平台。 3)基础要打牢&#x…

C笔记 -- 一个为 IT人士打造的笔记工具

立即下载: https://plugin.csdn.net/chrome-index-help C笔记 讨论社区:https://bbs.csdn.net/forums/placard?category0&typeId23466 设想我们有这样的工具,你会使用么? 能帮助你学习么? 2022 年 9 月 28 日更…

2022年上半年部分团队的总结

CSDN 是中国 IT 人士学习,成长,成功的平台。 平台有很多小团队,不断地开发出很多小功能,运营活动,那么,半年过去了,大家做得怎么样呢? 我们看看今年上半年各团队的总结:…

参加 CSDN 一线客服工作的经历

在工位上得到的用户反馈 我加入 CSDN 后,先是远程工作,然后几经周折,终于来到 CSDN 北京总部的办公室,公司的同事为了让我尽快了解用户的心声,把我的工位安排在这个 《用户心声》 大屏幕的下方,我经常可以…

linux+mysql登录日志_Linux查看登录日志

lastlog打印系统账号最近一次的登录记录情况,解析的是/var/log/lastlog文件,它是一个data file类型的文件,文本模式打开无法正常显示。Username Port From Latestroot pts/0 171.83.37.215 Sat Jan 9 17:23:53 0800 2021bin **Never logged in**daemon **Never logged in**adm …

用户调查:给粉丝群发消息,红包,打赏的一些想法

CSDN 粉丝互动,红包,打赏的一些想法 2022/11/15 更新: 基于用户的投票和反馈,我们做了下面的更新: 1)会员每天和陌生人的发信息上限由 5 条升级为 10 条 2)会员增加一次粉丝群发的机会 3&#…

看球二三事 - 世界杯征文

征文活动链接: https://bbs.csdn.net/topics/609601920 在过期报纸上看 1982 年的世界杯,当时我们家里没有电视,晚上的时候听到马路对面的房子里传来惊呼声,也不知道为啥。 1983 年的春节前,家里要打扫房间&#xff…

vue隐藏浏览器_一分钟学会Vue的条件渲染和列表渲染

介绍之前一段时间由于工作很忙,没有时间继续学习Vue,今天算是继续对之前的学习进行补充了,今天要学习的便是Vue的条件渲染和列表渲染,我们将讨论if、if-else、if-else-if,show等。在列表渲染中,我们将讨论如…

mysql索引背后的数据结构_图解Mysql索引的数据结构!看不懂你来找我

听说微信搜索《Java鱼仔》会变更强哦!本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦(一)关于索引索引是帮助Mysql更加高效获取数据的一种数据结构,索引的使用很简单,但是如果不能理解索引…

常见的字符函数与字符串函数介绍(1)

常见的字符函数与字符串函数介绍 前言 C语言中对字符与字符串的处理很是频繁,但是C语言中并没有字符串类型的变量,字符串通常存放在常量字符串或者字符数组中。字符串常量适用于那些对它不做任何修改的字符串函数。 函数功能简介与再实现 1、 strlen…

postman raw带文件_postman raw模拟各种http post请求

在url或者query里面传递参数这个最简单http://localhost:5000/queryhttp://localhost:5000/query/xxxhttp://localhost:5000/query/idxxx上传表单key-value数据1.使用自带的功能body设置header设置2.使用raw来模拟body设置header设置不变上传单个文件1.使用自带功能body设置hea…

找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符

题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是g。当从该字符流中读出前六个字"google"时,第一个只出现一次的字符是l…