數學基礎之微積分

Lei Jun發表於2014-10-30

本文主要介紹學習機器學習過程中涉及到的一些微積分的基本概念,也包括部分數值分析,最佳化求解的概念。

極限(limit)

直觀定義

當函式 $y=f(x)$ 在 $x_{0}$ 的某個去心鄰域內有定義,若當 $x$ “無限趨近於” $x_{0}$ 時,其對應的函式值 $f(x)$ “無限趨於” 一個確定的常數 $A$ ,則稱 $A$ 是當 $x$ 趨於 $x_0$ 時函式 $y=f(x)$ 的極限,記作 $\lim_{x\to x_0}f(x)=A$。這裡所說的“直觀定義”主要指“無限趨於”,是一種直觀的說法,並沒有給出確切的數學定義。

精確定義

直觀定義中的“無限趨近”是個含糊不清的概念,為了更精準的用數學語言表達這個概念,很多數學家都做了努力,包括法國數學家朗貝爾(D' Alembert),法國數學家柯西(Cauchy),但最終系統的引入 $\varepsilon - \delta$ 語言的是德國數學家魏爾斯得拉斯(Weierstrass)。

設 $f(x)$ 定義在 $x_0$ 的某個去心領域 $N^*(x_0)$ ,若存在常數 $A$ ,對於任意給定的 $\varepsilon>0$ ,存在 $\delta>0$ ,使得對於任意的 $x\in N^*(x_0,\delta)$,即當 $0<|x-x_0|<\delta$ 時,恆有 $|f(x)-A|<\varepsilon$,則稱 $A$ 為 $f(x)$ 當 $x\to x_0$ 時的極限,記作$\lim_{x\to x_0}f(x)=A$。

 

常數 $e$

$\lim_{x \to 0}(1+x)^{\frac {1}{x}}=e$

有很多人寫過關於這個常數的部落格,都把這個常數跟銀行利息掛鉤了,其中比較有意思的一篇是 http://www.ruanyifeng.com/blog/2011/07/mathematical_constant_e.html

 

導數(derivative)

設函式 $y=f(x)$ 在點 $x_0$ 的某鄰域內有定義,如果極限 $\lim_{\Delta x \to 0}\frac {f(x_0 + \Delta x) - f(x_0)}{\Delta x}$ 存在,則稱函式 $f(x)$ 在 $x_0$ 可導,並且稱這個極限值為函式 $f(x)$ 在點 $x_0$ 處的導數,記作 $f^\prime (x_0)$ 或者 $\frac {df}{dx}|_{x=x_0}$。

 

微分(differential)

設函式 $y=f(x)$ 在點 $x_0$ 的某鄰域內有定義,$\Delta x$ 是自變數 $x$ 在 $x_0$ 處的增量,如果存在一個與 $\Delta x$ 無關的常數 $a$,使得 $\Delta y=f(x_0 + \Delta x) - f(x_0) = a \Delta x + o(\Delta x)$,則稱函式 $f(x)$ 在點 $x_0$ 出可微(differentiable),關於 $\Delta x$ 的線性部分 $a\Delta x$ 是函式 $f(x)$ 在點 $x_0$ 處的微分。記作 $df(x_0)$。顯然有 $f^\prime(x_0)=a$。

 

導數的四則運算

設函式 $f(x)$,$g(x)$,在 $x$ 處可導,則:

$(f(x)+g(x))^\prime =f^\prime (x) + g^\prime (x)$

$(f(x) \cdot g(x))^\prime = f^\prime (x)g(x) + f(x)g^\prime (x)$

$\large \left( \frac {f(x)}{g(x)} \right)^\prime = \frac {f^\prime (x)g(x) - f(x)g^\prime (x)} {g^2(x)} $

 

複合函式求導

設複合函式 $y=f(g(x))$,函式 $g(x)$ 在點 $x$ 可導,函式$f(u)$在點$u=g(x)$可導,則複合函式$y=f(g(x))$在點 $x$ 可導,並且:

$\Large \frac {dy}{dx}=\frac {dy}{du} \frac {du}{dx} $。

 

偏導數

設二元函式 $f(x,y)$ 在點 $P_0=(x_0,y_0)$ 的某個鄰域有定義,固定 $y=y_0$,將函式 $f(x,y_0)$ 看作 $x$的一元函式,並在 $x_0$求導, $\lim_{\Delta x \to 0} \frac {f(x_0+\Delta x, y_0) - f(x_0, y_0) }{\Delta x}$,如果這個導數存在,則稱其為二元函式$f(x,y)$在點 $P_0=(x_0,y_0)$關於$x$的偏導數,記作$\frac {\partial f(x_0,y_0)}{\partial x}$。同理可以定義$\frac {\partial f(x_0,y_0)}{\partial y}$。可以將二元函式擴充套件到 $n$ 元函式。

 

海森矩陣(Hesse Matrix)

多元函式 $f(x_1,x_2, \ldots, x_d)$ 在 $x_0=(x_{10},x_{20},\ldots , x_{d0})$的所有二階偏導數構成的矩陣 :

$\Large \left[ \begin{matrix} \frac {\partial ^ {2} f}{\partial x_1^2} & \frac {\partial ^ {2} f}{\partial x_1 \partial x_2} & \ldots & \frac {\partial ^ {2} f}{\partial x_1 \partial x_d} \\ \frac {\partial ^ {2} f}{\partial x_2 \partial x_1} & \frac {\partial ^ {2} f}{\partial x_2^2} & \ldots & \frac {\partial ^ {2} f}{\partial x_2 \partial x_d} \\ \vdots & \vdots & & \vdots \\ \frac {\partial ^ {2} f}{\partial x_d \partial x_1} & \frac {\partial ^ {2} f}{\partial x_d \partial x_2} & \ldots & \frac {\partial ^ {2} f}{\partial x_d^2} \end{matrix} \right]$

稱為函式$f(x_1,x_2, \ldots, x_d)$ 在 $x=(x_{10},x_{20},\ldots , x_{d0})$ 的海森矩陣,記作 $H_f(x_0)$。

 

梯度

設二元函式 $f(x,y)$ 在點 $(x_0,y_0)$ 可微,稱向量$ \large \left( \frac {\partial f(x_0,y_0)}{\partial x}, \frac {\partial f(x_0,y_0)}{\partial y} \right)^T$ 為$f(x,y)$ 在點 $(x_0,y_0)$的梯度。如果梯度是非零向量,則梯度方向是函式值增長最快的方向,負梯度是函式值下降最快的方向,這點在後面會經常用到。同樣二元函式也可以很容易擴充套件到$n$元函式。

 

泰勒展開(Taylor's expansion)

泰勒展開主要是為了用多項式函式來近似地表示一個函式,以研究一些比較複雜的函式性質,用途非常廣泛。

一元函式 $f(x)$ 在 $x=x_0$ 處的展開式為:

$\large f(x)=f(x_0)+\frac {f^\prime (x_0)}{1!}(x-x_0)+\frac {f^{\prime \prime} (x_0)}{2!}(x-x_0)^2+\frac {f^3(x_0)}{3!}(x-x_0)^3+\ldots$

$e^x$ 在 $x=0$ 處的展式為:

$\large e^x=\sum_{n=0}^\infty \frac {x^n} {n!}=1+x+\frac {x^2}{2!}+\frac {x^3}{3!}+\ldots$

常見的泰勒展開公式有兩種,一種帶佩亞諾(Piano)餘項,一種帶拉格朗日(lagrange)餘項。

帶佩亞諾餘項的泰勒展開:

$\large f(x) = \sum_{k=0}^{n}\frac {f^{k}(x_0)}{k!}(x-x_0)^k+o((x-x_0)^n)$

最後一項稱為佩亞諾餘項。

帶拉格朗日餘項的泰勒展開:

$\large f(x) = \sum_{k=0}^{n}\frac {f^{k}(x_0)}{k!}(x-x_0)^k + \frac {f^{n+1}(\varepsilon)}{(n+1)!}(x-x_0)^{n+1}$

其中 $\varepsilon$介於$x$ 與 $x_0$之間,最後一項成為拉格朗日餘項。

多元函式 $f(x_1,x_2, \ldots, x_d)$ 在 $x=(x_{10},x_{20},\ldots , x_{d0})$ 處的展開式為:

$\large f(x_1,x_2, \ldots, x_d)=f(x_{10},x_{20},\ldots , x_{d0})+ \sum_{i=1}^{d} \frac {\partial f(x_{10},x_{20},\ldots , x_{d0})}{\partial x_i}(x_i-x_{i0}) + \frac {1}{2!} \sum_{i=1}^{d} \sum_{j=1}{d}\frac {\partial f(x_{10},x_{20},\ldots , x_{d0})}{\partial x_i \partial x_j}(x_i-x_{i0})(x_j-x_{j0}) + \ldots $

 

原函式

如果在區間 I 上存在一個可導函式F(x),使得$\forall x \in I $,恆有 $F^\prime (x) = f(x)$,則稱F(x)為f(x)在 I 上的一個原函式。注意原函式有無窮多個,他們之間相差一個常數。

 

牛頓萊布尼茨(Newton-Leibniz)公式

設f(x)在[a,b]上連續,F(x)是f(x)在[a,b]上的一個原函式,則:

$\large \int_{a}^{b} f(x)dx = F(x)|_{a}^{b} = F(b) - F(a) $

 

一元函式極值

必要條件

如果函式 $y=f(x)$ 在點 $x_0$ 處取得極值(極大值或極小值),且在該點可導,則導數$f^\prime (x_0)=0$。

充分條件

如果函式 $y=f(x)$在$x_0$的某個鄰域內有一階導數,並且$f^\prime (x_0)=0$,又設$f^{\prime \prime} (x_0)$ 存在,則有:

(1)如果$f^{\prime \prime} (x_0)>0$,則$f(x)$在$x_0$取得極小值;

(2)如果如果$f^{\prime \prime} (x_0)<0$,則$f(x)$在$x_0$取得極大值;

 

多元函式極值

必要條件

設多元函式 $f(x_1,x_2, \ldots, x_d)$在$x_0=(x_{10},x_{20},\ldots , x_{d0})$取得極值,如果 $f(x)$ 在點 $x_0$ 處存在偏導數 $\frac {\partial f}{\partial x_i}$,則有$\frac {\partial f}{\partial x_i}=0$(i=1,2,3...d)。

充分條件

設多元函式 $f(x_1,x_2, \ldots, x_d)$ 在 $x_0=(x_{10},x_{20},\ldots , x_{d0})$及其附近有連續二階偏導數,而且 $gradf(x_0)=0$,則:

(1)$H_f(x_0)$正定時,$x_0$ 是極小值點;

(2)$H_f(x_0)$負定時,$x_0$ 是極大值點;

(3)$H_f(x_0)$不定時,$x_0$ 不是極值點; 

 

 無約束最佳化

假設函式 $f(x)$是 $R^n$上具有二階連續偏導數的函式,考慮無約束最佳化問題:

$\large min_{x \in R^n}f(x)$

$x^*$表示目標函式$f(x)$的極小點。解無約束最佳化問題一般常用迭代演算法,常用的迭代演算法有梯度下降法,牛頓法和擬牛頓法。迭代公式為:

$x^{k+1}=x^k +\lambda_k d_k$

其中$d_k$稱為搜尋方向,$\lambda_k$稱為步長,$x^k$為第k次迭代後x的值。不同的迭代演算法的區別主要在搜尋方向的確定上,而如何確定步長是另一個問題,這裡不打算介紹。 

 

梯度下降法(Gradient Descent)

梯度下降法是一種迭代演算法。選取適當的初值$x^0$,不斷迭代,更新$x$的值,直到收斂。由於梯度方向是函式值增長最快的方向,負梯度方向是函式值下降最快的方向,所以梯度下降法很自然的選擇了負梯度方向為搜尋方向。所以迭代公式變為:

$x^{k+1}=x^k - \lambda_k \bigtriangledown f(x^k)$

其中$\bigtriangledown f(x^k)$為$f(x)$在$x^k$的梯度,記為$g_k$。

演算法:梯度下降法

1.給定初值$x^0$和精度閾值$\varepsilon$,並令k :=0

2.計算$f(x^k)$

3.計算 $g_k$,如果$||g_k||<\varepsilon$,停止迭代,令$x^*=x^k$;否則求步長 $\lambda_k$

4.計算新的迭代點$x^{k+1}=x^k - \lambda_k g_k$,計算$f(x^{k+1})$,如果$||f(x^{k+1}) - f(x^k)||<\varepsilon$或者$||x^{k+1} - x^k||$,停止迭代,令$x^*=x^{k+1}$

5.否則,令k:=k+1,轉步驟3

 

牛頓法(Newton's method)

將函式$f(x)$在$x^k$附近做二階泰勒展開:

$f(x)=f(x^k)+g_k(x-x^k)+\frac {1}{2}(x-x^k)^T H(x^k) (x-x^k)$

其中 $g_k$是$f(x)$在$x^k$處的梯度值,$H(x^k)$為海森矩陣在$x^k$處的值。

對上面的二階泰勒展開式兩邊求導得到:

$\bigtriangledown f(x) = g_k + H_k(x-x^k)$

 由前面提到的多元函式極值的必要條件得知,如果函式在$x=x^{k+1}$處取得極值,必有:

 $\bigtriangledown f(x^{k+1}) = 0$

 將$x=x^{k+1}$代入整理得到:

$ g_k + H_k(x^{k+1}-x^k) = 0 $

所以:

$x^{k+1} = x^k + (-H^{-1}_k g_k)$

其中$-H^{-1}_k)g_k$稱為牛頓方向,如果也引入一個步長 $\lambda_k$,則:

演算法牛頓法

1.給定初值$x^0$和精度閾值$\varepsilon$,並令k:=0

2.計算 $g_k$,$H_k$

3.如果$||g_k||<\varepsilon$,停止迭代;否則確定牛頓方向 $d_k=-H^{-1}_k g_k$,計算步長 $\lambda_k$

4.計算新的迭代點 $x^{k+1} = x^k + \lambda_k d_k$

5.令k:=k+1,轉步驟2

  Wikipedia上的一張圖(綠色的線代表梯度下降法,紅色的線代表牛頓法),很形象的說明了梯度下降和牛頓法的區別,梯度下降僅僅考慮了當前函式值在迭代點附近的變化,而牛頓法還考慮了函式值變化的趨勢(會往等高線越來越密的方向靠),也就是二階導數,梯度下降相當於用一個平面不斷逼近,而牛頓法師用一個曲面不斷逼近,所以牛頓法收斂得更快。

 

 

擬牛頓法(Quasi-Newton's method)

將在邏輯迴歸或者最大熵模型的時候介紹和推導

 

約束最佳化

在約束最佳化中,常常利用拉格朗日對偶性將原始問題轉換成對偶問題,透過解對偶問題得到原始問題的解,在最大熵和支援向量機模型中,都用到了該方法。先看個例子:

將正數a分成n個正數之和,如何使乘積最大?

令:

$\large f(x_1,x_2,\ldots,x_n) = x_1 x_2 \ldots x_n $

$\large g(x_1,x_2,\ldots,x_n) = x_1 + x_2 + \ldots + x_n - a $

構造輔助函式:

$\large L(x_1,x_2,\ldots,x_n) = x_1 x_2 \ldots x_n - \lambda (x_1 + x_2 + \ldots + x_n - a) $

$\large \frac {\partial L}{\partial x_1} = \frac {\partial f}{\partial x_1} + \lambda \frac {\partial g}{\partial x_1} =x_2 x_3 \ldots x_n - \lambda = 0 $

$\large \ldots $

$\large \frac {\partial L}{\partial x_n} = \frac {\partial f}{\partial x_n} + \lambda \frac {\partial g}{\partial x_n} =x_1 x_2 \ldots x_{n-1} - \lambda = 0 $

$\large \frac {\partial L}{\partial \lambda} = a - (x_1 + x_2 + \ldots + x_n) = 0 $

解方程組組得到:

$\large x_1=x_2=\ldots=x_n=\frac {a}{n} $

但一般實際問題中遇到的問題比這個要複雜得多,不太好直接求解,往往會將這個問題轉化成另外一個等價的問題,這就是所謂的拉格朗日對偶問題。

原始問題

設$f(x)$, $c_i(x)$, $h_j(x)$ 是定義在 $\textbf {R}^n$上的連續可微函式,考慮約束最佳化問題:

$min_{x \in R^n} f(x) $

$s.t. \qquad c_i(x) \leq 0, i=1,2, \ldots, k $

$ \qquad \qquad h_j(x)=0, j=1,2, \ldots, l $

稱此約束最最佳化問題為原始最最佳化問題或者原始問題。

引進廣義拉格朗日函式:

$\large L(x,\alpha,\beta) = f(x) + \sum_{i=1}^{k}\alpha_i c_i(x) + \sum_{j=1}^{l}\beta_j h_j(x) $

其中 $\alpha_i $, $beta_j$ 是拉格朗日乘子,並且$\alpha_i \geq 0$。

考慮x的函式:

$\large \Theta_P(x) = max_{\alpha,\beta : \alpha_i \geq 0}L(x,\alpha,\beta) $

下標P表示原始問題。注意這是關於 x 的函式,$\alpha$, $\beta$ 只是約束。

如果 x 都能滿足原始約束條件的話,顯然有 $ \Theta_P(x) = f(x) $,如果存在 x 不滿足條件,一定可以找到合適的 $\alpha$, $\beta$ 讓 f(x) 無窮大。如果考慮極小化問題:

$\large min_x \Theta_P(x) = min_x max_{\alpha,\beta : \alpha_i \geq 0}L(x,\alpha,\beta) $

顯然該問題的解與原始問題的解釋等價的,即他們有相同的解。問提$min_x max_{\alpha,\beta : \alpha_i \geq 0}L(x,\alpha,\beta) $稱為廣義拉格朗日函式的極小極大問題。定義原始問題的的最優值為:

$p^*=min_x \Theta_P(x)$

 

對偶問題

定義$\alpha$, $\beta$的函式:

$\large \Theta_D(\alpha,\beta) = min_x L(x,\alpha,\beta)$

再考慮極大化問題:

$\large max_{\alpha,\beta : \alpha_i \geq 0}\Theta_D(\alpha,\beta)  = max_{\alpha,\beta : \alpha_i \geq 0}min_x L(x,\alpha,\beta)$

問題 $max_{\alpha,\beta : \alpha_i \geq 0}min_x L(x,\alpha,\beta)$ 稱為廣義拉格朗日函式的極大極小問題。

將這個極大極小問題表示稱約束最最佳化問題:

$\large max_{\alpha,\beta}\Theta_D(\alpha,\beta)  = max_{\alpha,\beta}min_x L(x,\alpha,\beta)$

$s.t. \alpha_i \geq 0, i=1,2,\ldots,k$

稱為原始問題的對偶問題。定義對偶問題的最優值為:

$d^* = max_{\alpha,\beta : \alpha_i \geq 0}\Theta_D(\alpha,\beta) $

 

原始問題與對偶問題的關係

如果原始問題和對偶問題都有最優值,則有 $d^* \leq p^*$。

假設$f(x)$, $c_i(x)$是凸函式,$h_j(x)$是仿射函式,並且不等式約束 $c_i(x)$嚴格可行(即存在x,對所有的c(x)<0),則$x^*$, $\alpha^*$, $\beta^*$分別是原始問題和對偶問題的解的充要條件是$x^*$, $\alpha^*$, $\beta^*$滿足KKT(Karush-Kuhn-Tucker)條件:

$\nabla_x L(x^*,\alpha^*,\beta^*)=0$

$\nabla_{\alpha} L(x^*,\alpha^*,\beta^*)=0$

$\nabla_{\beta} L(x^*,\alpha^*,\beta^*)=0$

$\alpha_{i}^{*}c_i(x^*)=0, i=1,2,\ldots,k$

$c_i(x^*) \leq 0, i=1,2,\ldots,k$

$\alpha_{i}\geq 0, i=1,2,\ldots,k$

$h_{j}(x^*)\geq 0, i=1,2,\ldots,l$

 

練習題

最後附上CMU的一套簡單測試題,可以用來你是否具備學習機器學習入門的數學基礎。

http://www.cs.cmu.edu/~aarti/Class/10701_Spring14/Intro_ML_Self_Evaluation.pdf

 

參考資料

http://en.wikipedia.org/wiki/Taylor_series

http://en.wikipedia.org/wiki/Newton's_method_in_optimization

統計學習方法 李航著

微積分 清華大學出版社

大學數學實驗 高等教育出版社

 

相關文章