本文主要介紹學習機器學習過程中涉及到的一些微積分的基本概念,也包括部分數值分析,最佳化求解的概念。
極限(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
統計學習方法 李航著
微積分 清華大學出版社
大學數學實驗 高等教育出版社