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

基本函数导数公式

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

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

  • 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=ex

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

  • 反余弦函数
    y=arccos(x)y=arccos(x)y=arccos(x)

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

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

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

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

导数四则运算

  • (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)=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的偏导。

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

  • 如果
    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)=yuux=dudydxdu(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)=dudydvdudxdv(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} 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\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=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−(1+e−Z)(1+e−Z)2=\frac{-e^{-Z}}{(1+e^{-Z})^2} =\frac{1-(1+e^{-Z})}{(1+e^{-Z})^2} =(1+eZ)2eZ=(1+eZ)21(1+eZ)

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

=A2−A=A(1−A)=A^2-A=A(1-A) =A2A=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 * a_1^2 + w_{12}^2 * 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 * a_1^1 + w_{12}^1 * 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}})}^TdX)}_{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=∑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=kxikykjdzij=kd(xikykj)=k(dxik)ykj+kxik(dykj)=((dX)Y)ij+(X(dY))ij

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

    (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((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/500302.shtml

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

相关文章

5gh掌上云计算认证不通过_阿里云ACP认证考试攻略、考试心得、费用及常见问题...

阿里云ACP级认证是阿里云的专业工程师认证,云吞铺子分享ACP认证考试攻略、考试心得、考试费用及常见问题:ACP认证分类ACP认证根据所属领域不同分为五类,即即云计算、大数据、大数据分析师、云安全、企业互联网架构,考试方向不同考…

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

AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理0…

verilog异步复位jk触发器_Verilog专题(九)DFF、Dlatch、JK flipflop

DFF、Dlatch、JK flip-flop对于verilog的学习,这里推荐一个比较好的实践网站HDLBits:https://hdlbits.01xz.net/wiki/Main_Page本系列记录一些我觉得有价值的题目,希望通过这些题目可以对verilog更加熟练。D flip-flops D触发器根据复位的…

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

Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下…

中两个数做减法_人生下半场,学会做减法

作者:洞见余生人生如逆旅,你我皆行人。梭罗在瓦尔登湖中写道:“一个人,只要满足了基本生活所需,不再汲汲于声名,不再汲汲于富贵,便可以更从容,更充实地享受人生。”曾经觉得&#xf…

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

Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下…

cifs挂载 mount ubuntu_centos或者Ubuntu挂载windows10文件夹

一、centos挂载windows文件夹格式:mount -t cifs //IP/share-folder /mnt-point -o usernameyour-username,passwdyour-password或者mount //192.168.1.100/www /usr/local/nginx/html/ -o username"你的window管理员账号",password"你的window管理…

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

Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下…

五大质量工具详解及运用案例_掌握质量管理五大工具,实现九段质量管理成长...

对于工厂企业来说,产品的质量是企业经营的命脉,那么质量管理工作要怎么去做好就是一个关键。今天给大家分享关于质量管理五大核心工具的内容,那何为五大工具,他们都有什么特点,又有何要求?我们将其中的主要…

双层板在哪层覆铜_PCB覆铜箔层压板分类和工艺解析

PCB覆铜箔层压板随着电子信息产业的快速发展,电子产品和电路组装技术也迈上了一个新的台阶。它推动了pcb制造技术向微孔径、细线、高密度布线、多层化方向发展。对覆铜板的耐热性、低膨胀系数、高尺寸稳定性和低介电损耗提出了新的要求。①PCB覆铜箔层压板分类PCB覆…

现代软件工程 作业 团队冲刺阶段的要求

1. 对团队冲刺的要求 团队在日期区间任选 10 天进行冲刺 (sprint),每天冲刺要在当天固定时间点发布一篇随笔。具体的博文规范如下: 每篇博客的要求: ① SCRUM: 每个成员描述:我昨天的成就(完成了哪个任务,花了多少时间…

两个numpy取相同值_闲谈Numpy的切片规则

我想说在学numpy库的时候切片真的让我有点痛苦的,逗号分号括号数字交织在一起刚开始看的我简直脑袋要爆炸,不过后来静下心来仔细看了看,发现其实也米有这么复杂,毕竟基于python的numpy库也是遵循着特定的语法的。今天就来聊聊这个…

微软开源自动机器学习工具 – NNI安装与使用

微软开源自动机器学习工具 – NNI安装与使用NNI的众多特点开启你的第一次NNI之旅 安装 三步准备实验(1) 准备搜索空间(2) 准备实验代码(3)定义实验配置 一行命令开始训练 webUI查看结果扩展阅读 基础定义 扩…

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

Python中的Numpy的基本知识 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 以下列出一些关于Numpy矩阵运算的基本知识和坑点。 首先需要在命令行中安装Num…

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

基本函数导数公式 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 如何浏览本系列教程 由于里面包含了大量必要的数学公式,都是用LaTex格式编写…

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

步入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…