pattern recognition and machine learning這本書怎麼看?
感覺看後面忘前面,,掌握的也不是很深,怎麼辦呢?
這裡有PRML里幾乎所有演算法的matlab實現。按章節對應,代碼里的符號和書同步,並且代碼注釋給出書中對應的公式,覺得有用就點個星星
GitHub - PRML/PRMLT: Pattern Recognition and Machine Learning Toolbox
最近有時間把Christopher M Bishop的《Pattern Recognition and Machine Learning》(PRML)溫習了一遍,這本書可以說是機器學習的經典學習之作。以前在上機器學習這麼課的時候,很多細節還沒聯繫到,結果在讀論文中就顯得捉襟見肘。本文打算理清楚這本書的脈絡,也順便為學習機器學習的人打下一個學習路線圖。
1. 排除兩塊內容
現排除第五章的內容神經網路,之所以把神經網路先單列出來,原因一是一個比較獨立的研究脈絡,二是因為這部分因為深度學習的原因太熱了,所以我認為在學習機器學習中把神經網路單列出來學習,在交大的研究生課程安排中,神經網路是機器學習的後續課程。
對於第6,7章,也不在下面的學習路線中,因為這部分是關於核技巧方面的,主要是就是高斯過程回歸,高斯過程分類以及SVM等內容。
2. 一個概率圖框架為中心視角
排除了上面幾章的內容,PRML書中可以用下面的學習路線圖覆蓋,通過這個圖可以理清楚了各個內容的不同角色。
說明:
(1)一般模型中都會有隱變數因此,,因此對於P(X)的採用MLE學習的另一個技巧,便是第九章 EM演算法。條件是在M步時,Q要可以被analytically computed。
(2)至於為什麼近似,Exact Inference is hard we resort to approximation
3. 隱變數技巧
下面我們看看另外一個視角:隱變數技巧。隱變數不僅可以使得模型的表達能力豐富起來,而且通常對於隱變數往往富有一定的實際意義。
說明:
(1)這裡所謂的結合模型中,在PRML中最後一章僅僅提到了以加法的方式進行模型集合,也就是mixture of experts,在論文Hinton G E. Training products of experts by minimizing contrastive divergence[J]. Neural computation, 2002, 14(8): 1771-1800. 提出了product of experts 模型,也就是以乘法的方式進行結合,RBM就是一種特殊的product of experts 模型,而高斯混合模型便是加法模型的代表。
(2)隱變數的技巧是機器學習中一種重要的技巧,隱變數的加入不僅僅增加了模型的表達能力,而且,隱變數還可以被賦予某種特殊的意義,比如RBM模型中隱變數h被當成顯變數v的特徵抽象。這當然歸根結底是因為隱變數模型確實是現實世界真實存在的情況,unobserved but important variables do exist! 當然隱變數的引入也為模型的推斷帶來了新的挑戰,有很多比較好的隱變數模型往往找不到很高效的方法,而被限制著。
4. 例子說明
下面分別從上面兩個視角來分析RBM模型,貝葉斯線性回歸和序列模型。
4.1 RBM模型
RBM模型是一個無向2層對稱的圖模型,從隱變數的視角來看,它是一個以乘法方式結合的distributed models。當然隱變數的引入增加了模型的複雜性和表達能力,但是也為學習,推斷帶來了問題。對於RBM的參數學習,因為是無向圖,所以採用MLE最大化P(X),但是由於此時P(X,Z)難以評估,所以
很難計算,沒有在RBM的學習中不能像高斯混合模型那樣可以採取EM演算法。因此只能採取最為標準的做法,求取P(X)的梯度,結果梯度公式如下:
參見 Asja,Fischer; Christian Igel 2012。
然而對於計算後面的model部分的積分需要知道模型的概率分布,評估模型的概率分布需要計算一個標準化的分母,難以計算。因此就需要依賴近似,由於p(v|h),p(h|v)都是可以分析公式表達,因此採用Gibbs sampler來數值逼近積分。當然後來Hinton G E. Training products of experts by minimizing contrastive divergence[J].發現對於這一部分,Gibbs sampler 不需要多部的迭代,一次迭代就可以了,從而使的訓練RBM的時間代價大大降低了,後來(A fast learning algorithm for deep belief nets,2006)提出了貪婪式的訓練多層DBN(stacked RBM),每層都是訓練RBM,從而使的深度學習煥發新的活力(Reducing the dimensionality of data with neural networks,2006)。
4.2 貝葉斯線性回歸Bayesian Linear Regression BLR
這個模型是最為基礎的,這個模型在PRML中,利用直接推斷,變分法推斷,MCMC採樣都是可以做的;因此便於比較不同演算法得到的結果。之前,本來打算在這裡以LDA主題模型來舉例,雖然LDA的EM演算法, 變分法,以及Gibbs sampling 都是可以做的,但是模型太複雜,所以果斷放棄了,以BLR模型作為例子說明。
BLR是一個有向圖模型,是一個典型的貝葉斯網路(雖然簡單一點)。如果以一個貝葉斯的視角來看,其中的隱變數便是線性參數w,以及各種超參數α,β.....,在貝葉斯的處理視角之下,這些都會賦予一個先驗分布。當然,有些模型書中也提到,有不同層次上的貝葉斯網路。有的是僅僅對參數w賦予一個先驗分布,而對於其他的參數(hyperparameter)僅僅是作為模型參數,就是假設是一個渡固定的數值,然後再通過learn evidence function,其實說白了就是MLE,來尋找最佳的超參數α,β....。相比於把線性參數w,以及各種超參數α,β.....全部作為放入到貝葉斯網路中,這樣的做法顯然簡化了模型,降低了貝葉斯網路的複雜性。這個技巧也在多處的論文中出現。
從隱變數的角度來看,由於BLR模型相對簡單,其中並沒有隨機隱變數,僅僅是一些參數w,以及各種超參數α,β..的環境隱變數。
4.3 序列模型:隱馬爾可夫鏈HMM與條件隨機CRF
隱馬爾可夫鏈HMM這個模型是一個有向圖模型,典型的貝葉斯網路,只不過這個網路是一個線性鏈(linear chains),因此可以進行分析上推斷,要知道對於一般網路,並不存在通用的實用的inference演算法。因為HMM是一個有向圖模型。但是(1)在PRML書中,以及李航《統計學習》中並沒有把其當作一個貝葉斯網路來進行處理,對所有的參數比如發射概率,轉移矩陣概率都是模型的參數,而不是通過賦予一個先驗分布,從而納入到貝葉斯網路框架之中。因此對於模型而言,關鍵的便是通過MLE最大化P(X)來學習模型的參數,因為這裡的有隱變數,因此在PRML,以及《統計學習》中都是通過EM演算法做的。(2)其實,HMM是一個典型的線性鏈式的貝葉斯網路,因此對於通過對其參數賦予先驗分布,進而從貝葉斯的角度,來對模型進行推斷是一個非常自然的想法。我在論文Sharon Goldwater, Thomas L Griffiths 論文 A Fully Bayesian Approach to Unsupervised Part-of-Speech Tagging,中作者採用了Bayesian HMM 重新做了POS任務。作者在文中還詳細羅列了Bayesian HMM 相比普通的HMM的優點:(a)可以使用先驗知識,例如在POS中語言的認知可以加入到先驗分布之中,而且(b)貝葉斯的推斷,是通過一個後驗分布推斷參數,相比MLE點估計,會更加準確。對於貝葉斯的推斷,作者在文中使用了Gibbs sample抽樣實現了數值採樣推斷模型。最後作者比較了Gibbs sample+Bayesian HMM和普通的HMM +EM,在POS任務效果更加好。另外,對於本論文的作者Thomas L Griffiths,第一次接觸這個學者,是在讀Gibbs sample in LDA這篇文章,作者推導了LDA的各種的條件分布,然後基於Gibbs sample 進行採樣,記得Github上有Java版的實現代碼,其推導十分嚴謹,並且有代碼輔助,是學習LDA的一個捷徑。在近似推斷方面可以看出Thomas L Griffiths是一個堅定的數值採樣學派,而LDA的開山之作《Latent Dirichlet Allocation 》的作者David M. Blei,看了作者部分文章以後,發現這個人是在近似推斷方面是一個變分法的堅定學派,在《Latent Dirichlet Allocation 》之中,便是通過變分法進行推斷了,David M. Blei還寫了一個關於變分法的入門講義pdf,網上可以搜到。所以回看我們概率圖視角,做機器學習推斷是不可避免的,有的是變分法近似,有的是數值採樣近似,也有的是EM演算法試一試。至於選擇哪一種,就看你的問題哪一個比較簡單了。但是好像有的人對這些方面各有偏愛。
再說一下條件隨機場CRF,相比與HMM,這也是一個序列模型,在很多的NLP任務中,CRF都是state of art 的演算法,畢竟人家可以方便的特徵工程嘛。但是這種日子被深度學習取代了,在NLP方面,RNN(遞歸神經網路)要比CRF表現更好,見我之前博文基於RNN做語義理解和詞向量。先不說這麼遠,CRF的模型架構上是一個典型的無向的鏈式概率圖模型,因此,(回看我們概率圖的視角),CRF的關鍵問題便是如何進行學習了P(X),好在求其該模型直接求其梯度並沒有太大的困難,具體可以參見李航的《統計學習》。
5 結束語
這篇文章,從概率圖,隱變數兩個視角對PRML中各個章節進行了串聯,並以RBM,BLR,序列模型(HMMCRF)具體說明這種串聯。
本書是經典中的經典 我完整看了3遍以上 要算上沒看完的幾次 得有快10遍 是的 前幾次我都是看的半途而廢
另外我也看過數本相關領域的大而全的書:如統計學習基礎啊,kevin最新的那本啊,還有koller的 以及jordan的圖模型,以及以kernel為線索的、涉及更多計算理論性的pattern analysis。而這一本是本人認為最好的。
對於這本書,我在實驗室里做過一個講座,從第一章講到了第十一章 --也就是到採樣方法。裡面跳過了5 6 7(第五章我用深度學習相關的幾次報告替代,第六章高斯過程沒有講 因為自己理解的也一般 第七章用SVM的報告替代了一部分 因為主要想講貝葉斯和概率圖建模的方法 所以此三章就沒專門講)
上學期我又帶著新學弟們學此書,不過主要是監督他們做題目,完成度一般。
我的建議是:學生們如果真的想入門此領域,尤其是一些想在這方面有建樹的博士,請先讀此書入門(如果只是想了解吹吹牛的不必深入看此書),讀時注意下面幾點:
1.無論通讀過幾遍,一定要有一遍是做完所有的課後習題的 。不然不算看完一遍哦,實在不會做網上有答案可參考!
2.本書是self-contained的。這是真的!不要覺得看不下去了,就去補習其他知識 (尤其是不需要去看測度論和泛函,看此書也不需要太多最優化的知識),那樣最後就回不來, 兩年的工或理科的學生 ,都可以通過反覆看搞懂裡面的數學。 但是這個需要踏踏實實的去學習,每天保證3到4個小時,一年足矣做完一遍。之後根據自己的研究需要,結合論文再看上幾遍 ,不需兩年就可以貫通起來。注意書的附錄啊 ,裡面關於矩陣的、概率分布的、優化方法的, 不要不把這個當回事。
(概率論,統計學,矩陣論,牛頓萊布尼茨積分,這些工科數學即可,國內教材即可。如果非要額外看一些數學書,推薦看一本講線性空間的書,線性代數應該這樣學)
3.這本書的線索是貝葉斯方法。介紹模型的章節 ,行文思路都是:基本模型建模--最大似然估計- 貝葉斯參數估計(或者叫推斷,inference即得到參數的後驗概率)--貝葉斯預測(predication,即根據上一步得到的後驗概率把參數積分掉進行推斷) 。一開始看不懂這些 ,會感覺講的雲里霧裡,按這個思路去看 ,就非常清楚了。我們身邊很多新接觸這些的同學看概率模型的論文,搞不懂,像LDA,HDP這些模型,看建模部分還覺得有點頭緒,一到推斷就不知道論文是在幹什麼了,就是因為對這套貝葉斯方法不熟悉,一旦熟悉了,就都很容易看懂了。不少同學都倒在了這第一道門檻上。
本書第8章之前的生成模型都是很簡單的,就是一個基本概率分布加一個先驗。第8章之後,講了對基本模型的混合和時序擴展,其實各種概率生成模型就是這兩個東西拼起來的,無非就是時序擴展一般就是用馬爾科夫性,共享成分一般就用混合,更進一步用更多層次的混合。
4.本書重點和圖模型的相關演算法
1) 參數的似然估計(除了普通的梯度優化、牛頓,還有強大的EM。注意,即使是貝葉斯模型,還是有參數的, 就算叫超參數,還是要估計的 。就算為它再加先驗,但是先驗里的參數還是要算。這裡不考慮加無信息先驗)
這塊基本相關的書都講,PRML講的也算比較清晰的。 EM是單獨拿了一章講,因為確實太重要了,理解了EM,很多論文的訓練演算法就能看懂了。個人在ML領域覺得最漂亮的演算法就是EM,純個人喜好。
2)求變數的後驗概率 這個算是重點之一,每一章都有涉及,但是如果情況較簡單,一個貝葉斯條件概率公式就能求出來,那就沒這麼多理論了,可是因為條件概率裡面那個分母,需要把變數積分掉,這導致分布沒法算了。所以有一些估計的演算法。 第11、 12章都是講這個的。前面某章還介紹了拉普拉斯估計,也是干這個得。第十章的消息傳播其實也是給出了樹狀模型求變數的聯合後驗分布的一種動態規劃的方法。這裡解釋下什麼是常說的後驗分布,即在觀察到樣本時模型中隱變數的條件概率,這往往是很多任務建模後的最終任務,就是推斷這些隱變數的後驗概率。不懂沒事,以後隨著學的越來越多,看上幾篇nips之類會議的論文,就明白了。
從上面這也可以看出,prml很多內容是分散在各章節的。
XXX待補充
5 PRML沒有什麼?
1) PRML沒有很多演算法的進一步擴展。這是正常的,不是bishop不懂,而是已經1000頁了啊。5000頁的書,誰敢打開呢。
任何這類書都有側重點,一般是跟作者的研究側重點相關:如kevin murphy的書,對DBN講了很多(不是深度學習的東西,是動態貝葉斯網路,即時序上的有向圖模型);統計學習基礎在模型選擇參數規整和boosting tress上講了很多;而以kernel為線索的書都會側重將一些計算理論的東西,像誤差界分析,這類書碩士讀了更加沒用,但是博士應該好好研習下。
PRML沒有太偏重某一模型或者方法,而是把貝葉斯方法融入到每一章每一種模型中,所以包含的東西就更多,雖然沒有展開太多,但是足矣幫助入門。
另外要明確的是,這本書是應用性質的!也就是幫助讀者掌握一套基本方法和思路,可以進入到這個圈子,能夠對一些問題用這些方法來進行建模。(這個不太適用於大部分對機器學習抱"急功近利"態度的程序員學習,或許對程序員,更需要的是掌握幾種具體模型,即logistic regression和nn,最大熵(尤其是一種時序最大熵模型crf),svm,決策樹和boosting tree,GMM和LDA)。至於一些非常理論的東西,即使是圈子裡的人,也只是非常少的大牛們在搞,大多數人不太需要。
如果想了解更多,對於PML每章都可以擴展去閱讀,這裡簡單說一下。第五章關於神經網路,當年研究很熱,書籍很多,但是我沒覺得有多少要寫的,如今實踐證明了,用的時候掌握BP就行了(bishop也寫了一本書,不過我一直沒找到,難道是還沒出版),BP這個演算法對程序員比較好理解,就是一種動態規劃來減少重複計算嘛。第六章,講kernel相關的東西,去看pattern analysis,絕對有些啟發的。高斯過程,可看Rasmussen 的Gaussian processes for machine learning。第七章,最大margin,也就是SVM,想看理論性的同第六章的pattern analysis,想看實踐性的,看libsvm代碼吧。第八章,圖模型可參考jordan那本未出版的(其實是從圖模型角度把整個概率模型的基礎知識講了一遍)。koller的寫的更長更細,讀起來慢。第九章,混合模型和EM,講的非常不錯了,沒什麼要補充了,混合模型可以進一步擴展成超混合,離散觀察的貝葉斯版本模型就是常說的LDA,這個是工程中常用的模型,可看Blei的論文,這塊跟DP(狄利克雷過程)有點關係,可以利用其擴展成無線混合模型,可看teh的論文。第十章,主要是變分推斷,舉例詳實,如果不滿足,可以去看Wainwright 和Jordan寫的Graphical Models,Exponential Families,and Variational Inference,此書讀起來相比於prml要難很多。第十一章,如果想去鑽研mcmc,相關書籍很多,自己去搜吧,有本就叫mcmc。但是其實用的時候很多時候都是gibbs 採樣就行。第十二章,是離散混合模型的擴展,PCA這塊我不太用,就沒擴展讀過什麼。第十三章,序列模型,就是離散狀態的HMM和連續狀態的LDS,書上講的蠻不錯,可以進一步參考kevin murphy的書。和第十四章,boosting,這塊我從沒用過,沒認真研究過,統計學習基礎里講的多一些,另外PAC是理論基礎,對這個我也是只知道名詞解釋,就不誤導同學了。
2) PRML完全沒有涉及狄利克雷過程(只是在第二章提了一下teh的論文) 畢竟這是06年的書 當時狄利克雷過程還不太普及 想了解這塊東西的同學 可以看teh的論文 國內的英子同學寫的綜述也不錯,包括後面blei ,wangchong,sudderth,eb.fox,之前的neal等各位大牛的論文。 本人去年初開始了解相關東西,中間看看停停 也算是把相關模型演算法搞明白了,最近剛寫的畢業論文也是這個相關的。
3) PRML有深度學習么?hinton的那套RBM系列確實沒有,不過現在市面上炒作的深度學習,真正用的就是神經網路而已,第五章足矣,剩下的就靠著各位去寫並行程序解決了。
擦 實驗室要關門了 師傅趕人了 先寫這些 明天再補充 希望自己能馬上畢業啊 早日逃離機器學習這個苦海。個人體會:前四章要反覆看,其餘的挑著看。
補充,今天和公司的首席科學家(他是普林斯頓大學的博士,曾經北大計算機系的狀元)聊到這本書。他的觀點是:
這是一本好書,毋庸置疑,但是沒必要硬啃,如果是工業界的同仁,那麼前四章好好看,如果有時間,後面的每一章看看第一節,了解內容即可。這是一本有整體理論框架的書,它是基於貝葉斯方法寫出來的,所以能夠納入這個理論體系的就在書裡面,納不進來的就沒有,同時由於過於理論化,很多數學推導其實並無法實現,計算複雜度很高,所以參考意義不大。
這是比較典型的一本美式教科書。不需要要一個字一個字的看,太多了,而且事無具細,面面俱到。建議先自己給自己列幾個問題,把相關章節看了,習題做一半就好。可以當做參考書。
用哪兒看哪兒。自己搞得東西用到了,最近聽例會聽到了,就看。
不會的點,都記下來。
適合基礎不好的又不想硬啃如我的人。
我是看論文有些用到的方法不懂,就往這本書里找。我是做視覺的。
感覺上概率統計要學的紮實才看著不那麼累。
這是培養感覺,感覺有了再硬啃扣細節,我覺得才會真的吃進去。
PRML 是本經典。但我知道現在的人都是聽說「大數據」,沖著機器學習,數據挖掘啥的來的。
針對他們,我不推薦 Bishop 的 PRML 或者 Duda 的模式分類。這兩本都是工程書籍。
PRML 堆滿了複雜瑣碎逼格的公式,而且符號的使用比其他書亂得多。
我覺得好的書應該是數學上流暢的,利用代數中的性質推出有用而深刻的結論,強調幾何直觀,前後章節打通,一氣呵成。舉個簡單的例子,ML 的書都很早提到 perceptron,各位花幾分鐘證一下,perceptron 為什麼是保證收斂的?這就是簡單而深刻的結論,但 PRML 這種書是不會講的。
另外 PRML 試圖從貝葉斯統計的角度解釋一切東西,所以很多證明讓人摸不著頭腦,那些角度大家也不感興趣(我覺得該從凸優化入手的地方就上凸優化,一點就通)。還有,工程書籍理論深度不夠,沒有講重要的 VC 理論。
當然你想跟風 deep learning 的話,PRML 里也是沒有的。
最後吐槽一下,排版很差,看起來累。雙色印刷也不該選橘紅色啊。可以先看李航的《統計學習方法》,參照著看。我現在也在慢慢看PRML,可以參照下這個jian xiao的PRML學習筆記,PRML筆記-Notes on Pattern Recognition and Machine Learning.pdf。
摸索到了一個方法,國外或國內,有很多讀書會,在看書之前可以先看看這些讀書會公布的ppt,然後再看書,比如日本各個大學都有這本書(書太經典了)的讀書會,而且ppt公布到網上,比如『http://www.slideshare.net/tetsuroito/prml1-43896906 ,國內的博客也有很多如讀書心得之類的,自己用這種方法真的把第三章なんとなく讀懂了。
去開一門課
讀老師的原版,感覺寫的比較流暢,一氣呵成就讀完了,但是沒有做題,所以學習效果可能差了點,作為機器學習基礎和手邊的工具書個人感覺還是值得好好讀一下的。
所有的書不都是看後面忘前面嗎
收藏 太好了
正如其名,PRML(適合打基礎)搞機器學習和模型識別的必讀書。當然,ESL(適合進階)和李航(適合快速入門)的也很好。
一本晦澀難懂的經書、這是一本作者裝逼的書,這本書的作者為了顯示自己的數學功底和機器學習的神秘而把淺顯易懂的內容搞得特別抽象化,數學化。建議初學者不要看,中等學者不要細看,權當一本雜誌隨便翻翻。為什麼這麼說呢?機器學習是一門實踐學科,是engineering,不是理論物理學。如果你是一名機器學習的小白,高等數學學的還不錯,會用Python做for,if,那你應該這樣做:把斯坦福Andrew 的講義看一遍,大約需要五天,然後再看一遍,並且把裡面感興趣的習題做一遍,不感興趣的就不用做了,十天後你就可以走出理論世界,嘗試去解決現實世界中的問題吧。那去哪?上kaggle,裡面有很多競賽,但圖像處理的先不要去碰,找一個數據小,玩的人多的競賽,就參加吧,這時你可能會寫出你人生中第一個自己解決實際問題的程序。好的,你的程序出結果了,你提交你的答案,你的排名可能是在最底下,沒關係,看看這個競賽的論壇吧。這個時候你可能會碰到很多專業名詞,事實上這些詞你在Andrew的教程中都見過。和real world problem離這麼近,你會對機器學習裡面的概念理解的更好。大約一個多月後你對機器學習是怎麼回事心裡有底了,不那麼慌了,這時你需要充電,回爐重造,找一些大牛的書好好梳理一下理論結構,但千萬別碰題主的這本書。如果讓我推薦,Bengio最近新出了一本書叫Deep Learning。那本書寫的很好,裡面應該是對過去機器學習成果的很好的總結,比PRML這本老古董更適合去學。記住機器學習是engineering不是理論物理。有時間再更,手機碼字,累
我補充一點 習題要做 很多重要的東西正文沒講 要看習題才行 另外正文錯巨多無比 要看errorta
jordan那本書 叫啥名字
這本書比較全面深入,但是數學細節上的處理極度令人不滿意。
建議和Machine Learning: A Probabilistic Perspective對著看。隨便看看差不多了,很多地方這書也比較無語......
需要有一定的數理統計,矩陣計算的基礎,不然看起來比較辛苦的。
建議可以每次針對你需要研究的小方向仔細研究一下的。
這是本神書,打算看不過一直沒實施。感覺實際用的時候,專研某一個小方向。平時看的話,可以當做擴展知識面,看了就忘也沒關係。
推薦閱讀:
※國內做計算機視覺或者機器學習比較好的實驗室有哪些?
※BRETT 機器人算有「學習」的能力么?
※「社交網路分析」是門怎樣的學科?
※機器學習有很多關於核函數的說法,核函數的定義和作用是什麼?