本文主要介紹學習機器學習過程當中涉及到的一些微積分的基本概念,也包括部分數值分析,優化求解的概念。html
直觀定義算法
當函數 $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$。測試
$\lim_{x \to 0}(1+x)^{\frac {1}{x}}=e$優化
有不少人寫過關於這個常數的博客,都把這個常數跟銀行利息掛鉤了,其中比較有意思的一篇是 http://www.ruanyifeng.com/blog/2011/07/mathematical_constant_e.htmllua
設函數 $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}$。spa
設函數 $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$。htm
設函數 $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$ 元函數。
多元函數 $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$元函數。
泰勒展開主要是爲了用多項式函數來近似地表示一個函數,以研究一些比較複雜的函數性質,用途很是普遍。
一元函數 $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 上的一個原函數。注意原函數有無窮多個,他們之間相差一個常數。
設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的值。不一樣的迭代算法的區別主要在搜索方向的肯定上,而如何肯定步長是另外一個問題,這裏不打算介紹。
梯度降低法是一種迭代算法。選取適當的初值$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
將函數$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上的一張圖(綠色的線表明梯度降低法,紅色的線表明牛頓法),很形象的說明了梯度降低和牛頓法的區別,梯度降低僅僅考慮了當前函數值在迭代點附近的變化,而牛頓法還考慮了函數值變化的趨勢(會往等高線愈來愈密的方向靠),也就是二階導數,梯度降低至關於用一個平面不斷逼近,而牛頓法師用一個曲面不斷逼近,因此牛頓法收斂得更快。
將在邏輯迴歸或者最大熵模型的時候介紹和推導
在約束優化中,經常利用拉格朗日對偶性將原始問題轉換成對偶問題,經過解對偶問題獲得原始問題的解,在最大熵和支持向量機模型中,都用到了該方法。先看個例子:
將正數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
統計學習方法 李航著
微積分 清華大學出版社
大學數學實驗 高等教育出版社
轉載 http://www.cnblogs.com/dudi00/p/4056451.html