算法工程師的數學基礎|微積分之導數相關介紹

【算法工程師的數學基礎】系列將會從線性代數、微積分、數值優化、概率論、信息論五個方面進行介紹,感興趣的歡迎關注【搜索與推薦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

掃一掃 關注微信公衆號!號主 專注於搜索和推薦系統,嘗試使用算法去更好的服務於用戶,包括但不侷限於機器學習,深度學習,強化學習,自然語言理解,知識圖譜,還不定時分享技術,資料,思考等文章!

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