基本函数导数公式

Copyright © Microsoft Corporation. All rights reserved.
适用于License版权许可
更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区

  • Content
  • 01.0-神经网络的基本工作原理
  • 01.1-基本数学导数公式
  • 01.2-Python-Numpy库的点滴
  • 02.0-反向传播与梯度下降
  • 02.1-线性反向传播
  • 02.2-非线性反向传播
  • 02.3-梯度下降
  • 03.0-损失函数
  • 03.1-均方差损失函数
  • 03.2-交叉熵损失函数
  • 04.0-单入单出单层-单变量线性回归
  • 04.1-最小二乘法
  • 04.2-梯度下降法
  • 04.3-神经网络法
  • 04.4-梯度下降的三种形式
  • 04.5-实现逻辑非门
  • 05.0-多入单出单层-多变量线性回归
  • 05.1-正规方程法
  • 05.2-神经网络法
  • 05.3-样本特征数据的归一化
  • 05.4-归一化的后遗症
  • 05.5-正确的推理方法
  • 05.6-归一化标签值
  • 06.0-多入多出单层神经网络-多变量线性分类
  • 06.1-二分类原理
  • 06.2-线性二分类实现
  • 06.3-线性二分类结果可视化
  • 06.4-多分类原理
  • 06.5-线性多分类实现
  • 06.6-线性多分类结果可视化
  • 07.0-激活函数
  • 07.1-挤压型激活函数
  • 07.2-半线性激活函数
  • 07.3-用双曲正切函数分类
  • 07.4-实现逻辑与门和或门
  • 08.0-单入单出双层-万能近似定理
  • 08.1-双层拟合网络的原理
  • 08.2-双层拟合网络的实现
  • 09.0-多入多出双层-双变量非线性分类
  • 09.1-实现逻辑异或门
  • 09.2-理解二分类的工作原理
  • 09.3-非线性多分类
  • 09.4-理解多分类的工作原理
  • 10.0-调参与优化
  • 10.1-权重矩阵初始化
  • 10.2-参数调优
  • 10.3-搜索最优学习率
  • 10.4-梯度下降优化算法
  • 10.5-自适应学习率算法
  • 11.0-深度学习基础
  • 11.1-三层神经网络的实现
  • 11.2-验证与测试
  • 11.3-梯度检查
  • 11.4-手工测试训练效果
  • 11.5-搭建深度神经网络框架
  • 12.0-卷积神经网络
  • 12.1-卷积
  • 12.2-池化
  • 14.1-神经网络模型概述
  • 14.2-Windows模型的部署
  • 14.3-Android模型的部署

附录:基本数学导数公式

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

大家可以mark一下,以便以后用到时过来查一下,当成字典。

下面进入正题!

  • y=cy=cy=c

(1)y′=0y'=0 \tag 1y′=0(1)

  • y=xay=x^ay=xa

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

  • 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​)

  • y=lnxy=lnxy=lnx

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

  • y=axy=a^xy=ax

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

  • y=exy=e^xy=ex

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

  • y=e−xy=e^{-x}y=e−x

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

  • 正弦函数y=sin(x)y=sin(x)y=sin(x)

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

  • 余弦函数
    y=cos(x)y=cos(x)y=cos(x)

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

  • 正切函数
    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)

  • 余切函数
    y=ctg(x)y=ctg(x)y=ctg(x)

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

  • 反正弦函数
    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)

  • 反余弦函数
    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)

  • 反正切函数
    y=arctan(x)y=arctan(x)y=arctan(x)

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

  • 反余切函数
    y=arcctg(x)y=arcctg(x)y=arcctg(x)

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

  • 双曲正弦函数
    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)

  • 双曲余弦函数
    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)

  • 双曲正切函数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)

  • 双曲余切函数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)

  • 双曲正割函数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)

  • 双曲余割函数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)

导数四则运算

  • (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)

  • (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)

  • (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)

  • (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)

偏导数

  • 如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的偏导。

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

  • 如果
    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)*u'(x) = y'_u*u'_x=\frac{dy}{du}*\frac{du}{dx} \tag{50}yx′​=f′(u)∗u′(x)=yu′​∗ux′​=dudy​∗dxdu​(50)

  • 如果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)*g'(v)*h'(x)=\frac{dy}{du}*\frac{du}{dv}*\frac{dv}{dx} \tag{51} dxdy​=f′(u)∗g′(v)∗h′(x)=dudy​∗dvdu​∗dxdv​(51)

  • 如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}}* \frac{\partial{U}}{\partial{x}} + \frac{\partial{Z}}{\partial{V}} * \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\frac{\partial{(A^TX^TB)}}{\partial{X}} = BA^T \tag{64} ∂X∂(ATXTB)​=BAT(64)

激活函数求导

sigmoid函数:$A

= \frac{1}{1+e^{-Z}}$

利用公式30,令: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−(1+e−Z)(1+e−Z)2=\frac{-e^{-Z}}{(1+e^{-Z})^2} =\frac{1-(1+e^{-Z})}{(1+e^{-Z})^2} =(1+e−Z)2−e−Z​=(1+e−Z)21−(1+e−Z)​

=(11+e−Z)2−11+e−Z=(\frac{1}{1+e^{-Z}})^2-\frac{1}{1+e^{-Z}} =(1+e−Z1​)2−1+e−Z1​

=A2−A=A(1−A)=A^2-A=A(1-A) =A2−A=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 * a_1^2 + w_{12}^2 * 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 * a_1^1 + w_{12}^1 * 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}})}^TdX)}_{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=∑kxikykjdzij=∑kd(xikykj)=∑k(dxik)ykj+∑kxik(dykj)=((dX)Y)ij+(X(dY))ijz_{ij} = \sum_k x_{ik}y_{kj} \\ dz_{ij} = \sum_k d(x_{ik}y_{kj}) = \sum_k (dx_{ik}) y_{kj} + \sum_k x_{ik} (dy_{kj}) = ((dX)Y)_{ij} + (X(dY))_{ij} zij​=k∑​xik​ykj​dzij​=k∑​d(xik​ykj​)=k∑​(dxik​)ykj​+k∑​xik​(dykj​)=((dX)Y)ij​+(X(dY))ij​

从上式可见,dZdZdZ的每一项和$(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),可以得到

    (103)tr(YT11T(exp(Z)⊙dZ)1Texp(Z))=tr(YT1(1⊙(exp(Z))TdZ)1Texp(Z))=tr(YT1exp(Z)TdZ1Texp(Z))=tr(YT1softmax(Z)TdZ)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(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)1T(exp(Z)⊙dZ)​)=tr(YT11Texp(Z)(1⊙(exp(Z))TdZ)​)=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,答疑解惑。扫描下方二维码,回复“申请入群”,即刻邀请你入群。

AI应用开发基础傻瓜书系列附录-基本数学导数公式相关推荐

  1. AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念

    AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念 Copyright © Microsoft Corporation. All rights reserved. 适用于Licens ...

  2. AI应用开发基础傻瓜书系列目录

    AI应用开发基础傻瓜书系列的目录~ 写在前面,为啥要出这个系列的教程呢? 总的说来,我们现在有了很多非常厉害的深度学习框架,比如tensorflow,pytorch,paddlepaddle,caff ...

  3. AI应用开发基础傻瓜书系列1-神经网络的基本工作原理

    Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...

  4. AI应用开发基础傻瓜书系列3-损失函数

    Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...

  5. AI应用开发基础傻瓜书系列3-激活函数

    Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...

  6. AI应用开发基础傻瓜书系列3-激活函数和损失函数

    Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...

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

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

  8. 介绍DOTA2 AI的开发基础——调试

    内容 队伍总体数据查看 查看脚本输出调试 内容 简单说一下dota2 AI的调试步骤.日后有更新或者别的技巧会继续跟进补充.V社官方文档为 https://developer.valvesoftwar ...

  9. AI应用开发实战(转)

    AI应用开发实战 - 从零开始配置环境 与本篇配套的视频教程请访问:https://www.bilibili.com/video/av24421492/ 建议和反馈,请发送到 https://gith ...

最新文章

  1. [转载] 大道至简:软件工程实践者的思想——第四章 流于形式的沟通
  2. 【Python-ML】SKlearn库网格搜索和交叉验证
  3. MySQL数据库的常用操作
  4. Tomcat5配置mysql4数据源
  5. linux远程传文件太慢,解决linux scp、ssh 登陆远程服务器连接速度慢
  6. Ubuntu 18.04-20.04开机自动root用户登录(测试可用)
  7. android设计一个多线程和画图的程序小球,Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例...
  8. CNCF landscape 云原生 敏捷开发
  9. .netcore 和 java_Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
  10. 正点原子STM32F4探索者开发板HAL库TFT LCD屏幕例程移植到STM32CubeMX+CLion
  11. 华三交换机配置access命令_华3交换机配置命令大全
  12. 《2020-2021中国开发者调查报告》发布了!
  13. python 内存文件_python基础知识-7-内存、深浅、文件操作
  14. 前端开发应知网站(转载)
  15. 评分卡模型(一)评分卡建模实战
  16. linux多系统引导管理,Linux 多重引导MBR与系统引导管理器GRUB.docx
  17. vue项目中使用 Echarts的一些总结,包括饼图,折现图,折柱混图,年月日切换
  18. 深圳软件测试培训:Jmeter目录构成
  19. 【RPA】Word 文档生成器(Python 篇)
  20. 污水中的重金属去除工艺,吸附重金属树脂CH-90Na

热门文章

  1. PRN(20200816):A Hierarchical Deep Convolutional Neural Network for Incremental Learning [Tree-CNN]
  2. AutoCAD二维平面图,线绘——茶道,意境图
  3. 敏捷教练--如何陪娃做作业
  4. android 云编译,APP云编译好难啊!
  5. 关于笔记软件的比较研究
  6. 二进制详解+集合算法的实现笔记
  7. 英特尔实感摄像头r200_英特尔实感:您必须了解的人机交互技术!
  8. 进程间通信六种通信方式
  9. QMS-云质-质量管理软件-QMS软件-应该自己开发,外包还是购买软件产品?
  10. 【Python游戏】Python基于第三方库pygame实现一个魂斗罗小游戏,毕业设计必备 | 附源码