天天看點

機器學習從入門到出家

本文主要介紹的是自己的一些經曆,以及讀過的一些書,實際應用的經驗并沒有介紹,包括現在很多機器學習的書一般也是側重于理論,結合實踐的時候會發現和模型比起來,資料清洗、特征工程的實際效果更明顯,而這方面很難有系統的理論知識,怎麼辦呢?讀 paper ,去搜尋自己應用領域有關的、大公司的經典的 paper,裡面對資料清洗、樣本篩選、特征構造、系統搭建這方面會有詳細的介紹,在正式出版的書裡,這塊很少,是以讀書隻是基礎,結合工作場景去應用才知道“紙上讀來終覺淺,絕知此事要躬行”。

另外如果碰到比較抽象的問題而難以了解的時候,有一個訣竅是,多和生活聯系起來,很多計算機上的難題在生活中是有類似的事情和成熟的解決方案,比如優化與爬山;“世事洞明皆學問,人情練達即文章”,共勉!

04年聯考發揮失常,花了五分鐘填了兩個志願,華科光電+華科計算機,感謝當年光電專業超高的分數線把我刷掉了,我被調到了計算機;收到通知書以後,原本比較堅定的複讀的打算變的動搖,家境有比較糟糕,于是抱着早點讀完,早點出來掙錢的想法讀完了四年華科計算機;老實說,我不是一個特别愛動手的人,大學四年把所有 c 語言的書幾乎都讀了一遍,但動手能力還是很一般;保研以後,因為家裡斷了我所有經濟支援,我花了比較多時間去掙生活費,是以專業也不算學的很好,隻是晚上堅持把APUE和算法導論英文版啃完了,順便把 unix 網絡程式設計、c++ 設計新思維、stl 源碼剖析看完了,算是有一點基礎吧。

找工作的時候,固執的想找一個背景開發,美其名曰可以多年鑽研,沉澱技術;實際上回想起來不過是膽小,怕跟不上變化太快的技術節奏(有多少人和我一樣?)進入鵝腸以後,确實是做了幾年的背景開發,從一個小白到負責浏覽器背景日活千萬的圖檔轉碼服務,這中間的摸索、挫折、被叼不足為外人道也,工作三年左右,我先後接觸過浏覽器背景幾乎所有的server子產品,對公司海量學習、柔性可用也有一些了解,也隐隐看到了傳統背景的天花闆,下一步該做什麼呢?一定要去造輪子、寫架構嗎?

恰好這個時候,我們成立了一個小說的項目組,而大家都知道我是一個骨灰級網絡小說愛好者,起點閱讀記錄是3.5億,閱仙稱号,于是我有機會去做小說項目;在這個項目裡我們碰到了一些文本處理的難題,比如怎麼自動聚合同一個章節的多個資料源并挑選一個最優的候選源,怎麼識别内容不對的源;在這個過程中,和搜尋轉崗過來的 bencai 有了比較多的交流,開始知道什麼叫詞袋模型、什麼叫 NLP 、什麼叫樸素貝葉斯、Kmeans 聚類;将這些算法應用到小說業務場景,确實取得了不錯的效果,于是一扇新的大門緩緩開啟。

我開始閱讀資訊檢索導論,這本書是介紹搜尋的一本書,但其中涉及到很多基礎的機器學習算法,比如譜聚類、kmeans 聚類、LSA 等等;中間轉做過一段視訊,不是很成功,最後又開始轉為商業化,一開始我們想做點選率模型,後來因為是cpm 模式,對點選率要求不高,就開始做商業畫像;這個過程中,讀過的基本比較重要的是李航博士的統計學習方法,裡面把淺層學習的幾個算法都從數學上給出了比較嚴謹的推倒,也是看這本書的時候意識到自己的數學基礎還不是很好,雖然我對數學還是比較有興趣,但是出來幾年,很多也都忘了。

讀這本書過程發現,機器學習對數學分析、機率論、線性代數以及優化理論都有不低的要求,于是開始回過頭來重讀數學分析,穿插着看了周志華的機器學習(俗稱西瓜書);深度學習方面第一本書才剛剛付梓,但是網上有些部落格還是有的,我讀了一篇 tutorial 性質的部落格。再回過頭來看,人工智能是一個很大的概念,機器學習知識其中一部分,機器學習可以有各種定義和解讀,可以說是讓計算機從大量資料中自動學習規律,并應用;可以從資訊壓縮角度了解為,講大量資料壓縮陳成模型等等,他的應用也很廣泛,應用在文本方面就是自然語言處理;應用在圖像方面就是圖像、模式識别;應用在推薦上就是推薦系統;應用在視訊上可以做動作捕捉、實體識别等等;應用在汽車上可以是自動駕駛;在商業上,是廣告排序。

五花八門的應用,又混雜了數學、統計、程式設計等知識,看起來就像一隻兇悍的刺猬,作為一個隻熟悉背景開發的碼農?該怎麼入手呢?複雜的問題,答案往往簡單;大抵可以從這麼三個方向入手:數學、文本或搜尋、程式設計;我個人的經曆實際是從文本處理入手,但并不推薦所有人都走這條路,如果你的工作和文本處理搭不上邊,大可不必學習太多和文本相關的奇技淫巧。直接從數學的統計或者機率入手,可能會更直接。

下面我按照我的一個學習大概曆程給一個書單吧,不一定是最全的,也不一定是最合理的,僅供大家參考:

1.《 統計學習方法 》:李航博士是華為諾亞方舟的首席科學家,前不久一次會上見到了本尊,這本書的特點是:算法齊備、推倒嚴謹,薄薄的一本書幾乎涵蓋了淺層學習所有的算法,并都從數學上給出了較為嚴謹的推倒,适合有一定數學基礎的人入門使用,過程中發現自己數學上的不足,再回頭去補;

2.《 數學分析新講 》:北大張築生老師的,一套三冊,我花了大約一年的時間才讀完,非常費勁,但是很值得,比普通的高等數學要周全的多,唯一小有瑕疵的地方是實數連續統的描述用了計數法,不過這裡可以參考陶哲軒的實分析,他是從peano 公裡體系出發來論述;費爾金斯的大作裡則是用戴德金分割來論述的,都對比一下會很有意思;

3.《 最優化導論 》:看完數學分析以後再看1中的推倒會發現還是有很多地方不甚了了,舉個例子牛頓法或者說LBFGS可以用在多種算法的推導上,那牛頓法、海瑟矩陣到底是怎麼回事呢?這時候就是該祭出這本書的時候了,這本書我覺得是補齊了從數學到統計學習方法之間确實的一環,裡面主要介紹一些優化理論;簡單來說,機器學習裡一個很大的困難是函數沒有解析式,那麼對函數求解最優解是不可能像二次函數一樣通過公式直接求得的,必須通過疊代的方式逐漸去逼近最優解,就像爬一座山,不能一下子看到山頂,但是我們可以看到比現在更高的地方,于是先爬一小段,到了那個位置再往上看,又能看到最高的地方,于是又換個方向再爬一段,最終我們一定可以爬到山頂;最優化導論的幾個算法幾乎都可以往這個例子裡面套,不過是觀望和路線指定的政策略有差異罷了。

4.《 機器學習 》:周志華,大家都知道有一個mithell寫過的機器學習,但實話說,那本書的内容真的比較陳舊了,不如讀周老師這本西瓜書,因為全書都在用西瓜舉例;這本書和1有不少重合的地方,差別在于這本書是從機器學習自身出發,彌補了1偏數學理論,而工程實踐嚴重缺失的不足,這本書則從基礎概念講起,讓你對機器學習有一個基礎的、正确的了解,打個比方就和陳近南給韋小寶的那本絕世秘籍的目錄差不多,讀完這本書,你并不會馬上獲得很高的算法設計調優的能力,但是你拿到了入場券,你可以選一兩個方向或一兩個算法去深入研究 。

5.《 neural networks and deep learning》:這就是我提到的深度學習的一篇優秀的blog,配有代碼,深入淺出的介紹了神經網絡、bp算法、深度學習的一些基本概念,适合入門;深入的話可以看看三位大神合著,最近剛出版的那本deep learning;72美刀的價格不便宜,好在有電子版

小結1:上面5本書基本可以做一個很好的入門了,之後的路該怎麼走,相信讀完了的同學一般都會有自己的看法,任何一個領域,良好的入門手續才是比較難的,入門以後登堂入室的路怎麼走其實大家都會有自己的主見。接下來的書單我并沒全部讀完,僅供進一步參考,這裡也不再排序。

1.《 線性代數 》:我讀完了浙大版的線性代數,但很遺憾,這本書過于簡單,對矩陣分解、奇異值分解等機器學習裡的常用隻是沒有涉及,網上比較推崇的是strang的兩本書,一本是 introduction to linear algebra 另一本事 applied linear algebra;我是準備配合視訊讀前一本

2.《 機率論後續 》是随機過程、統計模拟、時間序列這方面的資料,包括貝葉斯分析、吉布斯采樣、mcmc 方法:統計這塊我的感覺比較差,了解比較慢,推薦陳希孺的兩本書吧,一本是機率 一本數理統計;貝葉斯的書我之前的文章有提到,大家可以去找找;吉布斯 mcmc 建議看部落格

3.《 實分析 》:陶哲軒

4.《 微分流形 》:陳省身

5.《 點集拓撲 》:北大教材

6.《 泛函分析 》

這幾本書是進階版了,大部分可能用不到,想研究流形優化、核方法的同學可以挑戰一下

7.《 PRML 》:模式識别與機器學習,非常翔實的一本書,也是經典,可惜我沒有讀完,隻看了前幾章;

8.《 凸分析 》:最優化導論的更新版,應該是目前優化理論的集大成者;

9.《 數學之美 》:吳軍博士的書,消遣的時候翻一翻吧

10.《 deep learning 》:三位大神版本

以下推薦幾本智能相關的書,博大家一笑

1.《 心智社會 》:馬文明斯基的巨著,他自己的總結挺好:沒有心智社會就沒有智能,智能源于笨拙。這本書主要是探索人的思維的本質,很有意思的論述;

2.《 弗洛伊德 》:馬文明斯基推崇的心裡學家,我也沒怎麼看,隻翻了一點點夢的解析

3.《 上帝擲骰子嗎,量子實體史話》:推薦讀一讀,對量子、意識有一點了解;

4.《 周易》:配合孔子的十翼看看,中國玄學、文化起源的神書;

5.《波若波羅蜜多心經》:心浮氣躁的時候默念一下

總結2:這部分比較随性,有深入研究ml的書,也有一些看似不着調的書,歸根到底,所有的神秘都會歸結于靈魂、意識,佛學說“法不外求”不是沒有道理的,畢。