前言
最近幾周花了點時間學習了下今年暑假龍星計划的機器學習課程,具體的課程資料參考見附錄。本課程選講了寫ML中的基本模型,同時還介紹了最近幾年比較熱門,比較新的算法,另外也將ML理論和實際問題結合了起來,比如將其應用在視覺上,web上的等。總之,雖然課程內容講得不是特別細(畢竟只有那么幾節課),但是內容還算比較新和比較全的。學完這些課后,收獲還算不少的,至少了解到了自己哪方面的知識比較弱,下面是課程中做的一些簡單筆記。
第1課 緒論課
機器學習中3個比不可少的元素,數據,模型和算法。現在數據來源比較廣泛,每天都可以產生T級以上的數據。模型的話就是機器學習課程中需要研究的各種模型,算法就是怎樣通過數據和模型來學習出模型中的參數。但是余老師在課堂上提出一個觀點就是這3個元素都不重要,最重要的是需求,一旦有了需求,就會采用各種方法取求解問題了。不愧是百度公司的技術副總監。另外機器學習的主要應用場合包括計算機視覺,語音識別,自然語音處理,搜索,推薦系統,無人駕駛,問答系統等。
第2課 線性模型
線性回歸模型需要解決下面3個問題:
1. 怎樣從訓練數據估計線性模型的參數?即截距和斜率。
2. 學習到的線性模型性能怎樣?我們是否可以找到更好的模型?
3. 模型中2個參數的重要性怎么估計?
解決第1個問題是一個優化問題,即求得使損失函數最小的參數。這里的損失函數是平方項的,也稱為線性最小二乘思想。線性模型的表達式為:
其中噪聲參數為0均值的高斯噪聲。如果后面求出的噪聲不是一個均值為0,方差相同的類似高斯分布的隨機變量,則說明這個模型還可以被改進。比如說將x首先映射到非線性函數中去,然后對非線性函數用最小二乘法做線性回歸。至於怎樣得到非線性映射函數f(x)則要么通過人為觀察推測,要么通過機器學習中的特征學習來自動獲得。
更廣義的線性模型並不一定是一個線性方程。只是其參數可能是線性的。線性模型能夠模擬非線性函數。
殘差可以看做是噪聲的近似。但是一般來說殘差要比噪聲小。所以在線性模型中,噪聲項就可以用殘差來估計,不過其分母不是1/n,而是1/(n-p),因為需要達一個無偏估計。
特征向量元素屬性的重要性評價常見的有以下2種方法:第一是抽掉一個特征想,然后計算其殘差變化值與全部特征都用上的比值,所得到的分數為F-score,F-score越大,說明該屬性越重要。第2種方法是采用t分布來假設檢驗得到Z-score,即假設對應特征屬性不存在(即其值為0)時,出現樣本數據的概率為Z-score,如果Z-score越大,說明該屬性越不重要。
第3課 過擬合和規則項
Regularization中文意思是規則,指的是在overfitting和underfitting之間做平衡,通過限制參數空間來控制模型的復雜度。測試誤差和訓練誤差之間差一個規則項,其公式為:
模型越復雜說明模型越不穩定,學習到的目標函數越不光滑,也就越容易over-fitting。所以需要控制模型的復雜度,一般來說有2種方法,即減少模型中參數的個數或者減小參數的空間大小,目前用得最多的就是減小參數的空間大小,是通過規則項達到的。規則項的引入同時也需要引入一個調節的參數,該參數的大小一般通過交叉驗證獲得。如果規則項是2次的,則也稱為ridge回歸,規則項是一次的則稱為lasso回歸。Ridge回歸的優點是解比較穩定,且允許參數的個數大於樣本的個數。Lasson回歸的優點是有稀疏解,不過解不一定穩定。
如果碰到參數個數大於樣本個數,這時候就不能夠用參數個數來做規則化了,而是采用縮小參數空間的方法,這樣的話既在統計學上對特征數量集大時有魯棒性,同時在數值計算上方程解也具備穩定性。
第4課 線性分類器
很好的理解線性分類器,可以理解很多ml的概念,以及非線性問題。線性分類器是在實際應用過程中最有用的模型。
據余老師講,從06年開始,人工神經網絡又開始熱起來了,主要體現在deep learning領域。
svm理論很完美,應用場合也很廣,同理,logistic回歸應用場合也非常廣,和svm差不多。
當數據為大樣本數據時,用線性SVM模型比較好。
第5課 非線性svm
RKHS表示定理:即模型的參數是在訓練樣本的線性子空間中,是訓練樣本的線性組合。這不僅適用於svm,對其他的模型,比如感知機,RBF網絡,LVQ,boosting,logistic回歸等模型都成立。
Kernel可以簡單理解為表示2個值相似度的測量。通過核函數可以更好的了解regularization。所需優化的目標函數可以寫成參數形式,參數形式的對偶形式和非參數形式這3種。如果在非參數形式中,其規則項是由所學習到的函數f(x)來控制的,它的模與對應核函數進行特征函數分解時的特征值系數成反比。即特征函數分解中非主成分的函數對應的特征系數小,得到的懲罰就大,就會更加被抑制。因此我們保留的主要是主成分的那些特征函數。從上面可以看出,核函數是有一定的結構的,該結構決定了最終的目標函數f(x)長得什么樣。
邏輯回歸和svm的區別只是loss函數的不同,logstic回歸的loss函數為logstic函數,核svm的loss函數為hinge loss。兩者有着相同的性能,邏輯回歸是帶概率的輸出,更容易用於多分類問題。不過目前,這2種方法都是舊方法了。
LVQ中文名為學習矢量化,它是一個基於模型的有監督學習分類器。
因此我們在設計一個模型時,需要考慮采用什么樣的loss函數?采用什么樣的基函數h(x)?h(x)是有限維的還是無限維的?是否需要學習h(x)?用什么樣的方法來優化目標函數,QP,LBFGS,還是梯度下降等?
理論上使用kernel理論可以實現用有限的計算完成無限空間的學習問題,但是在實際問題中,由於其復雜度是樣本個數N的3次方,所以當樣本數據很多時,基本上是無法實現的。
參數模型和非參數模型的區別不是看模型中是否有參數,所有的模型都是有參數的,非參數模型是指隨着樣本數的增加,其模型中的參數的個數也跟着增加。反之就為參數模型了。常見的非參數模型有高斯過程,核svm,dirichlet過程等。
第6課 模型選擇
模型選擇在實際應用過程中非常有用,一般把與模型有關的數據分為3部分,訓練數據,驗證數據和測試數據,如下圖所示:
其中訓練數據和驗證數據都是已有的樣本數據,即已觀察到了的數據。測試數據是未來實際應用中產生的數據,是事先不知道的。
模型的參數分為2部分,第一部分是模型確定后通過訓練樣本學習得到的參數。另一部分是手動輸入的參數,也叫做超參數,是用來控制模型的復雜度的,也就是來控制模型本身長什么樣的,它是由驗證數據來調節的。
模型選擇問題就是說怎樣驗證一個模型是否好。模型的好壞最終是要看它在測試數據集上的表現。因此在未觀測到測試數據時,我們只能用驗證數據集來代替它進行測試。一般采用的方法為交叉驗證,比如說LOOCV,即留一法交叉驗證,類似的還有k折交叉驗證。交叉驗證的主要目的是防止訓練出來的模型過擬合。但是在當今由於數據都是海量的,交叉驗證方法使用越來越少了,因為如果訓練數據集非常大的話,一般不會產生過擬合現象。
還有一些方法是不需要通過驗證而直接來評價模型好壞的,比如是AIC,BIC,MDL,SRM等。
第7課 模型平均
本文中講的model是指的一個learning algorithm,甚至比learning algorithm所指的范圍還要小,因為在一個learning algorithm里,不同的參數調節和不同的輸入特征都會導致不同的model。模型選擇的目標是使模型有更好的可解釋性和更好的性能,而模型平均的目標只需要使模型有更好的性能即可,因為模型平均過程中用到了很多模型,而模型個數越多則其可解釋性就越低。模型平均的英文名稱有model ensemble,model blending, model combination, model averaging.
Model selection 和 model combination的不同使用體現在,如果某個模型以絕對的優勢好於其他所有模型,那么這時候我們就采用model selection,因為不僅有好的性能,還可以獲得好的可解釋性。如果所有的模型在性能表現上都差不多,沒有所謂的好壞,且模型本身又有很大的不同,這時候就可以采用model combination來大大提高其性能了。通常來說,model combination比model selection要穩定些。
那么該怎樣構造差異性大的模型呢?可以從下面四個方面入手:
1. 不同的學習算法。
2. 不同參數調整。
3. 有差異的輸入特征。
4. 引入隨機思想,比如bagging。
關於指數權值的模型平均只是在均一模型平均(即采用投票的方式)的基礎上將投票權值改為模型誤差的指數形式,而不是相同的均值。如果所學習到的一個模型的誤差越大,則其權值越低,理論上比較完美。不過在張老師講他自己實驗的時候發現並沒有什么提高,有時候效果還不如voting。
Stacking和指數權值的模型平均有點類似,也是先學習出各個模型,然后把學習出的模型作為第二層學習的輸入,優化最小的第二層的誤差來學習模型的權值。
Bagging也是一種均一模型平均,它的所有模型的學習算法一樣,只是輸入樣本采用bootstrip獲得。因為是采用boostrip獲得的,所以其訓練樣本有些不一定用到了,而有些則重復用到了。這樣每個學習出來的model不是很穩定,因而這也擴大了model之間的差異性,提高了集群學習的性能。Bagging是減小學習的方差,而boosting是減小學習的偏差。
最后模型平均的一個比較出名的應用場合就是把決策樹改造成隨機森林的例子。因為單顆決策樹雖然有可解釋性,能夠很好的處理非均勻的特征以及是一種非線性的方法,但是它的最大缺點就是分類結果不准確,因此在樣本選擇和輸入特征選擇方面采用了隨機的方法得到不同的模型后,再做平均就成了隨機森林,理論和實驗表明隨機森林的效果要比決策樹好很多。
第8課 Boosting
Boosting既可以看做是signal learning也可以看做是ensemble learning,本課中將其看做是ensemble learning。它是由多個弱分類器組合成一個強分類器,但是這里所指的弱分類器滿足的條件其實並不弱,因為它需要滿足對樣本的所以加權情況的分類效果都要大於0.5,因此現在有不少學者不稱這些為弱分類器了,而稱為基本分類器。Boosting中最常用的算法是AdaBoosting,AdaBoosting是對分類錯誤的樣本加大其權重來達到resamble的效果。且采用貪婪算法進行loss的函數的優化。
VC維的傳統定義為: 對一個指標函數集,如果存在H個樣本能夠被函數集中的函數按所有可能的2的K次方種形式分開,則稱函數集能夠把H個樣本打散;函數集的VC維就是它能打散的最大樣本數目H。
AdaBoosting不是最大margin的,但為什么比最大marign的boosting效果要好呢?課程中從傳統的boosting分析來做了一定的解釋,但是仍不能夠解釋當訓練誤差為0時,其泛化誤差還在減小這一問題,后面的學者又提出了從margin bound方面來解釋這個問題。另外從另一個角度來更好的理解boosing的方法是greedy boosting,即尋找樣本權重d和弱分類器權重w的過程是一個貪婪過程。最后老師講了一個general loss函數以及利用這個函數進行的general boosting。
第9課 學習理論概論
這節課的內容比較理論化,聽不太懂。機器學習理論的主要目標是平均一個學習算法的好壞,即怎樣通過訓練誤差來估計測試誤差。可以通過一致性收斂來估計訓練誤差和測試誤差之間的關系,即測試誤差以大概率事件小於訓練誤差加上某個值,這個值的大小與訓練樣本數以及概率值有關。證明上面的一致性收斂需要用到切比雪夫不等式,VC維,covering numbers這幾種技術。其中covering numbers定義為attain訓練樣本的預測函數的個數(具體是什么沒有理解清楚)。我們可以用VC維來估計convering number。最后老師還講了一個Rademacher復雜度並說了下它和VC維之間的關系,真心不懂Rademacher是個什么東東!
第10課 機器學習中的優化問題
機器學習中大部分問題都可以歸結為參數優化問題,即找到最適合目標函數的參數,該參數一般滿足使目標函數最大或者最小。
常見的優化方法有梯度下降法,該方法是每次沿着梯度下降最快的那個方向尋找函數值,不斷迭代就可以尋找到近似的極值。該方法的學習速率(即每次沿梯度方向前進的距離)和收斂速率是最值得關注的。一般來講,如果函數是光滑且是嚴格為凸函數的,則其收斂速度最快,其實是光滑但不嚴格凸的,最慢的要數非光滑函數。因此當函數有一部分是光滑,而另一部分不光滑時,我們可以采用Proximal 梯度下降法,該方法是最近幾年熱門起來的,效果比梯度下降要好,更新的類似的算法還有Nestervo這個學者的Accelerated 梯度法(全是數學公式,完全看不懂)。為了求出局部極值點,一般可以采用近似泰勒展開中的H矩陣來求得,典型的算法有LBFGS。另外當需要優化的參數為一個向量時,不一定需要把這個向量的元素對等考慮,我們可以分開優化,即每次只優化參數向量中的一個,其它的保持不變,這樣循環直到收斂。最后老師講了凸函數的優化問題還可以采用Dual 梯度下降法。
實話說,這種純數學公式的東西太乏味了!
第11課 Online learning
Online learning指的是每當來一個數據,就會學習一個最優的預測函數,其最優的准則是當前位置loss函數值最小,因此每一步的預測函數都有可能不同,這就是Online learning。其實很早前就有online learning的例子,比如說感知機學習規則。
在了解Online learning之前需要了解regret 分析這個概率,regret指的是,Online learning中每次學習的誤差減去使用用當前為止的最優函數而產生的誤差的平均值,當然我們希望regret越小越好。
Online learning的關鍵是需要更不斷新狀態。其實Online learning也是一個優化問題,我們可以把第10講的優化問題全部轉換成對應的Online learning。比如說凸優化,梯度下降法,proximal descent。其中將proximal descent轉換成online版本可以采用L1規則化,Dual averaging, 保持second order信息等。統計梯度下降可以用來優化大規模的數據,它的不同變種主要來源於不同的proximal 函數,不同的學習率,是否是dual averaging, 是否是averaging, 是否是acceleration等。
第12課 sparsity model
Sparsity model的出現時為了解決統計學習中的維數災難問題的,即樣本的個數遠遠小於特征的維數。解決標准的稀疏回歸模型可以采用greedy算法和convex relaxation。Greedy 算法中比較有代表性的是OMP。要從稀疏的參數重建參數需要有2個條件,即irrepresentable和RIP。稀疏模型一個代表性的問題是Lasso的求解。老師從上面2個條件介紹了lasso的求解。Lasso是基於L1規則化的。其它一些比較復雜的規則項對應的sparsity model有比如structured sparsity(比如說group structure), graphical model, matrix regularization. 這又是一堂純數學的課程。
第13課 Graphical model
Graphical model是一個應用比較廣泛的模型,不過比較復雜,因為里面涉及到了很多概率的知識。但是這節課的內容還算比較表面,沒有過多的細節。主要從3個方面介紹graphical model,即model本身,推理方法和模型的結構學習。概率模型中一大部分就是graphic model,而graphic model中又分為有向圖和無向圖,有向圖中比較有代表的是貝葉斯網絡,無向圖中比較有代表的是MRF。本節內容主要是講的有向圖。任何一個復雜的貝葉斯網絡都可以由causal chains,common cause, common effect這3部分構成。Graphical model應用很廣,比如說常見的線性回歸問題也可以轉換成graphical model問題,如果是分段線性回歸問題還可以轉換成帶有隱變量的graphical model。貝葉斯網絡中的推理一般是給定一些觀測數據,求出在此觀測數據下出現某些中間狀態的概率。當網絡是簡單的鏈或者是樹狀時,推理起來比較簡單,當模型含有環狀結構時,對應的推理就非常復雜了。 Graphical model中最后一個問題是模型結構的學習,可以將其看做是結構的搜索問題,對應的很多AI搜索算法此時也可以派上用場。結構學習的問題主要包括發現模型中的隱變量,因果關系直接從數據中學習其結構。
第14課 structured learning
結構學習的方法和理論包括結構輸入,結構輸出和結構模型。其中結構模型分為conditional model 和 generative model。Generative model包括HMM,HMM有觀察值獨立性的假設,為了解決該假設帶來的問題,后來有學長提出了MEMM算法,不過MEMM本身又帶來了標注偏置問題,最后面的改進算法CRF成功的解決了標注偏置問題。CRF模型可以看做是logistic 回歸在結構學習框架下的擴展.同理M3N可以看做是SVM在結構化框架下的擴展。最后課堂上老師比較了CRFs和M3N兩種算法。
第15課 deep learning
這節課講的內容比較容易激發人的興趣,一是因為deep learning最近非常火熱,二是因為用deep learning來做一些視覺問題,其效果能提高不少。本次課程沒有講具體的細節,主要是介紹了一些deep learning的概念和應用。Deep learning的意思是可以自動來學習一些特征,比如說在視覺的分類或者識別中,一般都是特征提取+分類器設計,並且提取到的特征的好壞直接影響了分類器的分類效果,但是在目前的計算機視覺領域,其特征的提取都是我們人工設計的,需要針對不同的應用場合來提取不同的特征,余老師開玩笑的說,計算機視覺最近10年的最大成就就是有了個SIFT特征,但是它是基於RGB圖像提出的,而今各種傳感器,比如Kinect等。我們又得去重新設計它的特征,難道我們還要等10年么?因此可以看出,一個通用的特征提取框架需要給出,這就是deep learning,也叫做feature learning,也就是說給了很多樣本,系統能夠自動去學習這些樣本的特征,而不是依靠人工來設計。聽起來是多么的誘人!這就更類似於AI了。Deep learning主要是確定一個算法的層次結構,這個層次結構非常重要,它的想法和人體大腦皮層的工作機制類似,因為人大腦在識別某些東西的時候也是一個層次結構的。課件中主要接受了multi-scale models和hierarchical model,structure spectrum等,但沒有具體展開,只是做了一個綜述性的介紹。
第16課 Transfer learning & Semi-supervised learning
一方面由於有些問題的訓練樣本數據非常少,且樣本的獲取代價非常高,或者是模型的訓練時間特別長,另一方面由於很多問題之間有相似性,所以TL(transfer learning)就產生了。TL主要是把多個相似的task放在一起來解決,它們共享同一個輸入空間和輸出空間,TL常見的例子有傳感器網絡預測,推薦系統,圖像分類等。常見的用來解決TL問題有下面幾個模型,HLM(層次線性模型),NN,回歸線性模型,這些模型本質上都是學校一個隱含的相同的特征空間。另外老師也講到了TL和GP(高斯過程)的對比,高斯過程是一個貝葉斯核機器的非線性算法,通過對先驗樣本的采用學習可以得到尖銳的后驗概率模型,它是一種非參數的模型。TL方法主要分為4大類:樣本之間的遷移,特征表達的遷移,模型的遷移和相關領域知識的遷移。其中特征表達的遷移和模型的遷移在數學本質上是類似的,也是學者們研究的重點。
SSL(Semi-supervised learning)是為了達到用少量標注了的樣本+大量沒有標注的樣本,來學習一個比單獨用少量標注樣本效果更好的模型。老師舉了一個混合高斯分布的例子來解釋SSL學習的效果,通過這個例子引出了SSL的一個通用模型。本課還簡單的介紹了co-training 方法,所謂co-training,就是把表組好的數據分成幾類,每一類都train一個model,然后把這些model作用到unlabel的樣本上,通過優化方法達到輸出一致的效果。最后介紹的Graph Laplacian以及它的harmonic 解就完全木有看懂。
第17課 Recommendation Systems
Recommendation Systems一個簡單的應用就是會根據用戶的購買歷史來退算出用戶可能喜歡的產品,然后推薦給用戶,目前很多互聯網公司都在做這方面的研究,因為可以帶來大量的經濟效益。Recommendation Systems是一個協同濾波問題,本課程主要圍繞不同用戶給不同電影評分這個例子來介紹。首先要解決的是歷史數據偏差不同的問題,即要對數據做預處理實現歸一化。
在對Recommendation Systems進行設計的一個主流方法之一是將Recommendation Systems問題看做是一個分類問題,即把用戶i對所有電影打分看做是要預測的標簽,而其他所有人對電影的打分看做是特征,主要采用的方法是朴素貝葉斯,KNN等(其他大部分的分類算法都可以派上用場)。Recommendation Systems問題的另一主流方法是把它看成矩陣分解(MF)問題,這在實際應用中是效果最好的。因為我們觀察到的數據是很稀疏的,很多位置都是missing的,且這些數據之間內部是存在一個簡單結構的,因此我們可以把需要填充的矩陣R分解成2個低秩矩陣的乘積,這可以采用SVD或者SVD+一些優化的方法來解決。
由此可以看出,Recommendation Systems是一個典型的ML問題。
第18課 computer vision
本課簡單的介紹了下computer vision中的基本問題,比如說什么事computer vison, computer vison的難點,computer vison問題的分類:特征檢測,邊緣檢測,目標檢測,圖像分割,拼圖,3D重建,計算機圖形學,目標識別等等。
第19課 learning on the web
機器學習在web上的應用比較廣泛,比如前面講過的推薦系統,另外還有一些搜索結果排序,分類問題,社區行為分析,用戶行為模型等等。本課程主要從分類和排序做了一些介紹。網絡上存在着各種垃圾信息,例如垃圾郵件,垃圾網頁,垃圾廣告等,分類問題就是采用ML的方法過濾掉這些垃圾信息。另外一個比較常見的分類問題是文本分類,找出文本描述的主題,其中BOW算法既簡單,又取得了很好的效果。最后老師對Web-search問題也做了個簡單的介紹。總之本課大概介紹了下ML在web上的簡單應用和挑戰。
總結:
ML給我的感覺就是規則項和最優化貫穿了本次課程的所有章節。
參考資料:
http://bigeye.au.tsinghua.edu.cn/DragonStar2012/index.html