數學基礎

程序員學習人工智能,繞不開的第一道坎就是數學。

最美歐拉恒等式

人工智能(機器學習)是一個非常大的領域,那就代表每個人在其中的分工各不相同:有人負責開發模型做優化,那自然對數學要求較高;有人負責產品落地,更多的時間都在處理數據及調用現成的API。

不要把自己埋到無邊無際的數學海洋里面去,人生苦短。

本文不打算全面系統地介紹機器學習中的數學知識和概念。只介紹最少的,能夠支持機器學習入門的數學知識和概念,更多的數學請在入門后自行惡補。

1. 線性代數

機器學習中大量的用到線性代數,如向量、矩陣計算等。

1.1 標量

一個標量就是一個單獨的數,一般用小寫的的變量名稱表示。

1.2 向量

一個向量就是一列數,這些數是有序排列的。通過序列中的索引,我們可以確定每個單獨的數。通常會賦予向量粗體的小寫名稱。當我們需要明確表示向量中的元素時,我們會將元素排列成一個方括號包圍的縱柱。我們可以把向量看作空間中的點,每個元素是不同的坐標軸上的坐標。

向量

1.3 矩陣

矩陣是二維數組,其中的每一個元素被兩個索引而非一個所確定。我們通常會賦予矩陣粗體的大寫變量名稱,比如A。

矩陣

矩陣這東西在機器學習中實在是太重要了!實際上,如果我們現在有N個用戶的數據,每條數據含有M個特征,那其實它對應的就是一個N*M的矩陣;再比如,一張圖由16*16(256個)的像素點組成,那這就是一個16*16的矩陣了。

N個用戶M個特征,也可以說是一張有N行M列的數據庫(用戶)表。

1.4 張量

線性代數中定義的張量是基于向量和矩陣的推廣,通俗一點理解的話,我們可以將標量視為零階張量,矢量視為一階張量,那么矩陣就是二階張量。

例如,可以將任意一張彩色圖片表示成一個三階張量,三個維度分別是圖片的高度、寬度和色彩數據。將這張圖用張量表示出來,就是最下方的那張表格:

圖片張量

其中表的橫軸表示圖片的寬度值,這里只截取0~319;表的縱軸表示圖片的高度值,這里只截取0~4;表格中每個方格代表一個像素點,比如第一行第一列的表格數據為[1.0,1.0,1.0],代表的就是RGB三原色在圖片的這個位置的取值情況(即R=1.0,G=1.0,B=1.0)。

當然我們還可以將這一定義繼續擴展,即:我們可以用四階張量表示一個包含多張圖片的數據集,這四個維度分別是:圖片在數據集中的編號,圖片高度、寬度,以及色彩數據。

張量在深度學習中是一個很重要的概念,因為它是一個深度學習框架中的一個核心組件,TensorFlow的所有運算和優化算法幾乎都是基于張量進行的。

2. 微積分

微積分在機器學習中也是無處不在的。

2.1 導數

導數(Derivative)是微積分中的重要基礎概念。當函數y=f(x)的自變量x在一點x0上產生一個增量Δx時,函數輸出值的增量Δy與自變量增量Δx的比值在Δx趨于0時的極限a如果存在,a即為在x0處的導數,記作f'(x0)或df(x0)/dx。

導數簡單點說,就是函數的斜率。比如說y=x這個函數,圖像你應該很清楚吧,雖然y是隨著x的正加而增大的,但是其變化率也就是斜率是一直不變的。那么你能猜出來y=x的導數是多少么?

y=x的導數y'=1,同理y=2x時,則y'=2,這是最簡單的。

當函數是2次函數的時候,其斜率會忽大忽小,甚至忽正忽負,這時y'不再是一個固定的數,而是一個根據x值變化的數(說白了也是一個函數)。

不確切的說,導數是變化率、是切線的斜率、是速度、是加速度。

2.2 梯度

在一元函數中,導數就是函數隨自變量的變化率。一般一元函數的自變量使用字母x,那么函數f(x)的導數其實就是它在x軸上的變化率。

在微積分里面,對多元函數的參數求?偏導數,把求得的各個參數的偏導數以向量的形式寫出來,就是梯度。

在多元函數中,自變量是多個標量,或者理解成一個多維的向量。那么,函數隨自變量的變化怎么刻畫呢?一個方法,就是衡量函數在給定方向上的變化率,這就是方向導數。方向導數的特例,就是函數隨各個自變量(標量)的變化率,即函數的偏導數,也就是函數沿各個坐標軸正方向的方向導數。

假如一個多元函數是可微的,它在各個方向上都有方向導數。那么,函數可能在一些方向上增長的快(方向導數的值比較大),一些方向上增長的慢。所有這些方向中,會有一個增長最快的。梯度就是一個向量,其模為這個增長最快的速率(方向導數值),其方向為這個最快增長方向。

3. 損失函數

損失函數(loss function)是用來估量你模型的預測值f(x)與真實值Y的不一致程度,它是一個非負實值函數,通常使用L(Y, f(x))來表示,損失函數越小,模型的效果就越好。

例如,線性回歸算法用到的平方損失函數。

損失函數

4. 凸函數

凸函數就是一個定義域在某個向量空間的凸子集C上的實值函數。

凸函數

如果一個函數是凸函數,則其局部最優點就是它的全局最優點。這個性質在機器學習算法優化中有很重要的應用,因為機器學習模型最后就是在求某個函數的全局最優點,一旦證明該函數(機器學習里面叫“損失函數”)是凸函數,那相當于我們只用求它的局部最優點了。

5. 凸優化

機器學習中的大多數問題可以歸結為最優化問題。

人在面臨選擇的時候重視希望自己能夠做出“最好”的選擇,如果把它抽象成一個數學問題,那么“最好的選擇”就是這個問題的最優解。優化問題,就是把你考慮的各個因素表示成為一組函數(代價函數),解決這個問題就是在一集備選解中選擇最好的解。

那么,為什么我們要討論凸優化而不是一般的優化問題呢?那時因為凸優化問題具有很好的性質——局部最優就是全局最優,這一特性讓我們能夠迅速有效的求解問題。

在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(Gradient Descent)是最常采用的方法之一,另一種常用的方法是最小二乘法。

另外還有牛頓法和擬牛頓法。

5.1 梯度下降

首先來看看梯度下降的一個直觀的解釋。比如我們在一座大山上的某處位置,由于我們不知道怎么下山,于是決定走一步算一步,也就是在每走到一個位置的時候,求解當前位置的梯度,沿著梯度的負方向,也就是當前最陡峭的位置向下走一步,然后繼續求解當前位置梯度,向這一步所在位置沿著最陡峭最易下山的位置走一步。這樣一步步的走下去,一直走到覺得我們已經到了山腳。當然這樣走下去,有可能我們不能走到山腳,而是到了某一個局部的山峰低處。

梯度下降

本文不對梯度下降做進一步的講解。

5.2 最小二乘法

最小二乘法,又稱最小平方法,是一種數學優化技術。

它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,并使得這些求得的數據與實際數據之間誤差的平方和為最小。

線性回歸

所有實際值與預測值(擬合曲線上的點)差的平方求和,越小越好。

最小二乘損失函數

5.3 牛頓法

牛頓法的基本思想是利用迭代點處的一階導數(梯度)和二階導數(Hessen矩陣)對目標函數進行二次函數近似,然后把二次模型的極小點作為新的迭代點,并不斷重復這一過程,直至求得滿足精度的近似極小值。

牛頓法的速度相當快,而且能高度逼近最優值。

牛頓法分為基本的牛頓法和全局牛頓法。

5.3.1 基本牛頓法

基本牛頓法是一種是用導數的算法,它每一步的迭代方向都是沿著當前點函數值下降的方向。

5.3.2 全局牛頓法

牛頓法最突出的優點是收斂速度快,具有局部二階收斂性,但是,基本牛頓法初始點需要足夠“靠近”極小點,否則,有可能導致算法不收斂。這樣就引入了全局牛頓法。

5.4 擬牛頓法

擬牛頓法的本質思想是改善牛頓法每次需要求解復雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的復雜度。擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標函數的梯度。通過測量梯度的變化,構造一個目標函數的模型使之足以產生超線性收斂性。這類方法大大優于最速下降法,尤其對于困難的問題。另外,因為擬牛頓法不需要二階導數的信息,所以有時比牛頓法更為有效。如今,優化軟件中包含了大量的擬牛頓算法用來解決無約束,約束,和大規模的優化問題。

5.5 凸優化小結

從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之后,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全局思想。)

從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

6. 繼續前行

初步認識上面的概念后,就可以開始機器學習的學習了。

調包俠:現有機器學習算法已經有大量的實現,在工作中,普通程序員只需要在理解概念的情況下調用其提供的API,俗稱調包俠。

在后續的學習和工作中,對數學會越來越有感覺,就可以再進一步的根據需要深入學習,以加深對機器學習的理解。

Kevin,2018年4月24日,成都。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。