機器學習數學基礎——微積分部分

1. 偏導數與方向導數

偏導數

  對於一元函數來說變化率就是導數,在機器學習中多數使用的是多元函數而多元函數的變化率通常是採用偏導數進行表示。
  定義:設函數z=f(x,y)z = f(x, y)在點(x0,y0)(x_0,y_0)的某一鄰域內有定義,當yy固定於y0y_0,而xxx0x_0處有增量Δx\Delta x,相應的函數有增量
f(x0+Δx,y0)f(x0,y0)f(x_0+\Delta x, y_0)-f(x_0,y_0),如果limΔx0f(x0+Δx,y0)f(x0,y0)Δx\lim_{\Delta x\rightarrow0}\frac{f(x_0+\Delta x, y_0)-f(x_0,y_0)}{\Delta x}存在,則稱該極限爲函數咋子(x0,y0)(x_0,y_0)處對x的偏導。

方向導數

  對於多元函數,如果說偏導數表示的是多元函數在沿座標軸的變化率,那麼可以說方向導數是沿着任意一指定方向的變化率
方向導數表達式:
fl(x0,y0)=limt0+f(x0+tcosα,y0+tcosβ)f(x0,y0t\frac{\partial f}{\partial l}|_{(x_0,y_0)}=\lim_{t\rightarrow0^+}\frac{f(x_0+t\cos\alpha,y_0+t\cos\beta)-f(x_0,y_0}{t}
  其中,l的單位向量是e=(cosα,cosβ)e=(\cos\alpha,\cos\beta),而這正表示函數f沿着l方向的變化率,當e=(0,1)時,就表示f對於y的偏導數,,即沿着y軸的變化率。

方向導數的計算公式:
fl(x0,y0)=f(x0,y0)xcosα+f(x0,y0)ycosβ\frac{\partial f}{\partial l}|_{(x_0,y_0)}=f(x_0,y_0)_x\cos\alpha+f(x_0,y_0)_y\cos\beta
方向導數等於函數x處的偏導數與單位向量x的方向乘積加上在y處的偏導與單位向量y的方向的乘積。


2. 梯度(注意梯度是一個向量 )

  函數在某點的梯度是這樣一個向量,它的方向與去的最大方向導數的方向一致,而它的模爲方向導數的最大值。
gradf(x,y)=(fx(x,y),fy(x,y))grad f(x,y) = (f_x(x,y),f_y(x,y))
gradf(x,y)=(fx)2+(fy)2|gradf(x,y)|=\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2}

  對於梯度的數學定義:

設函數f(x,y)f(x,y)在平面區域D內具有一階連續偏導數則對每一點P(x0,y0)DP(x_0,y_0)\in D都可以找出一個向量fx(x0,y0)i+fy(x0,y0)jf_x(x_0,y_0)i+f_y(x_0,y_0)j稱爲f(x,y)f(x,y)在P點處的梯度,記作f(x0,y0)\nabla f(x_0,y_0)
gradf(x0,y0)=(fx(x0,y0),fy(x0,y0))grad f(x_0,y_0) = (f_x(x_0,y_0),f_y(x_0,y_0))

  1. 梯度是向量
  2. 僅與函數有關

  由於具有一階連續偏導數那麼意味着,函數f(x,y)f(x,y)在各個方向的切線都在同一平面上,也就是其切平面,那麼就可以得知一定有且僅有一個“最陡峭”的地方

梯度與方向導數的等式關係

  假設P點爲(x0,y0)(x_0,y_0)
  那麼由方向導數的公式可以推到爲:fl(P0)=f(P0)xcosα+f(P0)ycosβ\frac{\partial f}{\partial l}|_{(P_0)}=f(P_0)_x\cos\alpha+f(P_0)_y\cos\beta
fl(P0)=(fx(P0),fy(P0))(cosα,cosβ)\frac{\partial f}{\partial l}|_{(P_0)}=(f_x(P_0),f_y(P_0))·(\cos\alpha,\cos\beta)
fl(P0)=gradf(P0)el\frac{\partial f}{\partial l}|_{(P_0)}=grad f(P_0)·\vec{e_l}
                      將(cosα,cosβ)el(\cos\alpha,\cos\beta)記爲\vec{e_l}
fl(P0)=gradf(P0)elcosθ\frac{\partial f}{\partial l}|_{(P_0)}=|grad f(P_0)|·|\vec{e_l}|\cos\theta
                其中θ\theta是梯度和el\vec{e_l}的夾角,又因爲el\vec{e_l}是單位向量,因此:
fl(P0)=gradf(P0)cosθ\frac{\partial f}{\partial l}|_{(P_0)}=|grad f(P_0)|·\cos\theta
在這裏插入圖片描述
所以方向導數的大小完全取決於cosθ\cos\theta的大小,其中θ=(gradf(x,y),e)\theta = (gradf(x,y),\vec e)


3. 雅可比矩陣(Jacobian矩陣)和海森矩陣(Hessian矩陣)

3.1雅可比矩陣&雅可比行列式

雅可比矩陣

先補充一下算子和線性算子的概念
算子:一個函數空間另一個函數空間的映射
線性算子:設X和Y是同一線性賦範空間,DXD\subset X,T爲D到Y中的算子,如果α,βK\forall\alpha,\beta\in K,有T(αx+βy)=αT(x)+βT(y)T(\alpha x + \beta y)=\alpha T(x) + \beta T(y),則稱T爲D上的線性算子。
梯度向量的公式:g(x)=f(x1,x2,...xn)=(fx1,fx2,...,fx2)g(x)=\nabla f(x_1,x_2,...x_n) = (\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},...,\frac{\partial f}{\partial x_2})

雅可比矩陣:一階偏導數以一定方式排列成的矩陣,其行列式成爲雅可比行列式。其重要性在於它體現了一個微分方程與給出點的最優線性逼近.因此,也科比矩陣類似於多元函數的導數。
假設FF:RnRmR_n\rightarrow R_m是一個從歐式nn維空間轉換到歐式mm維空間的函數。這個函數由mm個實函數組成:y1(x1,...,xn),...,ym(x1,...,xn)y_1(x_1,...,x_n),...,y_m(x_1,...,x_n)。這些函數的偏導數(如果存在)可以組成一個mmnn列的矩陣,這就是所謂的雅可比矩陣:
[y1x1y1xnymx1ymxn] \left[ \begin{matrix} \frac{\partial y_1}{\partial x_1} & \cdots & \frac{\partial y_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_m}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_n} \\ \end{matrix} \right]
=[g1(x)Tg2(x)Tgm(x)T] = \left[ \begin{matrix} g_1(x)^T \\ g_2(x)^T \\ \cdots \\ g_m(x)^T \end{matrix} \right]
此矩陣表示爲:JF(x1,...,xn)J_F(x_1,...,x_n),或者(y1,...ym)(x1,...,xn)\frac{\partial(y_1,...y_m)}{\partial(x_1,...,x_n)}
此矩陣的第ii[yixi,yix2,,yixn][\frac{\partial y_i}{\partial x_i},\frac{\partial y_i}{\partial x_2},···,\frac{\partial y_i}{\partial x_n}]即爲梯度的轉置。

如果ppRnR_n中的一點,FFpp點可微,那麼在這一點的導數由JF(p)J_F(p)給出,在此情況下,由F(p)F(p)描述的線性算子接近點ppFF的最優線性逼近,xx逼近於pp:
F(x)F(p)+JF(p)(xp)F(x)\approx F(p)+J_F(p)·(x-p)(個人理解是泰勒展開式)

雅可比行列式

如果m=nm=n,那麼FF是從nn維空間到nn維空間的函數,那麼它的雅可比矩陣是一個方陣。取其行列式稱爲雅可比行列式。

在某個給定點的雅可比行列式提供了 在接近該點時的表現的重要信息. 例如, 如果連續可微函數FFpp點的雅可比行列式不是零, 那麼它在該點附近具有反函數. 這稱爲反函數定理. 更進一步, 如果pp點的雅可比行列式是正數, 則FFpp點的取向不變;如果是負數, 則FF的取向相反. 而從雅可比行列式的絕對值, 就可以知道函數FFpp點的縮放因子;這就是爲什麼它出現在換元積分法中.

3.2海森Hessian矩陣

在數學中, 海森矩陣(Hessian matrix或Hessian)是一個自變量爲向量的實值函數的二階偏導數組成的方塊矩陣, 此函數如下:
f(x1,x2,...,xn)f(x_1,x_2,...,x_n)
如果ff的所有二階導數都存在,那麼ff的海森矩陣即:
H(f)ij(x)=DiDjf(x)H(f)_{ij}(x)=D_iD_jf(x)
其中x=(x1,x2,...,xn)x=(x_1,x_2,...,x_n),即H(f)H(f)爲:
[2fx122fx1x22fx1xn2fx2x12fx222fx2xn2fxnx12fxnx22fxn2] \left[ \begin{matrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1\partial x_n} \\ \frac{\partial^2 f}{\partial x_2\partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n\partial x_1} & \frac{\partial^2 f}{\partial x_n\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \\ \end{matrix} \right]
(也有人把海森定義定義爲以上矩陣的行列式)海森矩陣被應用於牛頓法解決大規模優化問題。

應用

一般來說, 牛頓法主要應用在兩個方面
   1、 求方程的根
   2、 最優化
1), 求解方程

  並不是所有的方程都有求根公式, 或者求根公式很複雜, 導致求解困難. 利用牛頓法, 可以迭代求解。
  原理是利用泰勒公式,在x0x_0處展開,且展開到一階,即f(x)=f(x0)+(xx0)f(x0)f(x)=f(x_0)+(x-x_0)f'(x_0)
求解方程f(x)=0f(x)=0f(x0)+(xx0)f(x0)=0f(x_0)+(x-x_0)f'(x_0)=0,求解x=x1=x0f(x0)f(x0)x=x_1=x_0-\frac{f(x_0)}{f'(x_0)},因爲這是利用泰勒公式的一節展開,f(x)=f(x0)+(xx0)f(x0)f(x)=f(x_0)+(x-x_0)f'(x_0)處並不完全相等,而是近似相等,這裏求得的x1x_1並不能讓f(x)=0f(x)=0,只能說f(x1)f(x_1)的值比f(x0)f(x_0)更接近f(x)=0f(x)=0,於是迭代求解就很自然了,可以進而推出xn+1=xnf(xn)f(xn)x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)},通過迭代,這個式子必然在f(x)=0f(x^*)=0的時候收斂。整個過程如下圖:
摘自http://jacoxu.com/jacobian%E7%9F%A9%E9%98%B5%E5%92%8Chessian%E7%9F%A9%E9%98%B5/
2), 最優化
   在最優化的問題中, 線性最優化至少可以使用單純形法(或稱不動點算法)求解, 但對於非線性優化問題, 牛頓法提供了一種求解的辦法. 假設任務是優化一個目標函數ff, 求函數ff的極大極小問題, 可以轉化爲求解函數ff的導數f=0f′=0的問題, 這樣求可以把優化問題看成方程求解問題(f=0f′=0). 剩下的問題就和第一部分提到的牛頓法求解很相似了。
   這次爲了求解f=0f′=0的根, 首先把f(x)f(x)在探索點xnx_n處泰勒展開, 展開到2階形式進行近似:
f(x)=f(xn)+f(xn)(xxn)+f(xn)2(xxn)2f(x)=f(x_n)+f'(x_n)(x-x_n)+\frac{f''(x_n)}{2}(x-x_n)^2
然後用f(x)f(x)的最小點做爲新的探索點xn+1x_{n+1},據此,令:
f(x)=f(xn)+f(xn)(xxn)=0f'(x)=f'(x_n)+f''(x_n)(x-x_n)=0
求出迭代公式:
xn+1=xnf(xn)f(xn)x_{n+1}=x_n-\frac{f'(x_n)}{f''(x_n)}
  一般認爲牛頓法可以利用到曲線本身的信息, 比梯度下降法更容易收斂(迭代更少次數), 如下圖是一個最小化一個目標方程的例子, 紅色曲線是利用牛頓法迭代求解, 綠色曲線是利用梯度下降法求解.
在這裏插入圖片描述
在上面討論的是2維情況, 高維情況的牛頓迭代公式是:
xn+1=xn[Hf(xn)]1f(xn)n0x_{n+1}=x_n-[Hf(x_n)]^{-1}\nabla f(x_n),n\geq 0
其中HH是Hessian矩陣.

高維情況依然可以用牛頓迭代求解, 但是問題是Hessian矩陣引入的複雜性, 使得牛頓迭代求解的難度大大增加, 但是已經有了解決這個問題的辦法就是Quasi-Newton method, 不再直接計算hessian矩陣, 而是每一步的時候使用梯度向量更新hessian矩陣的近似.


4.凸函數

 凸函數,是數學函數的一類特徵。凸函數就是一個定義在某個向量空間的凸子集C(區間)上的實值函數。
 凸集:如果集合中任意兩個元素連線上的點也在集合中,那麼這個集合就是凸集。
在這裏插入圖片描述
常見的凸集

  • 所有RnR^n
  • 所有R+nR_+^n
  • 超平面:C={xaTx=b}C=\{x|a^Tx=b\}既是仿射集又是凸集(仿射集都是凸集)
  • 半空間:C={xaTxb}C=\{x|a^Tx\leq b\}C={xaTxb}C=\{x|a^Tx\leq b\}只是凸集
  • 範數球:滿足xp1p1||x||_p\leq1,p\geq1的集合稱爲範數球。但是xp=1p1||x||_p=1,p\geq1不是凸集。當0<p<10<p<1時,xp1||x||_p\leq1也不是凸集。
  • 多面體:有限個半空間和超平面的交集。

凸函數的數學定義:
  函數ffRnRR^n\rightarrow R定義域dom ff是凸集,並且對於x,ydom\forall x,y\in dom ffθ0θ1\forall \theta,0\leq \theta\leq 1
f(θx+(1θ)y)θf(x)+(1θ)f(y)f(\theta x+(1-\theta)y)\leq\theta f(x)+(1-\theta)f(y)
則稱函數ff是凸的。
在這裏插入圖片描述
凸函數的判斷方法:

  1. 一元函數
    在這裏插入圖片描述
  2. 二元函數:
    在這裏插入圖片描述
  3. 多元函數
    Hessian矩陣半正定,則函數是凸函數;若Hessian矩陣正定,則函數是嚴格凸函數。(參考https://blog.csdn.net/qq_39521554/article/details/78895869)

注:理解上可能會有偏差,如有錯誤歡迎指正
參考:
https://blog.csdn.net/qq_40707407/article/details/80101501
https://www.matongxue.com/madocs/222.html
【雅可比矩陣和海森矩陣轉自】http://jacoxu.com/jacobian矩陣和hessian矩陣/

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