1. 程式人生 > >3分鐘瞭解入門「機器學習」該學習什麼?(下)

3分鐘瞭解入門「機器學習」該學習什麼?(下)

640.gif?wxfrom=5&wx_lazy=1

本文來自作者劉明 在 GitChat 上分享「機器學習/深度學習書單推薦及學習方法」,閱讀原文」檢視交流實錄

文末高能

編輯 | 阪本

寫在前面

本人是個對數學和人工智慧極其感興趣的人。平時,我也在線上線下經常與國內外的朋友討論人工智慧的各種方面,無論是技術方面還是哲學方面。

我幫助過很多實習生和網上的學生,帶領他們從入門一步步過渡到足夠從事資料探勘工作。

在此期間,我發現了一件很有趣的事情,所有技術好的資料分析/挖掘工作者,都是喜歡”主動學習”的人。

這次在 GitChat 上發起 Chat,就是想幫助更多喜歡資料科學、喜歡主動學習的人能夠少走彎路。

這個 Chat 中主要討論的是如何入門學習機器學習/深度學習的理論知識、如何著手資料探勘專案以及從事資料探勘相關崗位所需要的能力。

正文

不論你是學生、想轉行資料崗位的在職程式設計師,都需要自學達成目標,我本身就是一個苦逼自學者例子。

我的本碩都是計算機專業,由於本科搞的是演算法程式設計,碩士開始搞機器學習方向本來也比較適合,但機器學習演算法真的讓我頭疼了很久。

在慢慢攻克了機器學習演算法,並學到一定程度後,我發現真正的資料探勘絕不僅僅是會機器學習演算法就夠了,還要學習很多東西,比如資料清洗等等技巧。

作為一個”過來人”,我明白大家在學習中會遇到的困惑。我此次,就是來幫助大家解除困惑。

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

  1. 到底要把數學學到什麼程度才能夠無障礙地推導機器學習演算法?實變、復變、泛函、矩陣論到底要不要全都學會?

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

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

  4. 如何入門深度學習?

  5. 如何著手開始進行資料探勘專案?

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

數學要到什麼程度?

從最基礎的來說,微積分、線性代數與概率論是學習機器學習的必會內容。

相信大家看到這個答案會很失望,但是放心,這絕對不像你想象的那麼難。

在本科期間,我們學習數學的目的其實是為了期末考試,需要做很多習題。

而在機器學習中,使用到的僅僅是這些他們的特性,而不需要用他們來解題,所以只要知道他們的定義就可以。

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

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

那麼,看什麼書好呢?我個人給大家推薦的是《金榜圖書》的考研數學講義系列的《高等數學輔導講義》、《線性代數輔導講義》和《概率論與數理統計輔導講義》。

這三本書算是考研數學入門級,他們的優點是簡潔、全面,把教科書中幾百頁的內容壓縮到幾十頁,如果不看其中的例題,幾天就能看完。

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

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

放心,我就是來給你解決這些問題的。之前我說過,推導機器學習演算法的過程中,需要的是瞭解數學定義,而非系統地學習每門課。

然而想要通過看書學習某一個知識點是很難的,因為需要很多先修知識,否則根本看不懂。

這裡,給大家推薦一個非常良心的免費線上課程可汗學院(www.khanacademy.org,需要科學上網),這個網站中包含很多學科,其中的數學部分幾乎把所有機器學習中所需要的數學知識都涵蓋到了,而且每個知識點的講解都是獨立的視訊,每段視訊大約只有幾分鐘,還有配套的在真實應用中的例子。

比如向量微積分中的 Jacobian 矩陣這個知識點,可汗學院將其分為5個短視訊來講解:

1. Jacobian 矩陣的先修知識;

2. 多變數函式的區域性線性法;

3. Jacobian 矩陣;

4. Jacobian 矩陣的計算;

5. 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. 學習機器學習演算法要真正學懂,某些小的地方學不懂便跳過,最終會造成很多漏洞,而這漏洞,填補起來要花費很大的精力。

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

近期熱文

福利

0?wx_fmt=png

「閱讀原文」看交流實錄,你想知道的都在這裡