AI 入門書單推薦及學習方法

AI 入門書單推薦及學習方法

關於機器學習,非數學/統計專業的人都會有這些疑問:

  1. 到底要把數學學到什麼程度才能夠無障礙地推導機器學習算法?實變、復變、泛函、矩陣論到底要不要全都學會?
  2. 入門機器學習到底要看什麼書?
  3. 除了機器學習,真正的工作中還哪些必要技巧?
  4. 如何入門深度學習?
  5. 如何著手開始進行數據挖掘項目?

下面,我會對以上問題逐個進行細緻分解,結合自己的學習及工作經歷為你一一解答,並給你提出適合建議。

數學要到什麼程度?

從最基礎的來說,微積分、線性代數與概率論是學習機器學習的必會內容。相信大家看到這個答案會很失望,但是放心,這絕對不像你想象的那麼難。在本科期間,我們學習數學的目的其實是為了期末考試,需要做很多習題。而在機器學習中,使用到的僅僅是這些他們的特性,而不需要用他們來解題,所以只要知道他們的定義就可以。

比如線性代數,我們僅僅需要了解向量、矩陣和逆矩陣等等的定義,而不需要去真正的計算逆矩陣。

這說明,我們不需要花費大量時間去學習數學,而只需要瞭解並記住他們的定義。

那麼,看什麼書好呢?我個人給大家推薦的是《金榜圖書》的考研數學講義系列的《高等數學輔導講義》、《線性代數輔導講義》和《概率論與數理統計輔導講義》。這三本書算是考研數學入門級,他們的優點是簡潔、全面,把教科書中幾百頁的內容壓縮到幾十頁,如果不看其中的例題,幾天就能看完。

這三本書外,還有很多數學內容需要學習,比如Jacobian矩陣、張量、特徵分解、奇異值分解(SVD)和Moore-Penrose偽逆等等……這些是實分析、複分析、矩陣論等書中的內容,也是機器學習的必會內容。

看到這裡你可能會開罵了,我要是會這些,幹嘛還看你寫的東西!

放心,我就是來給你解決這些問題的。之前我說過,推導機器學習算法的過程中,需要的是瞭解數學定義,而非系統地學習每門課。然而想要通過看書學習某一個知識點是很難的,因為需要很多先修知識,否則根本看不懂。這裡,給大家推薦一個非常良心的免費在線課程可汗學院(www.khanacademy.org,需要科學上網),這個網站中包含很多學科,其中的數學部分幾乎把所有機器學習中所需要的數學知識都涵蓋到了,而且每個知識點的講解都是獨立的視頻,每段視頻大約只有幾分鐘,還有配套的在真實應用中的例子。比如向量微積分中的Jacobian矩陣這個知識點,可汗學院將其分為5個短視頻來講解(1. Jacobian矩陣的先修知識;2. 多變量函數的局部線性法;3. Jacobian矩陣;4. Jacobian矩陣的計算;Jacobian矩陣的決定子應用),這5個短視頻從最基礎的先修知識慢慢過渡到最難的部分,每個短視頻只有3-8分鐘,已經足夠讓我們理解Jacobian矩陣了。

入門機器學習到底要看什麼書?

關於入門機器學習要看什麼書,網上已經有很多人提出過建議。 而我的建議是:不看書。是的,不看書。所有的書都假設你的數學基礎已經非常好,很多數學推導並沒有告訴你其中的根源,使你無法看下去。

只有一個人,他假設你只懂最基礎的微積分和線性代數——林軒田。他在臺大開設的兩門公開課"機器學習基石"與"機器學習技法"(網上很容易找到),基石是機器學習基礎、技法是機器學習算法推導。不過,這兩部視頻似乎在各種方面都不如Andrew Ng的機器學習課程。而且幾乎每一個看過他的"機器學習基石"課程的人都表示非常不喜歡,看不下去,原因有三:無聊、推導公式的過程太細,不知道學過之後的用處。講到這裡,大家可能會想到,當年學習高等數學的時候,好像也是這種感覺?對的,他的課程非常"無聊"但確實很重要,而且他講的每一節課只要認真思考就一定能夠聽懂。他講的是機器學習中最重要的基礎,當你真的懂一點機器學習的時候,反過來看基石中講的內容,比如Break Point、VC維、誤差衡量、線性迴歸、非線性轉換和梯度下降,哪一個是不重要的?

當你看完"機器學習基石",我建議你繼續學習他的"機器學習技法"。我相信你剛開始學習"技法"的時候,會發現他比上部更加無聊,於是忍不住去看對應的書籍,想要避免看這種無聊的視頻。然而,你最後一定還會回來繼續看他的視頻,因為你會發現他的視頻雖然巨無聊,但講的真的很細緻,每一步推導都講的很明白!

在學習"技法"課程的時候,你可以同步的看書了,因為光看視頻,很多東西會忘記,要不斷的看書複習。這裡,我推薦給你三本書:《統計學習方法》by李航、《機器學習》by周志華、《機器學習》by Mitchell。這三本書都是機器學習界入門的經典書籍,我之所以同時推薦三本,不是讓你做三選一的選擇題,而是把這三本對照著看:

  • 《統計學習方法》對公式的推理深入;
  • Mitchell的書重在算法思路的講解,對公式的推理很淺顯,但易懂;
  • 周志華的書內容更加廣泛且包含很多兩本書中沒有的內容。

建議學習的時候以李航的書為基礎,與視頻對照著看;使用周志華的書進行補充;當無法理解某處的時候看Mitchell的書。

除了機器學習,真正的工作中還哪些必要技巧?

真正的工作和項目中,只會機器學習是不夠的。最早的就是對數據進行清洗,數據清洗工作和機器學習算法的選擇同樣重要。數據清洗注意需要掌握兩點:數據處理與正則表達式。這裡推薦三本書:《Python數據處理》、《數據科學實戰手冊(R+Python)》與《正則表達式經典實例》,前兩本講的是數據清洗處理,最後一本講的是正則表達式的語法。這三本書講的是通用技巧,在具體工作中所需要的方法是不同的,不要把自己禁錮與書本中,要在具體的工作中自己思考。

如何入門深度學習?

目前,深度學習並非工作的必備技能,僅僅是加分項。所以我建議大家在掌握了一定的機器學習知識後,再開始學習深度學習的內容。

深度學習最好的入門書籍,莫過於《神經網絡與深度學習》by Michael Nielsen,該書有中文版。這本書通俗易懂,用最簡單的語言和例子闡述了概念和原理。但這本書雖然通俗,卻非常細緻的把深度學習最基礎的核心算法——BP網絡的數學公式仔細地推導了一遍,乍一看很容易,但如果多讀幾遍,相信大家每一遍都會有不同的收穫。

在讀了《神經網絡與深度學習》後,需要開始學習CNN、RNN等主流的深度學習網絡了,學習這些網絡的時候,也需要把他們的BP算法推導清楚,目前我見過的講解最好的不是書籍,而是一位網名為hanbingtao的作者在網上寫的Blog,該Blog把深度學習從最基礎的感知機基礎到CNN、RNN、LSTM的數學公式都推導了一遍,而且很淺顯易懂,強烈建議大家閱讀。

如何著手開始進行數據挖掘項目?

著手數據挖掘項目,首先要選擇一門合適的語言。數據挖掘可以用很多語言完成,R、Python、Java等等都可以,但我個人建議大家使用Python,因為使用Python相對簡單且大多數公司都要求使用Python進行工作。 剛開始進行數據挖掘項目的時候,很多程序員出身的人會陷入一個誤區,認為既然是做項目就要把算法的每一個細節都自己實現,而是不使用現成的工具包,擔心自己會變成調包俠。其實,每個高手都是從調包俠開始的,而且自己寫的代碼都是使用Python完成的,效率與工具包中直接調用C語言的代碼相比要差很多。而且,在入門階段,不應該花費極多的時間只為了對算法造輪子。在後期,當你的能力足夠而進行一些非常複雜的項目的時候,才會覺得工具包滿足不了你,那時候再順其自然的造輪子豈不甚好。

說到Python的機器學習工具包,不能不提到scikit-learn。scikit-learn的算法非常齊全(幾乎把所有你能想到的機器學習算法都包括在內,甚至數據預處理、特徵提取等等都有現成的工具),調用簡單(兩條語句就能訓練出一個模型),API非常友善(可以到官網)。學習scikit-learn最好的一本書是《機器學習系統設計》by裡徹特。這本書共12章,除去最後一章外,每章都帶著我們從最基礎一步步地做出一個數據挖掘項目,其實把這本書看完,其實已經有最基礎的數據挖掘項目能力了。

除了scikit-learn外,還有一個深度學習框架也非常好,叫做Keras。Keras的底層可以用TensorFlow或者Theano,在理解神經網絡的情況下,學習Keras只需要花費極短的時間就可以上手,這裡建議大家學習一個免費視頻課程:莫煩Python(https://morvanzhou.github.io/tutorials/machine-learning/keras/),這個網站是一個免費的機器學習視頻課程網站,站主莫煩大神用最簡潔的方式會使你在不到一個小時的時間內就掌握Keras的語法。

以上是所用到的工具,學完《機器學習系統設計》已經有基礎的實戰能力,但其中的一些流程該書並沒有系統地介紹,如果想要更加系統的學習,推薦大家閱讀《數據挖掘導論》,這本書包括分類、關聯分析、聚類和異常檢測的項目流程實例,還提供數據集和幻燈片,非常適合系統的學習。

在以上的事情都做完後,大家可以上Kaggle進行小的比賽,只要足夠努力,拿到一些小比賽的Top5%還是有機會的。

寫在最後

當你一步步的按照我給你的建議進行學習之後,會發現其實這些理論其實很簡單,但實際應用起來絕非易事,這也構成了大多數搞數據挖掘的人能力平庸無奇的事實。這裡,我對大家有幾條私人的建議:

  1. 機器學習的理論基礎一定掌握好,這是未來長遠工作的籌碼。
  2. 在學習算法的過程中,永遠是對算法的效率進行分析揣摩在第一位,具體的代碼實現在第二位,不要本末倒置。
  3. 對算法的學習要掌握所謂的"分寸",相對重要的部分多學,不太主流的部分稍稍瞭解即可。
  4. 英語很重要,你會越來越發覺英語的重要性,請堅持每天學習一點英語。
  5. 學習機器學習算法要真正學懂,某些小的地方學不懂便跳過,最終會造成很多漏洞,而這漏洞,填補起來要花費很大的精力。

祝您學習的過程是愉快的,前路雖艱,行則心安。


分享到:


相關文章: