1. 程式人生 > >2016 機器學習之路:一年從無到有掌握機器學習

2016 機器學習之路:一年從無到有掌握機器學習

【新智元導讀】程式設計師 Per Harald Borgen 在 Medium 刊文,介紹了他在一年的時間裡,從入門到掌握機器學習的歷程。Borgen 表示,即使沒有博士學位和高深的數學造詣也能掌握機器學習。這一點相信對不少人都挺有吸引力和啟發。不過,博士學位或許真的並非必須,但要掌握機器學習,學再多的數學也不會嫌多。下面就來看 Borgen 不脫產,從菜鳥變熟手提升業績的故事。

第一步:Hacker News 和 Udactiy

Borgen 對機器學習的興趣始於 2014 年。跟很多人一樣,他最初是看到 Hacker News 的帖子,單純覺得教計算機學東西很酷。那時候他還只是個業餘的編碼愛好者,連程式設計師都談不上。

於是,Borgen 開始了他的機器學習之路。首先,到 Uadcity 看監督學習的視訊,然後閱讀所有能找到的、跟機器學習有關的讀物。

year-1

Borgen 總結說,“這給了我一點概念上的理解,不過沒有實踐技巧。”

同時,他也十分坦承,Udacity 的 MOOC 他並沒有上完——只要是 MOOC,他幾乎都沒有堅持上完過。這一點,無論怎麼說,至少讓篇文章的置信度倍增。

第二步:掛掉 Coursera 機器學習課

2015 年初,Borgen 為了成為正式的開發人員,參加了 Founders and Coders(FAC)在倫敦的訓練營。在 FAC,他和同學一起,每週二晚上會看 Coursera 上機器學習課程的視訊。

year-2

不用說,大名鼎鼎的吳恩達的機器學習課。Borgen 表示課很贊,學了很多,然而他個人覺得這門課不適合新手。至少他自己,就需要反覆看視訊才能掌握裡面講的概念——當然,這是 Borgen 的個人感受。不過,Borgen 在 FAC 學的同學也一個個掉隊,最終他自己也掛掉了。

Borgen 總結說,他當時應該學一門用機器學習庫編程式碼的課,而不是從零開始建演算法,至少應該用他已經知道的程式語言寫演算法。

一句話,“對新手來說,一邊學語言一遍寫機器學習演算法程式碼難度是很高的”。這句話有一定的參考價值。

Borgen 的建議是,可以選擇 Udacity 的《機器學習入門》(Intro to Machine Learning),更容易入門,上來就能實踐,在提升經驗值的過程中,學習的趣味性也會增多。

【經驗】從簡單的實踐學起,之後再學困難的、偏理論的東西

第三步:一週學會機器學習

Borgen 在 FAC 做的最後一件事情,就是“一週學會機器學習”。他的目標是,一週以後能夠實用機器學習解決實際問題,而他也成功做到了這一點。

具體的經驗 Borgen 寫在了另一篇文章裡。有興趣進一步瞭解,可以訪問:https://medium.com/learning-new-stuff/machine-learning-in-a-week-a0da25d59850#.elu1hfaak

簡單說,在一週的時間裡,Borgen 做了以下幾件事情:

  • 學會了 Scikit Learn
  • 在真實世界資料庫跑了一次機器學習
  • 從零(用 Python )寫了一個線性迴歸演算法
  • 做了一點兒 NLP

【經驗】騰出一週時間來全身心地沉浸到機器學習裡面去,效果驚人。

第四步:掛掉神經網路

成功在一週的時間裡拿下機器學習給了 Borgen 自信。因此,在他結束 FAC 回到挪威時,他計劃進行第二次挑戰——一週內學會神經網路。

然而,事實是殘酷的。離開 FAC 那種 沉浸式學習環境後,要一天寫 10 小時的程式碼可不容易。

【教訓】找一個合適的環境做這種事情。

不過,Borgen 到底還是學上了神經網路。去年 7 月份的時候,他寫完了一個網路的程式碼。雖然很粗糙,但完成比完美重要,對吧?

year-3

下半年,Borgen 換了一份新工作,這在某種程度上影響了他的機器學習學習進展。這一階段他主要做的是實現神經網路,他把大學時學的線性代數重新看了一遍。年底時,Borgen 寫了篇總結:

《學習如何編寫神經網路程式碼》

也是在這篇文章裡,Borgen 記錄了他從零開始寫程式碼的過程。這篇文章在 Medium 上點讚的數量接近 600。

第四步:在 Kaggle 競賽中實踐

2015 年聖誕節,Borgen 參加了 Kaggle 競賽。當然,實踐的效果是顯著的,他得到了通過演算法和資料實際迭代實驗的經驗,也學會了在做機器學習專案時要相信自己的邏輯,“如果調參或特徵工程從邏輯上看有用,那麼一般都會有用”。

year-4

第五步:在工作中建立學習的習慣

2016 年初,Borgen 想將他在去年年底獲得的動力持續到工作中,便詢問經理是否能在上班時學新的東西——經理答應了。雖然 Borgen 在文中沒有多寫,實際上,從這個經歷中也能學到東西:

勇於提出需求,它們才有機會得到滿足——當然,你的需求需要合理。

於是,Borgen 就在上班時也能學機器學習啦(拿錢做想做的事情!)。在 2016 年積累了相關經驗以後,Borgen 的第一站是 Uadcity 的深度學習課程。然而,事實證明,對於現在的他來說,Udacity 的這門課已經太淺。不過,課後的 Ipython Notebook 作業卻太難。Debug 澆滅了他的大部分興趣。又一次地,一門 MOOC 被他放棄。

year-5

但隨後,Borgen 發現了斯坦福的 CS224D,這門課讓他獲益匪淺。Borgen 總結斯坦福 CS224D 的好處是:

  • 儘管難,但做題從來沒有 debug;
  • 課程提供答案,便於加深理解。

儘管 Borgen 仍然沒有把這門課上完,但他推薦有興趣的人去學。

year-6

另外,Borgen 在學這門課的過程中,為了完成題目,請了一位家教,時薪 40 美元,這位家教幫他發現了很多問題。因此,他得到了這麼一條經驗。

【經驗】花 50 美元/時的金額聘請機器學習家教,絕對值得。(如果你有機器學習經驗,你可以獲得時薪 50 美元的打工機會。)

學以致用,提高銷售額

Borgen 在工作中實踐機器學習,他搭建了一個系統,節省了公司銷售部門同事的很多時間。相關程式碼:https://github.com/xeneta/LeadQualifier

以上就是 Borgen 在實際工作中一年掌握機器學習的歷程。不管帶不帶感,至少十分真實。Borgen 在文章末尾寫道:“如果我做得到,你也做得到。”

尤其是工作中的程式設計師,你不想試試嗎?

編譯來源:Machine Learning in a Year(https://medium.com/learning-new-stuff/machine-learning-in-a-year-cdb0b0ebd29c#.pj6h7f5xk)