机器学习理论篇:机器学习的数学基础
一、概述
我們知道,機器學習的特點就是:以計算機為工具和平臺,以數據為研究對象,以學習方法為中心;是概率論、線性代數、數值計算、信息論、最優化理論和計算機科學等多個領域的交叉學科。所以本文就先介紹一下機器學習涉及到的一些最常用的的數學知識。
?
二、線性代數
2-1、標量
一個標量就是一個單獨的數,一般用小寫的的變量名稱表示。
2-2、向量
一個向量就是一列數,這些數是有序排列的。用過次序中的索引,我們可以確定每個單獨的數。通常會賦予向量粗體的小寫名稱。當我們需要明確表示向量中的元素時,我們會將元素排
列成一個方括號包圍的縱柱:
?
?我們可以把向量看作空間中的點,每個元素是不同的坐標軸上的坐標。
2-3、矩陣
矩陣是二維數組,其中的每一個元素被兩個索引而非一個所確定。我們通常會賦予矩陣粗體的大寫變量名稱,比如A。 如果一個實數矩陣高度為m,寬度為n,那么我們說。
?
?
?矩陣這東西在機器學習中就不要太重要了!實際上,如果我們現在有N個用戶的數據,每條數據含有M個特征,那其實它對應的就是一個N*M的矩陣呀;再比如,一張圖由16*16的像素點組成,那這就是一個16*16的矩陣了。現在才發現,我們大一學的矩陣原理原來這么的有用!要是當時老師講課的時候先普及一下,也不至于很多同學學矩陣的時候覺得莫名其妙了。
2-4、張量
幾何代數中定義的張量是基于向量和矩陣的推廣,通俗一點理解的話,我們可以將標量視為零階張量,矢量視為一階張量,那么矩陣就是二階張量。
例如,可以將任意一張彩色圖片表示成一個三階張量,三個維度分別是圖片的高度、寬度和色彩數據。將這張圖用張量表示出來,就是最下方的那張表格:
其中表的橫軸表示圖片的寬度值,這里只截取0~319;表的縱軸表示圖片的高度值,這里只截取0~4;表格中每個方格代表一個像素點,比如第一行第一列的表格數據為[1.0,1.0,1.0],代表的就是RGB三原色在圖片的這個位置的取值情況(即R=1.0,G=1.0,B=1.0)。
當然我們還可以將這一定義繼續擴展,即:我們可以用四階張量表示一個包含多張圖片的數據集,這四個維度分別是:圖片在數據集中的編號,圖片高度、寬度,以及色彩數據。
張量在深度學習中是一個很重要的概念,因為它是一個深度學習框架中的一個核心組件,后續的所有運算和優化算法幾乎都是基于張量進行的。
?
?
2-5、范數
有時我們需要衡量一個向量的大小。在機器學習中,我們經常使用被稱為范數(norm) 的函數衡量矩陣大小。Lp 范數如下:
?
所以:
L1范數:為x向量各個元素絕對值之和;
L2范數:為x向量各個元素平方和的開方。
這里先說明一下,在機器學習中,L1范數和L2范數很常見,主要用在損失函數中起到一個限制模型參數復雜度的作用,至于為什么要限制模型的復雜度,這又涉及到機器學習中常見的過擬合問題。具體的概念在后續文章中會有詳細的說明和推導,大家先記住:這個東西很重要,實際中經常會涉及到,面試中也常會被問到!!!
?
2-6、特征分解
許多數學對象可以通過將它們分解成多個組成部分。特征分解是使用最廣的矩陣分解之一,即將矩陣分解成一組特征向量和特征值。
方陣A的特征向量是指與A相乘后相當于對該向量進行縮放的非零向量:
標量被稱為這個特征向量對應的特征值。
使用特征分解去分析矩陣A時,得到特征向量構成的矩陣V和特征值構成的向量,我們可以重新將A寫作:
?
2-7、奇異值分解(Singular Value Decomposition,SVD)
矩陣的特征分解是有前提條件的,那就是只有對可對角化的矩陣才可以進行特征分解。但實際中很多矩陣往往不滿足這一條件,甚至很多矩陣都不是方陣,就是說連矩陣行和列的數目都不相等。這時候怎么辦呢?人們將矩陣的特征分解進行推廣,得到了一種叫作“矩陣的奇異值分解”的方法,簡稱SVD。通過奇異分解,我們會得到一些類似于特征分解的信息。
它的具體做法是將一個普通矩陣分解為奇異向量和奇異值。比如將矩陣A分解成三個矩陣的乘積:
假設A是一個mn矩陣,那么U是一個mm矩陣,D是一個mn矩陣,V是一個nn矩陣。
這些矩陣每一個都擁有特殊的結構,其中U和V都是正交矩陣,D是對角矩陣(注意,D不一定是方陣)。對角矩陣D對角線上的元素被稱為矩陣A的奇異值。矩陣U的列向量被稱為左奇異向量,矩陣V 的列向量被稱右奇異向量。
SVD最有用的一個性質可能是拓展矩陣求逆到非方矩陣上。另外,SVD可用于推薦系統中。
2-8、Moore-Penrose偽逆
對于非方矩陣而言,其逆矩陣沒有定義。假設在下面問題中,我們想通過矩陣A的左逆B來求解線性方程:
等式兩邊同時左乘左逆B后,得到:
是否存在唯一的映射將A映射到B取決于問題的形式。
如果矩陣A的行數大于列數,那么上述方程可能沒有解;如果矩陣A的行數小于列數,那么上述方程可能有多個解。
Moore-Penrose偽逆使我們能夠解決這種情況,矩陣A的偽逆定義為:
但是計算偽逆的實際算法沒有基于這個式子,而是使用下面的公式:
?
其中,矩陣U,D 和V 是矩陣A奇異值分解后得到的矩陣。對角矩陣D 的偽逆D+ 是其非零元素取倒之后再轉置得到的。
?
2-9、幾種常用的距離
上面大致說過, 在機器學習里,我們的運算一般都是基于向量的,一條用戶具有100個特征,那么他對應的就是一個100維的向量,通過計算兩個用戶對應向量之間的距離值大小,有時候能反映出這兩個用戶的相似程度。這在后面的KNN算法和K-means算法中很明顯。
設有兩個n維變量和,則一些常用的距離公式定義如下:
1、曼哈頓距離
曼哈頓距離也稱為城市街區距離,數學定義如下:
?
曼哈頓距離的Python實現:
View Code
2、歐氏距離
歐氏距離其實就是L2范數,數學定義如下:
歐氏距離的Python實現:
View Code
3、閔可夫斯基距離
從嚴格意義上講,閔可夫斯基距離不是一種距離,而是一組距離的定義:
實際上,當p=1時,就是曼哈頓距離;當p=2時,就是歐式距離。
?
4、切比雪夫距離
切比雪夫距離就是,即無窮范數,數學表達式如下:
切比雪夫距離額Python實現如下:
?
?
from numpy import * vector1 = mat([1,2,3]) vector2 = mat([4,5,6]) print sqrt(abs(vector1-vector2).max)5、夾角余弦
夾角余弦的取值范圍為[-1,1],可以用來衡量兩個向量方向的差異;夾角余弦越大,表示兩個向量的夾角越小;當兩個向量的方向重合時,夾角余弦取最大值1;當兩個向量的方向完全相反時,夾角余弦取最小值-1。
機器學習中用這一概念來衡量樣本向量之間的差異,其數學表達式如下:
夾角余弦的Python實現:
?
from numpy import * vector1 = mat([1,2,3]) vector2 = mat([4,5,6]) print dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))6、漢明距離
漢明距離定義的是兩個字符串中不相同位數的數目。
例如:字符串‘1111’與‘1001’之間的漢明距離為2。
信息編碼中一般應使得編碼間的漢明距離盡可能的小。
漢明距離的Python實現:
from numpy import * matV = mat([1,1,1,1],[1,0,0,1]) smstr = nonzero(matV[0]-matV[1]) print smstr7、杰卡德相似系數
兩個集合A和B的交集元素在A和B的并集中所占的比例稱為兩個集合的杰卡德相似系數,用符號J(A,B)表示,數學表達式為:
?
杰卡德相似系數是衡量兩個集合的相似度的一種指標。一般可以將其用在衡量樣本的相似度上。
8、杰卡德距離
與杰卡德相似系數相反的概念是杰卡德距離,其定義式為:
?
杰卡德距離的Python實現:
?
from numpy import * import scipy.spatial.distance as dist matV = mat([1,1,1,1],[1,0,0,1]) print dist.pdist(matV,'jaccard')?
?
三、概率
3-1、為什么使用概率?
概率論是用于表示不確定性陳述的數學框架,即它是對事物不確定性的度量。
在人工智能領域,我們主要以兩種方式來使用概率論。首先,概率法則告訴我們AI系統應該如何推理,所以我們設計一些算法來計算或者近似由概率論導出的表達式。其次,我們可以用概率和統計從理論上分析我們提出的AI系統的行為。
計算機科學的許多分支處理的對象都是完全確定的實體,但機器學習卻大量使用概率論。實際上如果你了解機器學習的工作原理你就會覺得這個很正常。因為機器學習大部分時候處理的都是不確定量或隨機量。
?
3-2、隨機變量
隨機變量可以隨機地取不同值的變量。我們通常用小寫字母來表示隨機變量本身,而用帶數字下標的小寫字母來表示隨機變量能夠取到的值。例如, 和 都是隨機變量X可能的取值。
對于向量值變量,我們會將隨機變量寫成X,它的一個值為。就其本身而言,一個隨機變量只是對可能的狀態的描述;它必須伴隨著一個概率分布來指定每個狀態的可能性。
隨機變量可以是離散的或者連續的。
3-3、概率分布
給定某隨機變量的取值范圍,概率分布就是導致該隨機事件出現的可能性。
從機器學習的角度來看,概率分布就是符合隨機變量取值范圍的某個對象屬于某個類別或服從某種趨勢的可能性。
?
3-4、條件概率
很多情況下,我們感興趣的是某個事件在給定其它事件發生時出現的概率,這種概率叫條件概率。
我們將給定時發生的概率記為,這個概率可以通過下面的公式來計算:
?
?
3-5、貝葉斯公式
先看看什么是“先驗概率”和“后驗概率”,以一個例子來說明:
假設某種病在人群中的發病率是0.001,即1000人中大概會有1個人得病,則有: P(患病) = 0.1%;即:在沒有做檢驗之前,我們預計的患病率為P(患病)=0.1%,這個就叫作"先驗概率"。
再假設現在有一種該病的檢測方法,其檢測的準確率為95%;即:如果真的得了這種病,該檢測法有95%的概率會檢測出陽性,但也有5%的概率檢測出陰性;或者反過來說,但如果沒有得病,采用該方法有95%的概率檢測出陰性,但也有5%的概率檢測為陽性。用概率條件概率表示即為:P(顯示陽性|患病)=95%
現在我們想知道的是:在做完檢測顯示為陽性后,某人的患病率P(患病|顯示陽性),這個其實就稱為"后驗概率"。
而這個叫貝葉斯的人其實就是為我們提供了一種可以利用先驗概率計算后驗概率的方法,我們將其稱為“貝葉斯公式”。
這里先了解條件概率公式:
?
由條件概率可以得到乘法公式:
將條件概率公式和乘法公式結合可以得到:
?
再由全概率公式:
?
代入可以得到貝葉斯公式:
?
?在這個例子里就是:
?
貝葉斯公式貫穿了機器學習中隨機問題分析的全過程。從文本分類到概率圖模型,其基本分類都是貝葉斯公式。
?
期望、方差、協方差等主要反映數據的統計特征,機器學習的一個很大應用就是數據挖掘等,因此這些基本的統計概念也是很有必要掌握。另外,像后面的EM算法中,就需要用到期望的相關概念和性質。
3-6、期望
在概率論和統計學中,數學期望是試驗中每次可能結果的概率乘以其結果的總和。它是最基本的數學特征之一,反映隨機變量平均值的大小。
假設X是一個離散隨機變量,其可能的取值有:,各個取值對應的概率取值為:,則其數學期望被定義為:
?
假設X是一個連續型隨機變量,其概率密度函數為則其數學期望被定義為:
?
3-7、方差
概率中,方差用來衡量隨機變量與其數學期望之間的偏離程度;統計中的方差為樣本方差,是各個樣本數據分別與其平均數之差的平方和的平均數。數學表達式如下:
3-8、協方差
?在概率論和統計學中,協方差被用于衡量兩個隨機變量X和Y之間的總體誤差。數學定義式為:
3-9、常見分布函數
1)0-1分布
0-1分布是單個二值型離散隨機變量的分布,其概率分布函數為:
2)幾何分布
幾何分布是離散型概率分布,其定義為:在n次伯努利試驗中,試驗k次才得到第一次成功的機率。即:前k-1次皆失敗,第k次成功的概率。其概率分布函數為:
性質:
3)二項分布
二項分布即重復n次伯努利試驗,各次試驗之間都相互獨立,并且每次試驗中只有兩種可能的結果,而且這兩種結果發生與否相互對立。如果每次試驗時,事件發生的概率為p,不發生的概率為1-p,則n次重復獨立試驗中發生k次的概率為:
性質:
4)高斯分布
高斯分布又叫正態分布,其曲線呈鐘型,兩頭低,中間高,左右對稱因其曲線呈鐘形,如下圖所示:
?
若隨機變量X服從一個數學期望為,方差為的正態分布,則我們將其記為:。其期望值決定了正態分布的位置,其標準差(方差的開方)決定了正態分布的幅度。
5)指數分布
指數分布是事件的時間間隔的概率,它的一個重要特征是無記憶性。例如:如果某一元件的壽命的壽命為T,已知元件使用了t小時,它總共使用至少t+s小時的條件概率,與從開始使用時算起它使用至少s小時的概率相等。下面這些都屬于指數分布:
- 嬰兒出生的時間間隔
- 網站訪問的時間間隔
- 奶粉銷售的時間間隔
指數分布的公式可以從泊松分布推斷出來。如果下一個嬰兒要間隔時間t,就等同于t之內沒有任何嬰兒出生,即:
則:
如:接下來15分鐘,會有嬰兒出生的概率為:
指數分布的圖像如下:
6)泊松分布
日常生活中,大量事件是有固定頻率的,比如:
- 某醫院平均每小時出生3個嬰兒
- 某網站平均每分鐘有2次訪問
- 某超市平均每小時銷售4包奶粉
它們的特點就是,我們可以預估這些事件的總數,但是沒法知道具體的發生時間。已知平均每小時出生3個嬰兒,請問下一個小時,會出生幾個?有可能一下子出生6個,也有可能一個都不出生,這是我們沒法知道的。
泊松分布就是描述某段時間內,事件具體的發生概率。其概率函數為:
其中:
P表示概率,N表示某種函數關系,t表示時間,n表示數量,1小時內出生3個嬰兒的概率,就表示為 P(N(1) = 3) ;λ 表示事件的頻率。
還是以上面醫院平均每小時出生3個嬰兒為例,則;
那么,接下來兩個小時,一個嬰兒都不出生的概率可以求得為:
同理,我們可以求接下來一個小時,至少出生兩個嬰兒的概率:
【注】上面的指數分布和泊松分布參考了阮一峰大牛的博客:“泊松分布和指數分布:10分鐘教程”,在此說明,也對其表示感謝!
?
3-10、Lagrange乘子法
對于一般的求極值問題我們都知道,求導等于0就可以了。但是如果我們不但要求極值,還要求一個滿足一定約束條件的極值,那么此時就可以構造Lagrange函數,其實就是把約束項添加到原函數上,然后對構造的新函數求導。
對于一個要求極值的函數,圖上的藍圈就是這個函數的等高圖,就是說 分別代表不同的數值(每個值代表一圈,等高圖),我要找到一組,使它的值越大越好,但是這點必須滿足約束條件(在黃線上)。
也就是說和相切,或者說它們的梯度▽和▽平行,因此它們的梯度(偏導)成倍數關系;那我么就假設為倍,然后把約束條件加到原函數后再對它求導,其實就等于滿足了下圖上的式子。
在支持向量機模型(SVM)的推導中一步很關鍵的就是利用拉格朗日對偶性將原問題轉化為對偶問題。
?
?
3-11、最大似然估計
最大似然也稱為最大概似估計,即:在“模型已定,參數θ未知”的情況下,通過觀測數據估計未知參數θ 的一種思想或方法。
其基本思想是: 給定樣本取值后,該樣本最有可能來自參數為何值的總體。即:尋找使得觀測到樣本數據的可能性最大。
舉個例子,假設我們要統計全國人口的身高,首先假設這個身高服從服從正態分布,但是該分布的均值與方差未知。由于沒有足夠的人力和物力去統計全國每個人的身高,但是可以通過采樣(所有的采樣要求都是獨立同分布的),獲取部分人的身高,然后通過最大似然估計來獲取上述假設中的正態分布的均值與方差。
求極大似然函數估計值的一般步驟:
- 1、寫出似然函數;
- 2、對似然函數取對數;
- 3、兩邊同時求導數;
- 4、令導數為0解出似然方程。
在機器學習中也會經常見到極大似然的影子。比如后面的邏輯斯特回歸模型(LR),其核心就是構造對數損失函數后運用極大似然估計。
?
四、信息論
信息論本來是通信中的概念,但是其核心思想“熵”在機器學習中也得到了廣泛的應用。比如決策樹模型ID3,C4.5中是利用信息增益來劃分特征而生成一顆決策樹的,而信息增益就是基于這里所說的熵。所以它的重要性也是可想而知。
4-1、熵
如果一個隨機變量X的可能取值為,其概率分布為,則隨機變量X的熵定義為H(X):
4-2、聯合熵
兩個隨機變量X和Y的聯合分布可以形成聯合熵,定義為聯合自信息的數學期望,它是二維隨機變量XY的不確定性的度量,用H(X,Y)表示:
4-3、條件熵
在隨機變量X發生的前提下,隨機變量Y發生新帶來的熵,定義為Y的條件熵,用H(Y|X)表示:
條件熵用來衡量在已知隨機變量X的條件下,隨機變量Y的不確定性。
實際上,熵、聯合熵和條件熵之間存在以下關系:
推導過程如下:
?
其中:
- 第二行推到第三行的依據是邊緣分布P(x)等于聯合分布P(x,y)的和;
- 第三行推到第四行的依據是把公因子logP(x)乘進去,然后把x,y寫在一起;
- 第四行推到第五行的依據是:因為兩個sigma都有P(x,y),故提取公因子P(x,y)放到外邊,然后把里邊的-(log P(x,y) - log P(x))寫成- log (P(x,y) / P(x) ) ;
- 第五行推到第六行的依據是:P(x,y) = P(x) * P(y|x),故P(x,y) / P(x) = P(y|x)。
4-4、相對熵
相對熵又稱互熵、交叉熵、KL散度、信息增益,是描述兩個概率分布P和Q差異的一種方法,記為D(P||Q)。在信息論中,D(P||Q)表示當用概率分布Q來擬合真實分布P時,產生的信息損耗,其中P表示真實分布,Q表示P的擬合分布。
對于一個離散隨機變量的兩個概率分布P和Q來說,它們的相對熵定義為:
注意:D(P||Q) ≠ D(Q||P)
相對熵又稱KL散度( Kullback–Leibler divergence),KL散度也是一個機器學習中常考的概念。
?
4-5、互信息
兩個隨機變量X,Y的互信息定義為X,Y的聯合分布和各自獨立分布乘積的相對熵稱為互信息,用I(X,Y)表示。互信息是信息論里一種有用的信息度量方式,它可以看成是一個隨機變量中包含的關于另一個隨機變量的信息量,或者說是一個隨機變量由于已知另一個隨機變量而減少的不肯定性。
互信息、熵和條件熵之間存在以下關系:
推導過程如下:
通過上面的計算過程發現有:H(Y|X) = H(Y) - I(X,Y),又由前面條件熵的定義有:H(Y|X) = H(X,Y) - H(X),于是有I(X,Y)= H(X) + H(Y) - H(X,Y),此結論被多數文獻作為互信息的定義。
4-6、最大熵模型
最大熵原理是概率模型學習的一個準則,它認為:學習概率模型時,在所有可能的概率分布中,熵最大的模型是最好的模型。通常用約束條件來確定模型的集合,所以,最大熵模型原理也可以表述為:在滿足約束條件的模型集合中選取熵最大的模型。
前面我們知道,若隨機變量X的概率分布是,則其熵定義如下:
熵滿足下列不等式:
式中,|X|是X的取值個數,當且僅當X的分布是均勻分布時右邊的等號成立。也就是說,當X服從均勻分布時,熵最大。
直觀地看,最大熵原理認為:要選擇概率模型,首先必須滿足已有的事實,即約束條件;在沒有更多信息的情況下,那些不確定的部分都是“等可能的”。最大熵原理通過熵的最大化來表示等可能性;“等可能”不易操作,而熵則是一個可優化的指標。
?
五、 數值計算
5-1、上溢和下溢
在數字計算機上實現連續數學的基本困難是:我們需要通過有限數量的位模式來表示無限多的實數,這意味著我們在計算機中表示實數時幾乎都會引入一些近似誤差。在許多情況下,這僅僅是舍入誤差。如果在理論上可行的算法沒有被設計為最小化舍入誤差的累積,可能會在實踐中失效,因此舍入誤差是有問題的,特別是在某些操作復合時。
一種特別毀滅性的舍入誤差是下溢。當接近零的數被四舍五入為零時發生下溢。許多函數會在其參數為零而不是一個很小的正數時才會表現出質的不同。例如,我們通常要避免被零除。
另一個極具破壞力的數值錯誤形式是上溢(overflow)。當大量級的數被近似為或時發生上溢。進一步的運算通常將這些無限值變為非數字。
必須對上溢和下溢進行數值穩定的一個例子是softmax 函數。softmax 函數經常用于預測與multinoulli分布相關聯的概率,定義為:
softmax 函數在多分類問題中非常常見。這個函數的作用就是使得在負無窮到0的區間趨向于0,在0到正無窮的區間趨向于1。上面表達式其實是多分類問題中計算某個樣本 的類別標簽 屬于K個類別的概率,最后判別 所屬類別時就是將其歸為對應概率最大的那一個。
當式中的都是很小的負數時,就會發生下溢,這意味著上面函數的分母會變成0,導致結果是未定的;同理,當式中的是很大的正數時,就會發生上溢導致結果是未定的。
5-2、計算復雜性與NP問題
1、算法復雜性
現實中大多數問題都是離散的數據集,為了反映統計規律,有時數據量很大,而且多數目標函數都不能簡單地求得解析解。這就帶來一個問題:算法的復雜性。
算法理論被認為是解決各類現實問題的方法論。衡量算法有兩個重要的指標:時間復雜度和空間復雜度,這是對算法執行所需要的兩類資源——時間和空間的估算。
一般,衡量問題是否可解的重要指標是:該問題能否在多項式時間內求解,還是只能在指數時間內求解?在各類算法理論中,通常使用多項式時間算法即可解決的問題看作是易解問題,需要指數時間算法解決的問題看作是難解問題。
指數時間算法的計算時間隨著問題規模的增長而呈指數化上升,這類問題雖然有解,但并不適用于大規模問題。所以當前算法研究的一個重要任務就是將指數時間算法變換為多項式時間算法。
2、確定性和非確定性
除了問題規模與運算時間的比較,衡量一個算法還需要考慮確定性和非確定性的概念。
這里先介紹一下“自動機”的概念。自動機實際上是指一種基于狀態變化進行迭代的算法。在算法領域常把這類算法看作一個機器,比較知名的有圖靈機、玻爾茲曼機、支持向量機等。
所謂確定性,是指針對各種自動機模型,根據當時的狀態和輸入,若自動機的狀態轉移是唯一確定的,則稱確定性;若在某一時刻自動機有多個狀態可供選擇,并嘗試執行每個可選擇的狀態,則稱為非確定性。
換個說法就是:確定性是程序每次運行時產生下一步的結果是唯一的,因此返回的結果也是唯一的;非確定性是程序在每個運行時執行的路徑是并行且隨機的,所有路徑都可能返回結果,也可能只有部分返回結果,也可能不返回結果,但是只要有一個路徑返回結果,那么算法就結束。
在求解優化問題時,非確定性算法可能會陷入局部最優。
3、NP問題
有了時間上的衡量標準和狀態轉移的確定性與非確定性的概念,我們來定義一下問題的計算復雜度。
P類問題就是能夠以多項式時間的確定性算法來對問題進行判定或求解,實現它的算法在每個運行狀態都是唯一的,最終一定能夠確定一個唯一的結果——最優的結果。
NP問題是指可以用多項式時間的非確定性算法來判定或求解,即這類問題求解的算法大多是非確定性的,但時間復雜度有可能是多項式級別的。
但是,NP問題還要一個子類稱為NP完全問題,它是NP問題中最難的問題,其中任何一個問題至今都沒有找到多項式時間的算法。
機器學習中多數算法都是針對NP問題(包括NP完全問題)的。
5-3、數值計算
上面已經分析了,大部分實際情況中,計算機其實都只能做一些近似的數值計算,而不可能找到一個完全精確的值,這其實有一門專門的學科來研究這個問題,這門學科就是——數值分析(有時也叫作“計算方法”);運用數值分析解決問題的過程為:實際問題→數學模型→數值計算方法→程序設計→上機計算求出結果。
計算機在做這些數值計算的過程中,經常會涉及到的一個東西就是“迭代運算”,即通過不停的迭代計算,逐漸逼近真實值(當然是要在誤差收斂的情況下)。
?
六、最優化
本節介紹機器學習中的一種重要理論——最優化方法。
6-1、最優化理論
無論做什么事,人們總希望以最小的代價取得最大的收益。在解決一些工程問題時,人們常會遇到多種因素交織在一起與決策目標相互影響的情況;這就促使人們創造一種新的數學理論來應對這一挑戰,也因此,最早的優化方法——線性規劃誕生了。
在李航博士的《統計學習方法》中,其將機器學習總結為如下表達式:
機器學習 = 模型 + 策略 + 算法
可以看得出,算法在機器學習中的 重要性。實際上,這里的算法指的就是優化算法。在面試機器學習的崗位時,優化算法也是一個特別高頻的問題,大家如果真的想學好機器學習,那還是需要重視起來的。
6-2、最優化問題的數學描述
最優化的基本數學模型如下:
它有三個基本要素,即:
- 設計變量:x是一個實數域范圍內的n維向量,被稱為決策變量或問題的解;
- 目標函數:f(x)為目標函數;
- 約束條件:稱為等式約束,為不等式約束,
6-3、凸集與凸集分離定理
1、凸集
實數域R上(或復數C上)的向量空間中,如果集合S中任兩點的連線上的點都在S內,則稱集合S為凸集,如下圖所示:
數學定義為:
設集合,若對于任意兩點,及實數都有:
則稱集合D為凸集。
?
2、超平面和半空間
實際上,二維空間的超平面就是一條線(可以使曲線),三維空間的超平面就是一個面(可以是曲面)。其數學表達式如下:
超平面:
半空間:
3、凸集分離定理
所謂兩個凸集分離,直觀地看是指兩個凸集合沒有交叉和重合的部分,因此可以用一張超平面將兩者隔在兩邊,如下圖所示:
4、凸函數
凸函數就是一個定義域在某個向量空間的凸子集C上的實值函數。
?
?
數學定義為:
對于函數f(x),如果其定義域C是凸的,且對于?x,y∈C,,
有:
則f(x)是凸函數。
注:如果一個函數是凸函數,則其局部最優點就是它的全局最優點。這個性質在機器學習算法優化中有很重要的應用,因為機器學習模型最后就是在求某個函數的全局最優點,一旦證明該函數(機器學習里面叫“損失函數”)是凸函數,那相當于我們只用求它的局部最優點了。
6-4、梯度下降算法
1、引入
前面講數值計算的時候提到過,計算機在運用迭代法做數值計算(比如求解某個方程組的解)時,只要誤差能夠收斂,計算機最后經過一定次數的迭代后是可以給出一個跟真實解很接近的結果的。
這里進一步提出一個問題,如果我們得到的目標函數是非線性的情況下,按照哪個方向迭代求解誤差的收斂速度會最快呢?
答案就是沿梯度方向。這就引入了我們的梯度下降法。
2、梯度下降法
在多元微分學中,梯度就是函數的導數方向。
梯度法是求解無約束多元函數極值最早的數值方法,很多機器學習的常用算法都是以它作為算法框架,進行改進而導出更為復雜的優化方法。
在求解目標函數的最小值時,為求得目標函數的一個凸函數,在最優化方法中被表示為:
根據導數的定義,函數的導函數就是目標函數在上的變化率。在多元的情況下,目標函數在某點的梯度是一個由各個分量的偏導數構成的向量,負梯度方向是減小最快的方向。
?
如上圖所示,當需要求的最小值時(機器學習中的一般就是損失函數,而我們的目標就是希望損失函數最小化),我們就可以先任意選取一個函數的初始點(三維情況就是),讓其沿著途中紅色箭頭(負梯度方向)走,依次到,,...,(迭代n次)這樣可最快達到極小值點。
梯度下降法過程如下:
輸入:目標函數,梯度函數,計算精度
輸出:的極小值點
- 1、任取取初始值,置;
- 2、計算;
- 3、計算梯度,當時停止迭代,令;
- 4、否則令,求使;
- 5、置,計算,當或時,停止迭代,令 ;
- 6、否則,置,轉3。
6-5、隨機梯度下降算法
上面可以看到,在梯度下降法的迭代中,除了梯度值本身的影響外,還有每一次取的步長也很關鍵:步長值取得越大,收斂速度就會越快,但是帶來的可能后果就是容易越過函數的最優點,導致發散;步長取太小,算法的收斂速度又會明顯降低。因此我們希望找到一種比較好的方法能夠平衡步長。
隨機梯度下降法并沒有新的算法理論,僅僅是引進了隨機樣本抽取方式,并提供了一種動態步長取值策略。目的就是又要優化精度,又要滿足收斂速度。
也就是說,上面的批量梯度下降法每次迭代時都會計算訓練集中所有的數據,而隨機梯度下降法每次迭代只是隨機取了訓練集中的一部分樣本數據進行梯度計算,這樣做最大的好處是可以避免有時候陷入局部極小值的情況(因為批量梯度下降法每次都使用全部數據,一旦到了某個局部極小值點可能就停止更新了;而隨機梯度法由于每次都是隨機取部分數據,所以就算局部極小值點,在下一步也還是可以跳出)
兩者的關系可以這樣理解:隨機梯度下降方法以損失很小的一部分精確度和增加一定數量的迭代次數為代價,換取了總體的優化效率的提升。增加的迭代次數遠遠小于樣本的數量。
?
6-6、牛頓法
1、牛頓法介紹
牛頓法也是求解無約束最優化問題常用的方法,最大的優點是收斂速度快。
從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。通俗地說,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法 每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之后,坡度是否會變得更大。所以, 可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。
?
或者從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
?
2、牛頓法的推導
將目標函數 在處進行二階泰勒展開,可得:
因為目標函數有極值的必要條件是在極值點處一階導數為0,即:
所以對上面的展開式兩邊同時求導(注意才是變量,是常量都是常量),并令可得:
即:
于是可以構造如下的迭代公式:
這樣,我們就可以利用該迭代式依次產生的序列才逐漸逼近的極小值點了。
牛頓法的迭代示意圖如下:
上面討論的是2維情況,高維情況的牛頓迭代公式是:
式中, ▽是的梯度,即:
?
H是Hessen矩陣,即:
3、牛頓法的過程
- 1、給定初值和精度閾值,并令;
- 2、計算和;
- 3、若則停止迭代;否則確定搜索方向:;
- 4、計算新的迭代點:;
- 5、令,轉至2。
6-7、阻尼牛頓法
1、引入
注意到,牛頓法的迭代公式中沒有步長因子,是定步長迭代。對于非二次型目標函數,有時候會出現的情況,這表明,原始牛頓法不能保證函數值穩定的下降。在嚴重的情況下甚至會造成序列發散而導致計算失敗。
為消除這一弊病,人們又提出阻尼牛頓法。阻尼牛頓法每次迭代的方向仍然是,但每次迭代會沿此方向做一維搜索,尋求最優的步長因子,即:
2、算法過程
- 1、給定初值和精度閾值,并令;
- 2、計算(在處的梯度值)和;
- 3、若則停止迭代;否則確定搜索方向:;
- 4、利用得到步長,并令
- 5、令,轉至2。
6-8、擬牛頓法
1、概述
由于牛頓法每一步都要求解目標函數的Hessen矩陣的逆矩陣,計算量比較大(求矩陣的逆運算量比較大),因此提出一種改進方法,即通過正定矩陣近似代替Hessen矩陣的逆矩陣,簡化這一計算過程,改進后的方法稱為擬牛頓法。
?
2、擬牛頓法的推導
先將目標函數在處展開,得到:
兩邊同時取梯度,得:
取上式中的,得:
即:
可得:
上面這個式子稱為“擬牛頓條件”,由它來對Hessen矩陣做約束。
總結
以上是生活随笔為你收集整理的机器学习理论篇:机器学习的数学基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 研究机器学习需要什么样的数学基础?
- 下一篇: 机器学习系列-随机过程