軟件開發轉人工智能一年總結

轉人工智能一年左右,回顧,總結之餘,發現知乎上一篇文章總結的更加詳細,特轉過來......

---------------------------------------

原文:https://zhuanlan.zhihu.com/p/29704017

0. 背景

寫這篇教程的初衷是很多朋友都想了解如何入門/轉行機器學習,搭上人工智能這列二十一世紀的快車。文章的宗旨是:1. 指出一些自學的誤區 2. 不過多的推薦資料 3. 提供客觀可行的學習表 4. 給出進階學習的建議。

這篇文章的目標讀者是計劃零基礎自學的朋友,對數學/統計/編程基礎要求不高,比如:

  • 在讀學生
  • 非計算機行業的讀者
  • 已經工作但想將機器學習/數據分析和自己的本職工作相結合的朋友

因此,這篇文章對於已經身處機器學習領域的人士可能幫助不大。請大家有選擇的性閱讀,探索適合自己的學習方法。

1. 自學機器學習的誤區和陷阱

1.1. 不要試圖掌握所有的相關數學知識再開始學習

在很多相關的回答中,我都一再強調不要試圖補足數學知識再開始學習機器學習。一般來說,大部分機器學習課程/書籍都要求:

  • 線性代數:矩陣/張量乘法、求逆,奇異值分解/特徵值分解,行列式,範數等
  • 統計與概率:概率分佈,獨立性與貝葉斯,最大似然(MLE)和最大後驗估計(MAP)等
  • 優化:線性優化,非線性優化(凸優化/非凸優化)以及其衍生的求解方法如梯度下降、牛頓法、基因算法和模擬退火等
  • 微積分:偏微分,鏈式法則,矩陣求導等
  • 信息論、數值理論等

一般人如果想要把這些知識都補全再開始機器學習往往需要很長時間,容易半途而廢。而且這些知識是工具不是目的,我們的目標不是成爲優化大師。建議在機器學習的過程中哪裏不會補哪裏,這樣更有目的性且耗時更低。

1.2. 不要把深度學習作爲入門第一課

雖然很多人都是衝着深度學習來的,但把深度學習作爲機器學習第一課不是個好主意。原因如下:

  • 深度學習的黑箱性更加明顯,很容易學得囫圇吞棗
  • 深度學習的理論/模型架構/技巧還在一直變化當中,並未塵埃落定
  • 深度學習實驗對硬件要求高,不太適合自學或者使用個人電腦進行學習

更多討論可以看我的回答:深度學習的教學和課程,與傳統 CS 的教學和課程有什麼區別?

1.3. 不要收集過多的資料 & 分辨資料的時效性

機器學習的資料很多,動輒就有幾個G的材料可以下載或者觀看。而很多朋友都有“收集癖”,一下子購買十幾本書的人我也常常能夠看到。

機器學習的發展和變化速度很快。在入門期間,建議“小而精”的選擇資料,選擇近期出版的且口碑良好的書籍。我不止一次的提到這個例子:

在很多深度學習的教科書中,尤其是10年以前的教科書中都還依然把Sigmoid當作默認的激活函數。但事實上,整流函數(ReLu)以及其拓展變形函數,如Leaky ReLu早就成爲了主流的深度學習激活函數。但因爲知識的滯後性,很多課程/書籍甚至都沒有介紹ReLu的章節。

一般來說,我比較推薦近5年內出版的書籍,或者10年以後出版的書籍。有些書籍雖然是經典,比如Tom Mitchell的《機器學習》,但因爲其出版已經超過20年,還是不建議大家購買。

在這篇文章中我所推薦的書籍和課程都相對比較經典,同時屬於緊跟時代潮流的。入門階段我推薦了1門課程和2本書,進階階段推薦了1本書,深度學習推薦了1門課程一本書,高級階段推薦了2本額外書籍。

2. 機器學習的一些前期準備

2.1. 硬件選擇

另一個大家常問的問題是:是否可以用自己的筆記本電腦進行機器學習。答案是肯定的,大部分市面上的數據集都可以放到你的內存中運行。在入門階段,我們很少會用到非常大的數據集,一般最大也就是MNIST,完全可以使用個人筆記本電腦進行運行。在Windows筆記本上也可以用GPU進行深度學習,參見我的教程:用GPU加速深度學習: Windows安裝CUDA+TensorFlow教程請不要打着學習的名義重新購買機器...

2.2. 軟件選擇

如果要做深度學習,Linux還是首選,因爲其對很多學習模型支持比較好(主要是深度學習的Library)。但即使你使用的是Windows系統,也可以用虛擬機裝Ubuntu來進行學習。小型的深度學習模型足夠了,大型的深度學習我們很少在本地/個人計算機上運行。

至於編程語言,首推Python,因爲其良好的拓展支持性,主流的工具包都有Python版本。在特定情況下,選擇R作爲編程語言也是可以的。其他可能的語言還包括C++、Java和Matlab,但我個人不大推薦。

此處也想額外提一句,因爲編程屬於機器學習基本要求之一,所以推薦大家可以自學一些基礎編程的知識(如Python),在文中不再贅述。

2.3. 語言能力

學好英語,至少打下閱讀和聽力的基礎。雖然人工智能領域中國現在已經做得很不錯,但主流的書籍、期刊和會議,資料都是英文的。我們可以接受翻譯版,但最好的方法還是自己有能力直接閱讀。即使你將來不做機器學習,英文閱讀能力還是會有很大的幫助。

3. 機器學習課程表

3.1. 第一階段:基礎入門(3-6個月)

入門的第一步是學習一些經典課程並配套經典書籍,一般來說這個過程在半年之內比較合適。在這個部分我介紹的課程和書籍都屬於難度非常低的,對數學和編程都沒什麼太大的要求。

3.1.1. 吳恩達Cousera機器學習課程

Andrew Ng的機器學習課程(Machine Learning | Coursera)是很多人的啓蒙課程,難度適中且完全免費。Coursera上總共有49285個人給出了評分,平均得分4.9分,滿分5分。據我個人觀察,大部分Coursera上的課程評分處於4-4.5分之間,能做到4.9分的課程寥寥無幾。另一個值得關注的是,這門課有接近五萬人給出評分,統計學知識告訴我們這個樣本較大所以評分應該趨近於其真實值,比較可信。根據Freecodecamp的統計,這門課是所有在線Machine Learning課程中最受到大家好評的課程。另一個比較直接的觀察是如果大家在知乎上搜索“機器學習如何入門?”,大部分答案都提到了Andrew的這門入門課程,所以這是一門絕對的口碑課程,詳細討論可以參考:微調:爲何國人迷戀吳恩達的機器學習課?

3.1.2. Python機器學習 & Introduction to Statistical Learning with R

在學習吳恩達的在線課程時,推薦同時閱讀相關的機器學習書籍補充理論知識。我再次推薦這兩本非常好的入門書籍,在我的專欄也有對於這兩本書的介紹。

  • Python機器學習(作者 Sebastian Raschka):這本書出版於2015年並多次再版,在亞馬遜中國上我們可以找到影印版和翻譯版。這本書去掉了大量的數學推導的部分,僅保留了機器學習的核心應用。閱讀本書可以快速對如何使用Python機器學習框架Sklearn有一個基本的瞭解,可以很快上手開始工作。本書涉及的內容很廣泛,雖然只有400多頁,但內容涉及了數據預處理(Data Preprocessing), 維度壓縮和核函數(Dimension Reduction & Kernel),評估方法如交叉驗證,集成學習,情感分析,聚類,甚至還包括了神經網絡和Theano。更多介紹:帶你讀機器學習經典(三): Python機器學習(Chapter 1&2)。除此之外,也想特別推薦最近新出的一本Python機器學習類書籍:《Hands-On Machine Learning with Scikit-Learn and TensorFlow》。
  • Introduction to Statistical Learning with R(ISL):相信正在機器學習苦海中遨遊的朋友們肯定都聽過大名鼎鼎的The Element of Statistical Learning, 這本頻率學派的統計學習“聖經”被大家叫做ESL。而ISL正是基於滿足更廣大閱讀人羣的目的而推出的;ISL是ESL的入門版,不僅大量的去除了繁複的數學推導,還加入了R編程的部分,方便大家可以儘快上手。這本書是我推薦書單第一名:ISL的電子版是免費的:點擊下載。更多介紹:帶你讀機器學習經典(一): An Introduction to Statistical Learning (Chapter 1&2)

3.1.3. 周志華《機器學習》

周志華老師的《機器學習》也被大家親切的叫做“西瓜書”。雖然只有幾百頁,但內容涵蓋比較廣泛。然而和其他人的看法不同,我建議把西瓜書作爲參考書而不是主力閱讀書。西瓜書因爲篇幅的限制,涵蓋了很多的內容但無法詳細的展看來講,對於初學者自學來說實際閱讀難度很大。這本書更適合作爲學校的教材或者中階讀者自學使用,入門時學習這本書籍難度稍微偏高了一些。

我個人建議的用法是在學習網課和閱讀ISL遇到疑惑時可以參考西瓜書的相關章節,但入門階段沒有必要一章一章的閱讀,建議在這個階段只閱讀前十章即可。

3.2. 第二階段:進階學習(3-6個月)

在這個階段,你已經對機器學習有了基本的瞭解。如果你認真的閱讀了ISL並上完了吳恩達的課程,我相信你已經在理論上明白了什麼是線性迴歸,什麼是數據壓縮,對特徵工程以及簡單的迴歸/預測問題有了理論上的基礎。這個時候最重要的就是進行實踐!

3.2.1. Kaggle挑戰賽/練習

Kaggle(Your Home for Data Science)在數據分析領域早已大名鼎鼎,甚至可以說是數據分析第一社區,前一陣子剛剛被谷歌收購。Kaggle上有很多很好的數據集和挑戰賽,你可以嘗試這些挑戰取得名次,甚至拿到獎金,對於將來找工作也非常有幫助。而且Kaggle的另一大優勢是網友會分享他們的經驗和看法,你也可以提出問題讓大家來幫你提出一些修正方法。

國內也有類似的平臺,比如天池大數據競賽,其他類似的平臺還包括DataCastle。

使用Kaggle的目的主要是將技能落在實處,防止練就一身屠龍之技。機器學習最大的幻覺就是覺得自己什麼都懂了,但等到真的使用時發現並不奏效,而Kaggle是一個低成本的應用機器學習的機會。

3.2.2. Sklearn文檔學習

Sklearn(scikit-learn: machine learning in Python)是Python上最流行的機器學習/數據科學工具包,上文介紹的Python Machine Learning書中就大量使用Sklearn的API。和使用Kaggle的目的一致,學習的Sklearn的文檔也是一種實踐過程。比較推薦的方法是把主流機器學習模型Sklearn中的例子都看一遍。

Sklearn的文檔是少數寫的跟教程一樣的技術文檔,很具有閱讀價值。舉個簡單的例子,假設你想學習Python中使用邏輯迴歸,就可以參考: Logistic Regression 3-class Classifier

Sklearn的文檔不僅提供了練習數據、sklearn的相關代碼實例,還提供了可視化圖。

3.2.2. 周志華機器學習

再次提到周老師是因爲西瓜書是值得常常翻看的一本書,在kaggle挑戰和閱讀Sklearn文檔的過程中你還會時不時的遇到一些新的名詞,比如流形學習(manifold learning)等。這個時候你會發現西瓜書真的是一本中級階段大而全的書籍:)

3.3. 第三階段(可選*):深度學習(3-6個月)

因爲深度學習是當下的熱點,很多公司都在尋找深度學習人才。雖然深度學習只是機器學習的一個子集,但有興趣朝這個方向發展的朋友可以在完成以上學習後單獨學習一下深度學習。

3.3.1. 吳恩達深度學習課程

吳恩達在八月份的時候通過Deeplearning.ai和Coursera平臺推出了最新系列的五門深度學習課程(deeplearning.ai)。有條件的朋友可以通過Coursera學習獲得證書,最近網易雲課堂也上線了這門課的翻譯版。如果想要上其中的課程,需要先註冊報名「深度學習工程師微專業」 深度學習工程師微專業 - 一線人工智能大師吳恩達親研-網易雲課堂 - 網易雲課堂,之後就可以分別點開每門課單獨進行學習。

更多關於網易雲課堂上深度學習課程的介紹可以看:如何評價網易雲課堂上線的吳恩達Deep Learning課程?

3.3.2. Deep Learning - by Ian GoodFellow

深度學習這本書是由當下深度學習領域的幾位領軍人物所著,包含三大巨頭之一的Bengio,還有教父Hinton來作序推薦。這本書的中文本翻譯由張志華教授團隊負責,在github上免費放出了翻譯版本,印刷版也可以從亞馬遜中國上買到。

英文版:Deep Learning

中文版:exacity/deeplearningbook-chinese

這本書的閱讀建議:

  • 爲了補充基礎可以閱讀第1-5章其中也包含了一些數學知識
  • 只關注主流神經網絡知識可以閱讀6-10章,介紹了DNN/CNN/RNN
  • 需要進一步瞭解一些調參和應用技巧,推薦閱讀11和12章

第13-20章爲進階章節,在入門階段沒有必要閱讀。其實比較實際的做法是吳恩達的課程講到什麼概念,你到這本書裏面可以閱讀一些深入的理論進行概念加深,按章節閱讀還是比較耗時耗力的。

3.4. 第四階段:深入研究

恭喜你!如果你已經完成了上面的計劃表,代表你已經有了相當的機器學習能力。這個階段,最重要的就是不要貪多嚼不爛。如果你瀏覽知乎,會發現大家都說你必須讀Elements of Statistical Learning, MLAPP之類的大部頭。我承認閱讀這樣的書會有幫助,但在你有了一定的基礎知識後,相信你已經知道自己需要接着做什麼了也有了志同道合的朋友,我希望把選擇權交還給你,而不是繼續推薦成堆的課程和書籍。當然,如果你希望繼續深入的話,中文可以繼續閱讀周志華老師的《機器學習》和李航老師的《統計學習基礎》,英文可以入手《Elements of Statistical Learning》。在這個階段,重點要形成成體系的知識脈絡,切記貪多嚼不爛,切記!

從閱讀論文角度來說,訂閱Arxiv,關注機器學習的頂級會議,如ICML/NIPS/KDD等,相關的方法在知乎上可以很容易搜索到,不在此贅述。

4. 實踐經驗

4.1. 研究經歷

如果你還是學生,嘗試儘早接觸科研,進實驗室。一般來說,大三的時候你應該已經有了基本的機器學習知識,儘管還比較淺。這個時候可以向老師/學長/學姐毛遂自薦進實驗室,即使是無償勞動和做基本的苦力活。進實驗室有兩個明顯的好處:

  • 對某個小方向會有比較深入的瞭解。一般實驗室做純理論的不大需要本科生,做機器視覺或者自然語言處理(NLP)等小方向的比較需要本科生,所以這是很好的深入瞭解一個方向的機會。
  • 補充了研究經歷也可以明白自己是否適合這個領域。如果運氣好的話,你也有可能成爲論文的作者之一,甚至可以去開會(公款旅遊順道見一下業內大佬)。這對於繼續深造和去國外繼續學習都很有幫助,有科研經歷和論文是很大的籌碼,對於找工作來說也絕對有利無害。

4.2. 企業實習

上文提到過,機器學習光說不練假把式,最好的方法還是要實踐。因此,應該先試着做科研,再嘗試工業界實習。對待科研機會,有則就上,沒有也不是太大的遺憾。我建議大部分做機器學習的朋友儘早實習,主要出於以下幾個考量:

  • 打破幻想,瞭解工業界的主流模型。在其他很多答案中我都提到過,其實工業界用的大部分技術並不酷炫,你很少能看到深度強化學習那種AlphaGo一樣酷炫的模型。不誇張的說,廣義線性模型(generalized linear models)還是佔據了大壁江山,這要歸功於其良好的解釋能力。從神經網絡角度出發,一般也逃不過普通任務深度網絡、視覺任務卷積網絡CNN、語音和文字任務LSTM的套路。
  • 補上學術界忽視的內容,比如可視化和數據清洗。工業界的最終目的是輸出商業價值,而獲得商業洞見的過程其實是非常痛苦的,比如第一步就是令人深惡痛絕的數據清洗。毫不誇張的說,工業界百分之六十的時間都在清理數據,這和學術界乾淨且規則化的現成數據完全不同。沒有在工業界體驗過的人,無法真的瞭解原來機器學習從頭到尾有那麼多陷阱,泛化能力只是終極目標,而往往我們連規整的數據都無法得到。
  • 瞭解技術商業化中的取捨,培養大局觀。做技術的人往往一頭扎進技術裏面,而忽視了從全局思考。舉個例子,模型A的準確率95.5%,每次訓練時間是3天,需要6臺有GPU的服務器。而模型B的準確率是百分之95.2%,但只需要一臺普通的macbook訓練4個小時就可以了。從學術角度出發我們往往追求更好的模型結果選A,而工業界還要考慮到訓練開銷、模型可解釋性、模型穩定度等。到工業界實習不僅可以培養大家的宏觀掌控能力,對將來自己帶學生控制開銷或者選題也大有幫助

4.3. 在本職工作中使用機器學習

對於大部分已經工作的朋友來說,重新回到學校攻讀學位並不現實,進研究室進行學習更是缺少機會。那麼這個時候,你就可以試着把機器學習應用到你自己的工作當中。

已經有了工作/研究經驗的朋友,要試着將自己的工作經歷利用起來。舉例,不要做機器學習裏面最擅長投資的人,而要做金融領域中最擅長機器學習的專家,這纔是你的價值主張(value proposition)。最重要的是,機器學習的基本功沒有大家想的那麼高不可攀,沒有必要放棄自己的本專業全職轉行,沉沒成本太高。通過跨領域完全可以做到曲線救國,化劣勢爲優勢,你們可能比只懂機器學習的人有更大的行業價值。

舉幾個我身邊的例子,我的一個朋友是做傳統軟件工程研究的,前年他和我商量如何使用機器學習以GitHub上的commit歷史來識別bug,這就是一個很好的結合領域的知識。如果你本身是做金融出身,在你補足上面基本功的同時,就可以把機器學習交叉運用於你自己擅長的領域,做策略研究,我已經聽說了無數個“宣稱”使用機器學習實現了交易策略案例。雖不可盡信,但對特定領域的深刻理解往往就是捅破窗戶的那最後一層紙,只理解模型但不瞭解數據和數據背後的意義,導致很多機器學習模型只停留在好看而不實用的階段

5. 寫在最後

雖然人們曾說二十一是生物的世紀,但現在還是人工智能的世紀。歡迎大家來試試機器學習,體驗數據分析的魅力。

就像我曾在很多回答中提到,機器學習領域應該要敞開大門,讓每個人都可以嘗試將機器學習知識應用於他們原本的領域,摒棄人爲製造的知識壁壘。唯有這樣,機器學習技術才能在更多的不同領域落地,從而反哺機器學習研究本身。

科技日新月異,追逐熱點是好的。但在這個浮躁的時代,不管選擇什麼方向最重要的就是獨立思考的能力,和去僞存真的勇氣。因此,看了這麼多入門教程和經驗分享後,我最希望的是你既不要急着全盤接受,也不要因爲不對胃口全盤否定。慢下來,好好想想,制定適合自己的計劃,這大概纔是做科學工作的正確態度。

在思考之後,拒絕外界的噪音,無論是鼓勵還是嘲笑。抱着“不撞南山不回頭”的信念,繼續朝機器學習的高峯攀登。好運!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章