天天看點

算法的微積分基礎

《算法的微積分基礎》

  梯度下降法簡單來說就是一種通過導數來尋找目标函數最小化的方法。而對函數求解梯度的過程中就牽扯了很多的數學知識,有很多概念許久不用也有點生疏了,整理一篇部落格用于鞏固一下數學基礎知識。

Key Words:導數、偏導數、泰勒級數

Beijing, 2020

Agile Pioneer  

數學基礎知識

Derivative & Taylor Series

Derivative

  導數的定義:導數是微積分中的重要概念,也叫導函數,又名微商。當函數 y = f ( x ) y=f(x) y=f(x)的自變量 x x x在一點 x 0 x_0 x0​上産生一個增量 Δ x \Delta x Δx時,函數的輸出值的增量 Δ y \Delta y Δy與自變量 Δ x \Delta x Δx的比值在 Δ x \Delta x Δx趨于0時的極限a如果存在,a即為在 x 0 x_0 x0​處的導數,記作 f ′ ( x 0 ) f^{'}(x_0) f′(x0​)或 d f ( x 0 ) d x \frac{df(x_0)}{dx} dxdf(x0​)​。

f ′ ( x 0 ) = lim ⁡ x − > x 0 f ( x ) − f ( x 0 ) x − x 0 f^{'}(x_0) = \lim_{x->x_0}\frac{f(x) - f(x_0)}{x - x_0} f′(x0​)=x−>x0​lim​x−x0​f(x)−f(x0​)​

  導數是函數的局部性質。一個函數在某一點的導數描述了這個函數在這一點附近的變化率。如果函數的自變量和取值都是實數的話,導數的幾何意義是函數 f ( x ) f(x) f(x)在 x 0 x_0 x0​點出的切線方向。導數的本質是通過極限的概念對函數進行局部的線性逼近。例如在運動學中,物體的位移對于時間的導數就是物體的瞬時速度。

  可導的函數一定連續;連續未必可導,不連續的函數一定不可導。不是所有的函數都有導函數,一個函數也不一定在所有的點上都有導數。若某函數在某一點導數存在,則稱其在這一點可導,否則稱為不可導。然而,

  函數某點可導的充分必要條件:函數在該點的左右導數存在而且相等。函數在某一點導函數連續的充分必要條件是:導函數在該點的左右極限存在且相等,且該點的導數值等于極限值。

Taylor Series

  在某個點附近用多項式函數來近似其他函數——泰勒級數,原因在于多項式比其他函數處理起來要容易的多。因為現實中太多非常複雜的函數,而幂級數相對來說是比較平易近人研究很透徹的函數,可以用平易近人的幂級數來逼近複雜的函數,進而可以通過研究幂級數來了解複雜函數。

  函數項級數:設 u 1 ( x ) , u 2 ( x ) , . . . , u n ( x ) u_1(x),u_2(x),...,u_n(x) u1​(x),u2​(x),...,un​(x),…是定義在某區間I上的函數列,則表達式

u 1 ( x ) , u 2 ( x ) , . . . , u n ( x ) + . . . = ∑ n = 0 ∞ u n ( x )      ( 1 ) u_1(x),u_2(x),...,u_n(x)+...=\sum_{n=0}^{\infty}u_n(x) \space\space\space\space (1) u1​(x),u2​(x),...,un​(x)+...=n=0∑∞​un​(x)    (1)

稱為定義在區間I上的函數項級數。

  幂級數:如果式(1)上的各項 u n ( x ) u_n(x) un​(x)都是定義在區間 ( − ∞ , + ∞ ) (-\infty, +\infty ) (−∞,+∞)上的幂函數,函數項級數:

a 0 + a 1 ( x − x 0 ) + a 2 ( x − x 0 ) 2 + . . . + a n ( x − x 0 ) n + . . . = ∑ n = 0 ∞ a n ( x − x 0 ) n      ( 2 ) a_0 + a_1(x-x_0) + a_2(x - x_0)^2 + ... + an(x - x_0)^n+... = \sum_{n=0}^{\infty}a_n(x - x_0)^n \space\space\space\space (2) a0​+a1​(x−x0​)+a2​(x−x0​)2+...+an(x−x0​)n+...=n=0∑∞​an​(x−x0​)n    (2)

稱為幂級數,其中 x 0 x_0 x0​為常數, a 0 , a 1 , . . . , a n a_0, a_1,...,a_n a0​,a1​,...,an​為幂級數的系數。

  幂級數在一定範圍内具有類似多項式的性質,在收斂區間内能進行逐項微分和逐項積分等運算。幂級數 ∑ x n n ! \sum \frac{x^n}{n!} ∑n!xn​在實數軸上收斂。幂級數一定要收斂才有意義,發散級數不能用來逼近函數。

  泰勒級數定義:用無限項連加式——級數來表示一個函數,如果 f ( x ) f(x) f(x)在點 x = x 0 x=x_0 x=x0​具有任意階導數,則幂級數:

∑ n = 0 ∞ f ( n ) ( x 0 ) n ! ( x − x 0 ) n = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . + f n ( x 0 ) 2 ! ( x − x 0 ) n + . . . \sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x - x_0)^n = f(x_0) + f^{'}(x_0)(x - x_0) + \frac{f^{''}(x_0)}{2!}(x-x_0)^2 + ... + \frac{f^{n}(x_0)}{2!}(x-x_0)^n + ... n=0∑∞​n!f(n)(x0​)​(x−x0​)n=f(x0​)+f′(x0​)(x−x0​)+2!f′′(x0​)​(x−x0​)2+...+2!fn(x0​)​(x−x0​)n+...

稱為 f ( x ) f(x) f(x)在點 x = x 0 x=x_0 x=x0​處的泰勒級數。

  麥克勞林級數:在泰勒公式中,取 x 0 = 0 x_0=0 x0​=0,得到的級數稱為麥克勞林級數

∑ n = 0 ∞ f ( n ) ( 0 ) n ! ( x ) n \sum_{n=0}^{\infty}\frac{f^{(n)}(0)}{n!}(x)^n n=0∑∞​n!f(n)(0)​(x)n

Gradient & Multivariable Taylor Series

  偏導數和導數的意義相同,偏導數需要函數至少有兩個變量,偏導數反映的是函數沿坐标軸正方向的變化率。

Gradient

  梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(此梯度的方向)變化最快,變化率值(為該梯度的模)最大。

  梯度定義:設二進制函數 z = f ( x , y ) z=f(x,y) z=f(x,y)在平面區域D上具有一階連續偏導數,則對于每一個點 P ( x 0 , y 0 ) P(x_0,y_0) P(x0​,y0​)都可以定出一個向量 { ∂ f ∂ x 0 , ∂ f ∂ y 0 } = f x 0 ( x , y ) ⋅ i + f y 0 ( x , y ) ⋅ j \{\frac{\partial f}{\partial x_0},\frac{\partial f}{\partial y_0}\} = f_{x_0}(x,y) \cdot i + f_{y_0}(x,y) \cdot j {∂x0​∂f​,∂y0​∂f​}=fx0​​(x,y)⋅i+fy0​​(x,y)⋅j,其中 i , j i,j i,j 表示平行于坐标軸的機關向量。二維向量微分算子也即二維梯度可以表示為:

∇ f = ∂ f ∂ x 0 i + ∂ f ∂ y 0 j \nabla f = \frac{\partial f}{\partial x_0}i + \frac{\partial f}{\partial y_0}j ∇f=∂x0​∂f​i+∂y0​∂f​j

很容易推廣到多元度的情況,比如三維的情況:

{ ∂ f ∂ x 0 , ∂ f ∂ y 0 , ∂ f ∂ z 0 } = ∂ f ∂ x 0 i , ∂ f ∂ y 0 j , ∂ f ∂ z 0 k \{\frac{\partial f}{\partial x_0},\frac{\partial f}{\partial y_0}, \frac{\partial f}{\partial z_0} \} = \frac{\partial f}{\partial x_0}i,\frac{\partial f}{\partial y_0}j, \frac{\partial f}{\partial z_0}k {∂x0​∂f​,∂y0​∂f​,∂z0​∂f​}=∂x0​∂f​i,∂y0​∂f​j,∂z0​∂f​k

  一進制函數也是存在梯度的,如果一進制函數在定義域内可導,那麼對于 ∀ x 0 \forall x_0 ∀x0​ 的梯度可以表示為   f ′ ( x ) ∗ i \space f'(x)*i  f′(x)∗i,$i $ 表示平行于坐标軸的機關向量,模長為 ∣ f ′ ( x ) ∣ |f'(x)| ∣f′(x)∣。

  一進制函數的梯度下降過程,下圖是一個 f ( x ) = 1 2 x 2 f(x)=\frac{1}{2}x^2 f(x)=21​x2的函數圖像(藍色)及其導數 f ′ ( x ) = x f'(x)=x f′(x)=x圖像(綠色),是以該函數的在 x = x 0 x=x_0 x=x0​處的梯度為 f ′ ( x 0 ) ∗ i f'(x_0)*i f′(x0​)∗i,當 x > 0 x > 0 x>0時,有 f ′ ( x ) > 0 f'(x) > 0 f′(x)>0,此時 f ( x ) f(x) f(x)在任意的 x > 0 x > 0 x>0處的梯度 x i x_i xi​應水準向右。同理當 x < 0 x<0 x<0時, f ( x ) f(x) f(x)在任意的 x < 0 x < 0 x<0處梯度方向為水準向左,是以負梯度方向則向右,此時 f ( x ) f(x) f(x)便減小,逐漸更新,直到達到最小值點。

算法的微積分基礎

  梯度下降算法是一種非常經典的求極小值的算法,比如線上性回歸裡我們可以用最小二乘法去解析最優解,但是其中會涉及到對矩陣求逆,由于多重共線性問題的存在是很讓人難受的,無論進行L1正則化的Lasso回歸還是L2正則化的嶺回歸,其實并不讓人滿意,因為它們的産生是為了修複此漏洞,而不是為了提升模型效果,甚至使模型效果下降。但是換一種思路,比如用梯度下降算法去優化線性回歸的損失函數,完全就可以不用考慮多重共線性帶來的問題。

  其實不僅是線性回歸,邏輯回歸同樣是可以用梯度下降進行優化,因為這兩個算法的損失函數都是嚴格意義上的凸函數,即存在全局唯一極小值,較小的學習率和足夠的疊代次數,一定可以達到最小值附近,滿足精度要求是完全沒有問題的。

Multivariable Taylor Series

  二進制函數在點 ( x k , y k ) (x_k, y_k) (xk​,yk​)處的泰勒展開式:

f ( x , y ) = f ( x k , y k ) + f ′ ( x k , y k ) ( x − x k ) + f ′ ( x k , y k ) ( y − y k ) + 1 2 ! f x x ′ ′ ( x k , y k ) ( x − x k ) 2 + 1 2 ! f x y ′ ′ ( x k , y k ) ( x − x k ) ( y − y k ) + 1 2 ! f y x ′ ′ ( x k , y k ) ( x − x k ) ( y − y k ) + 1 2 ! f y y ′ ′ ( x k , y k ) ( y − y k ) 2 + o n f(x,y) = f(x_k, y_k) + \\ f'(x_k, y_k)(x - x_k) + f'(x_k, y_k)(y - y_k) + \\ \frac{1}{2!}f''_{xx}(x_k, y_k)(x - x_k)^2 + \\ \frac{1}{2!}f''_{xy}(x_k, y_k)(x - x_k)(y - y_k) + \\ \frac{1}{2!}f''_{yx}(x_k, y_k)(x - x_k)(y - y_k) + \\ \frac{1}{2!}f''_{yy}(x_k, y_k)(y - y_k)^2 + o^n f(x,y)=f(xk​,yk​)+f′(xk​,yk​)(x−xk​)+f′(xk​,yk​)(y−yk​)+2!1​fxx′′​(xk​,yk​)(x−xk​)2+2!1​fxy′′​(xk​,yk​)(x−xk​)(y−yk​)+2!1​fyx′′​(xk​,yk​)(x−xk​)(y−yk​)+2!1​fyy′′​(xk​,yk​)(y−yk​)2+on

  多元函數(n)在點 x k x_k xk​處的泰勒展開式:

f ( x 1 , x 2 , . . . , x n ) = f ( x k 1 , x k 2 , . . . , x k n ) + ∑ i = 1 n f x i ′ ( x k 1 , x k 2 , . . . , x k n ) ( x i − x k i ) + 1 2 ! ∑ i , j = 1 n f x i x j ′ ′ ( x k 1 , x k 2 , . . . , x k n ) ( x i − x k i ) ( x j − x k j ) + o n f(x^1,x^2,...,x^n)=f(x_k^1,x_k^2,...,x_k^n) + \sum_{i=1}^nf'_{x^i}(x_k^1, x_k^2,...,x_k^n)(x^i - x_k^i) + \\ \frac{1}{2!}\sum_{i,j=1}^nf''_{x^ix^j}(x_k^1, x_k^2,...,x_k^n)(x^i - x_k^i)(x^j - x_k^j) + o^n f(x1,x2,...,xn)=f(xk1​,xk2​,...,xkn​)+i=1∑n​fxi′​(xk1​,xk2​,...,xkn​)(xi−xki​)+2!1​i,j=1∑n​fxixj′′​(xk1​,xk2​,...,xkn​)(xi−xki​)(xj−xkj​)+on

  利用黑塞矩陣表示多元泰勒展開式,黑塞矩陣是由函數的二階偏導數組成的方陣,描述了函數的局部曲率。黑塞矩陣常用于牛頓法解決優化問題,利用黑塞矩陣可判定多元函數的極值問題。

f ( x ) = f ( x k ) + [ ∇ f ( x k ) ] T ( x − x k ) + 1 2 ! [ x − x k ] T H ( x k ) [ x − x k ] + o n f(x) = f(x_k) + [\nabla f(x_k)]^T(x - x_k) + \frac{1}{2!}[x - x_k]^T H(x_k)[x - x_k] + o^n f(x)=f(xk​)+[∇f(xk​)]T(x−xk​)+2!1​[x−xk​]TH(xk​)[x−xk​]+on

算法的微積分基礎

  函數在某點處用泰勒展開式對函數進行逼近,距離某點處範圍越小,泰勒展開的時候就越不需要高階幂函數項的參與。

https://www.zhihu.com/question/21149770

繼續閱讀