機器學習從入門到出家
作者:張紅林
導語
簡述一個2010年入坑的後台如何轉向做演算法和機器學習的歷程和感悟,附錄一個書單
寫在前面:
本文主要介紹的是自己的一些經歷,以及讀過的一些書,實際應用的經驗並沒有介紹,包括現在很多機器學習的書一般也是側重於理論,結合實踐的時候會發現和模型比起來,數據清洗、特徵工程的實際效果更明顯,而這方面很難有系統的理論知識,怎麼辦呢?讀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》http://neuralnetworksanddeeplearning.com :這就是我提到的深度學習的一篇優秀的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的書,也有一些看似不著調的書,歸根到底,所有的神秘都會歸結於靈魂、意識,佛學說法不外求不是沒有道理的,畢。
相關閱讀
【機器學習入門系列】簡介
深度學習入門實戰(一)-像Prisma一樣演算法生成梵高風格畫像效果廣告點擊率預估近期實踐:深度學習此文已由作者授權騰訊雲技術社區發布,轉載請註明文章出處原文鏈接:機器學習從入門到出家 - 騰雲閣 - 騰訊雲獲取更多騰訊海量技術實踐乾貨,歡迎大家前往騰訊雲技術社區推薦閱讀:
※One-Page AlphaGo -- 10分鐘看懂AlphaGo的核心演算法
※AI研究院 | 人工智慧哪都強?NO,它還沒有聰明的「軀體」
※機器學習分類判別方法(二):Support Vector Machines前言—拉格朗日乘子與KKT條件
※CS 294: Deep Reinforcement Learning Note(1)
※Bagging與Adaboos演算法原理及推導(詳細版)
TAG:机器学习 | 深度学习DeepLearning | 入门书单 |