算法工程师的数学基础|微积分之导数相关介绍

【算法工程师的数学基础】系列将会从线性代数、微积分、数值优化、概率论、信息论五个方面进行介绍,感兴趣的欢迎关注【搜索与推荐Wiki】公众号,获得最新文章。

《算法工程师的数学基础》已更新:

导数(derivative)是微积分学中重要的基础概念。本篇主要介绍导数相关的知识,包括:概念介绍、导数法则、常见函数的导数、基本求导函数法则与导数公式。

概念介绍

对于定义域和值域都是实数域的函数f:RRf: R \rightarrow R,若f(x)f(x)在点x0x_0的某个邻域Δx\Delta x内,极限:
f(x0)=limΔx0f(x0+Δx)f(x)Δx f'(x_0) = \underset{ \Delta x \rightarrow 0}{lim} \frac{ f(x_0 +\Delta x) - f(x)}{ \Delta x }
存在,则称函数f(x)f(x)在点x0x_0处可导,f(x0)f(x_0)称为其导数,或导函数。

若函数f(x)f(x)在其定义域包含的某区间内每一个点都可导,那么也可以说函数f(x)f(x)在这个区间内可导。连续函数不一定可导,可导函数一定连续。例如函数x|x|为连续函数,但在点x=0x=0处不可导。

对于一个多变量函数f:RdRf: R^d \rightarrow R,它的偏导数(partial derivative)是关于其中一个变量xix_i的导数,而保持其他变量固定,可以记为$f_{x_i}’(x),\bigtriangledown {x_i} f(x),\frac{\partial f(x)}{ \partial x_i} \frac{\partial }{ \partial{x_i}}f(x)$。

对于一个dd维向量xRdx \in R^d,函数f(x)=f(x1,x2,...,xd)Rf(x)=f(x_1, x_2,...,x_d) \in R,则f(x)f(x)关于xx的偏导数为:
f(x)x=[f(x)x1...f(x)xd]Rd \frac{\partial f(x)}{\partial x} = \begin{bmatrix} \frac{\partial f(x)}{ \partial x_1}\\ .\\ .\\ .\\ \frac{\partial f(x)}{ \partial x_d} \end{bmatrix} \in R^d
若函数f(x)Rkf(x) \in R^k的值也为一个向量,则f(x)f(x)关于xx的偏导数为:
f(x)x=[f1(x)x1...fk(x)x1.........f1(x)xd...fk(x)xd]Rdk \frac{\partial f(x)}{\partial x} = \begin{bmatrix} \frac{\partial f_1(x)}{ \partial x_1} & ... & \frac{\partial f_k(x)}{ \partial x_1} \\ . & . & .\\ . & . & .\\ . & . & .\\ \frac{\partial f_1(x)}{ \partial x_d} & ... & \frac{\partial f_k(x)}{ \partial x_d} \end{bmatrix} \in R^{d*k}
称为Jacobian矩阵。

导数法则

一个复杂函数的导数的计算可以通过一下法则来简化。

加减法则

y=f(x),z=g(x)y = f(x), z=g(x) 则:
(y+z)x=yx+zx \frac{ \partial (y+z) }{ \partial x } = \frac{ \partial y}{\partial x} + \frac{ \partial z}{\partial x}

乘法法则

(1) 若 xRp,y=f(x)Rq,z=g(x)Rqx \in R^p, y= f(x) \in R^q, z = g(x) \in R^q ,则:
yTzx=yxz+zxy \frac{\partial y^T z}{\partial x} =\frac{\partial y}{\partial x} z + \frac{\partial z}{\partial x} y
(2) 若 xRp,y=f(x)Rs,z=g(x)Rt,ARstx \in R^p, y= f(x) \in R^s, z = g(x) \in R^t, A \in R^{s *t}xx无关,则:
yTAzx=yxAz+zxATy \frac{\partial y^T Az}{\partial x} =\frac{\partial y}{\partial x} Az + \frac{\partial z}{\partial x} A^Ty

(3)若 xRp,y=f(x)R,z=g(x)Rpx \in R^p, y= f(x) \in R, z = g(x) \in R^p ,则:
yzx=yzx+yxzT \frac{\partial yz}{\partial x} =y \frac{\partial z}{\partial x} + \frac{\partial y}{\partial x} z^T

链式法则

链式法则(chain rule)是求复合函数导数的一个法则,是在微积分中计算导数的一种常见方法。

(1) 若 xRp,y=g(x)Rs,z=f(y)Rtx \in R^p, y= g(x) \in R^s, z = f(y) \in R^t ,则:
zx=yxzy \frac{\partial z}{\partial x} =\frac{\partial y}{\partial x} \frac{\partial z}{\partial y}
(2)若 XRpqX \in R^{p*q}为矩阵, Y=g(x)Rst,z=f(Y)RY= g(x) \in R^{s*t}, z = f(Y) \in R ,则:
zXij=tr((zY)TYXij) \frac{\partial z}{\partial X_{ij} } =tr((\frac{\partial z}{\partial Y})^T \frac{\partial Y}{\partial X_{ij}} )
(3)若 XRpqX \in R^{p*q}为矩阵, y=g(x)Rs,z=f(Y)Ry= g(x) \in R^s, z = f(Y) \in R ,则
zXij=(zY)TyXij \frac{\partial z}{\partial X_{ij} } =(\frac{\partial z}{\partial Y})^T \frac{\partial y}{\partial X_{ij}}
(4)若 xR,u=u(x)Rp,g=g(u)Rqx \in R, u= u(x) \in R^p, g = g(u) \in R^q ,则:
gx=guux \frac{\partial g}{\partial x } =\frac{\partial g}{\partial u} \frac{\partial u}{\partial x}

(4)的文字部分,u=u(x)u = u(x)中左边的uu表示向量, g=g(u)g=g(u)左边的gg表示向量,g(u)g(u)表示函数,uu表示向量

常见函数的导数

这里介绍常用的几个函数。

标量函数及其导数

指示函数 指示函数I(x=c)I(x=c)为:
I(x=c)={1ifx=c0else0 I(x=c) = \left\{\begin{matrix} 1 & if & x=c\\ 0 & else & 0 \end{matrix}\right.
指示函数I(x=c)I(x=c)除了在cc处外,其导数为0。

多项式函数 如果f(x)=xrf(x)=x^r(幂函数),其中rr是非零实数,那么导数:
xrx=rxr1 \frac{ \partial x^r}{\partial x} = rx^{r-1}
r=0r=0时,常函数的导数是0.

指数函数 底数为ee的指数函数f(x)=exp(x)=exf(x)= exp(x) =e^x的导数是他本身。
exp(x)x=exp(x) \frac{ \partial exp(x)}{\partial x} = exp(x)
对数函数 底数为ee的对数函数 log(x)log(x) 的导数则是x1x^{-1}
log(x)x=1x \frac{ \partial log(x)}{\partial x} =\frac{1}{x}

向量函数及其导数

xx=IAxx=ATxTAx=A \frac{ \partial x }{\partial x} =I \\ \frac{ \partial Ax }{\partial x} =A^T \\ \frac{ \partial x^TA }{\partial x} =A

上面公式中涉及的字母都是向量

按位计算的向量函数及其导数

假设一个函数f(x)f(x)的输入是标量xx。对于一组KK个标量x1,x2,...,xKx_1, x_2,...,x_K,我们可以通过f(x)f(x)得到另外一组KK个标量z1,z2,...,zKz_1, z_2,...,z_K
zk=f(xk),k=1,...,K z_k = f(x_k), \forall k=1,...,K
为了简单起见,我们定义x=[x1,...,xK]Tx = [x_1, ..., x_K]^T, z=[z1,...,zK]z =[z_1, ..., z_K]
z=f(x) z = f(x)
其中,f(x)f(x)是按位运算的,即[f(x)]i=f(xi)[f(x)]_i = f(x_i)

xx为标量时,f(x)f(x)的导数记为f(x)f'(x)。当输入为KK维向量x=[x1,...,xK]Tx=[x_1, ...,x_K]^T时,其导数为一个对角矩阵。
f(x)x=[f(xj)xi]KK \frac{ \partial f(x) }{\partial x} = [ \frac{\partial f(x_j)}{\partial x_i} ]_{K*K}

logistic函数

Logistic函数是一种常用的S形函数,是比利时数学家Pierrs Francois Verhulst 在1844-1845年研究种群数量的增长模型时提出命名的,最初作为一种生态学模型。

Logistic的函数定义为:
logistic(x)=L1+exp(k(xx0) logistic(x) = \frac{L}{1+exp(-k(x-x_0)}
这里exp(.)exp(.)函数表示自然对数函数,x0x_0是中心点,LL是最大值,kk是曲线的倾斜度。下图给出了几种不同参数的logistic函数曲线,当xx \rightarrow -\infty时,logistic(x)0logistic(x) \rightarrow 0,当x+x \rightarrow +\infty时,logistic(x)Llogistic(x) \rightarrow L

几种不同参数的logistic函数曲线

当参数为(k=1,x0=0,L=1)(k=1,x_0=0, L=1)时,logistic函数称为标准logistic函数,记为σ(x)\sigma (x)
σ(x)=11+exp(x) \sigma (x) = \frac{1}{ 1 +exp(-x) }
标准logistic函数在机器学习中使用得非常广泛,经常用来将一个实数空间的数映射到(0,1)区间。

标准logistic函数的导数为(推导过程可以参考《推荐系统开发实战》一书的第八章):
σ(x)=σ(x)(1σ(x)) \sigma(x)' = \sigma(x)(1-\sigma(x))
当输入为KK维向量x=[x1,...,xK]Tx=[x_1, ..., x_K]^T时,其导数为:
σ(x)=diag(σ(x)(1σ(x))) \sigma' (x) = diag( \sigma(x) \odot (1-\sigma(x)) )

softmax函数

softmax函数是将多个标量映射为一个概率分布。

对于KK个标量x1,...,xKx_1, ..., x_K,softmax函数定义为:
zk=softmax(xk)=exp(xk)i=1Kexp(xk) z_k = softmax(x_k) = \frac{exp(x_k)}{ \sum_{i=1}^{K} exp(x_k)}
这样我们可以将KK个变量x1,x2,...,xKx_1, x_2, ..., x_K转变为一个分布z1,...,zKz_1, ..., z_K,满足:
zk[0,1],k,i=1Kzk=1 z_k \in [0,1], \forall k, \sum_{i=1}^{K}z_k =1
当softmax函数的输入为KK维向量xx时,
z^=softmax(x)=ak=1Kexp(xk)[exp(x1)...exp(xk)]=exp(x)k=1Kexp(xk)=exp(x)1KTexp(x) \hat z=softmax(x) \\ = \frac{a}{ \sum_{k=1}^{K} exp(x_k)} \begin{bmatrix} exp(x_1)\\ .\\ .\\ .\\ exp(x_k) \end{bmatrix} \\ = \frac{exp(x)}{ \sum_{k=1}^{K} exp(x_k) } \\ = \frac{exp(x)}{ 1^T_K exp(x) }
其中,1KT=[1,...,1]K11^T_K=[1,...,1]_{K*1}KK维的全1的向量。

其导数为:
softmax(x)x=(exp(x)1KTexp(x))x=diag(softmax(x))softmax(x)softmax(x)T \frac{\partial softmax(x)}{\partial x} = \frac{ \partial (\frac{exp(x)}{ 1^T_K exp(x) } ) }{ \partial x} \\ = diag(softmax(x)) - softmax(x)softmax(x)^T

基本求导函数法则与导数公式

基本初等函数求导公式

(C)=0 (C)'=0
(xu)=uxu1 (x^u)'=ux^{u-1}
(sinx)=cosx (sin\,x)' = cos\,x
(cosx)=sinx (cos\,x)' = -sin\,x
(tanx)=sec2x (tan\,x)' = sec^2 \,x
(cot)x=csc2x (cot)'x = - csc^2\, x
(secx)=secxtanx (sec\,x)' = sec\,x \, tan\,x
(cscx)=csxxcotx (csc\,x)' = -csx\,x \, cot\,x
(ax)=axlna (a^x)' = a^x ln a
(ex)=ex (e^x)' = e^x
(logax)=1xlna (log_a\,x)' = \frac{1}{x\,ln\,a}
(lnx)=1x (ln\,x)' = \frac{1}{x}
(arcsinx)=11x2 (arc\,sin\,x)' = \frac{1}{\sqrt{1-x^2}}
(arccosx)=11x2 (arc\,cos\,x)' = - \frac{1}{\sqrt{1-x^2}}
(arctanx)=11+x2 (arc\,tan\,x)' = \frac{1}{\sqrt{1+x^2}}
(arccotx)=11+x2 (arc\,cot\,x)' = - \frac{1}{\sqrt{1+x^2}}

函数的和、差、商、积的求导法则

其实上文中已经简单介绍了函数的求导法则,这里再用一种更加简要的方式说明一下:
u=u(x),v=v(x)u=u(x), v= v(x),且都可导,则:
(u±v)=u±v (u \pm v)' = u' \pm v'
(Cu)=Cu (Cu)' = Cu'
(uv)=uv+uv (uv)' = u'v + uv'
(uv)=uvuvv2 (\frac{u}{v})' = \frac{u'v-uv'}{v^2}

反函数求导法则

如果函数x=f(y)x=f(y)在区间IyI_y内单调、可导且f(y)0f'(y)\neq0,那么它的反函数y=f1(x)y=f^{−1}(x)在区间Ix=xx=f(y)yIyI_x={x∣x=f(y),y \in I_y}内也可导,且
[f1(x)]=1f(y) [f^{-1}(x)]'=\frac{1}{f'(y)}

dydx=1dxdy \frac{dy}{dx} = \frac{1}{ \frac{dx}{dy}}
结论可以简单表达为:反函数的导数等于直接函数导数的倒数

复合函数求导法则

y=f(u)y=f(u),而u=φ(x)u=\varphi (x)f(u),φ(x)f(u), \varphi(x)都可导,则复合函数 y=f[φ(x)]y=f[\varphi(x)]的导数为:
dydx=dydududx \frac{dy}{dx} = \frac{dy}{du}\frac{du}{dx}

y=f(u)φ(x) y'= f'(u)\varphi'(x)

双曲函数和反双曲函数的导数

双曲函数和反双曲函数都是初等函数,可以用上边介绍的初等函数求导方式推导出来。

(1)双曲正弦函数和反双曲正弦函数
sinhx=exex2arsinhx=ln(x+x2+1) \sinh x = \frac{e^{x}-e^{-x}}{2} \\ arsinh\,x = ln(x+\sqrt{x^2+1})
他们的导数为:
(sinhx)=coshx(arsinhx)=1x2+1 (\sinh x)' = \cosh x \\ (arsinh\,x)' = \frac{1}{\sqrt{x^2+1}}
(2)双曲余弦函数和反双曲余弦函数

coshx=ex+ex2arcoshx=ln(x+x21) \cosh x=\frac{e^{x}+e^{-x}}{2} \\ arcosh x = ln(x+\sqrt{x^2-1})
他们的导数为:
(coshx)=sinhx(arcoshx)=1x21 (\cosh x)'= \sinh x \\ (arcosh x)' = \frac{1}{\sqrt{x^2-1}}
(3)双曲正切函数和反双曲正切函数
tanhx=sinhxcoshx \tanh x= \frac{\sinh x}{\cosh x}
artanhx=12ln(1+x1x) artanh\,x = \frac{1}{2} ln(\frac{1+x}{1-x})
他们的导数为:
(tanhx)=1(coshx)2 (\tanh x)'= \frac{1}{(\cosh x)^2}
(artanhx)=11x2 (artanh\,x)' = \frac{1}{1-x^2}
还有几种不常用的双曲函数和反双曲函数如下(这里不再介绍其导数,感兴趣的可以自行根据上述介绍进行推导):

  • 双曲余切函数和反双曲余切函数
    cothx=1tanhx \coth x = \frac{1}{\tanh x}
    arcothx=12ln(x+1x1) arcoth\,x = \frac{1}{2} ln(\frac{x+1}{x-1})
  • 双曲正割函数和双曲正割函数
    sechx=1coshx sech\,x=\frac{1}{\cosh x}
    arsechx=ln(1+1x2x) arsech\,x=ln(\frac{1+\sqrt{1-x^2}}{x})
  • 双曲余割函数和双曲余割函数
    cschx=1sinhx csch\,x=\frac{1}{\sinh x}
    arcschx=ln(1x+1+x2x) arcsch\,x= ln(\frac{1}{x} + \frac{\sqrt{1+x^2}}{|x|})

更多关于双曲函数和反双曲函数可以参考Wiki:

  • https://zh.wikipedia.org/wiki/%E5%8F%8C%E6%9B%B2%E5%87%BD%E6%95%B0
  • https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%8F%8C%E6%9B%B2%E5%87%BD%E6%95%B0

扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章