forked from PeterHuang2015/AWESOME-MLND
AWESOME-MLND
The awesome entry for Udacity Machine Learning Nanodegree program.
Udacity 的機器學習納米學位偏重對各個方法的直覺性的認識和實際的編碼操作,這是在大部分學校通常是無法擷取到的稀缺資源。另一方面,入門部分更偏向統計學和資料分析的基本内容,進階部分略去了一些程式設計基礎問題;整體課程為覆寫更廣泛的閱聽人,也略去了一部分耗費時間精力而與實際工程實踐關系不太緊密的理論内容;最後,由于國内雇主聘用員工時出題者的個人教育背景,一些在工程實踐中并不常用,但在筆試、面試中被反複問及的内容暫時還沒有并入課程内容中。我們希望在這裡對整個課程進行梳理總結,同時進一步深挖工具使用和理論基石,最後補齊一些面向機器學習方向求職相關的内容。在以強制輸出文字帶動知識吸收幫助筆者 MLND 結業的同時給一同努力的同學提供力所能及的幫助。
如臨大敵
每個人的知識儲備、學習習慣、擷取滿足感的途徑和内心訴求都各不相同。希望你能在開始學習旅程前有所準備,了解你學習之路上“敵人”,盡可能做到知己知彼。舉個例子,以我自身來講,就經曆着各種各樣的“麻煩”,在MLND修習之路上要務必當心如下事情:
- 十幾年應試教育積累的壞習慣-怕錯,标準化強迫症以及過分重視并迫切追求短期利益
心
機器學習是個很大的領域,包含大量的具體算法和各式細節處理、bag of tricks,很容易讓人産生暈眩感;抓蛇抓七寸,其面向實際問題并力圖将其解決的性質是不會改變的。在你決定入坑機器學習之後一定要盡可能具體化自己的目标,標明一個适合開始的小方向動手去做練習和實作,各類工具庫已經對資料處理做了很好的支援,并提供了很多算法的高效實作,在實際工作裡,你可能隻要準備好資料,建立模型并調用
fit
函數完成訓練再使用
classify
完成分類就好了;但怎樣去擷取和整理訓練資料、怎樣去選取模型調參并驗證模型可用性、如何去部署模型甚至進行線上訓練不斷優化疊代、降低計算資源消耗以及讓它創造實際的經濟價值都是需要不斷的思考和實踐才能習得并逐漸掌握的;可能在一些時候需要你使用分布式資料處理架構中完成資料搜集與處理、使用 C++ 進行并行程式設計,對于特定情況,還可能需要你攢一個多機多卡小叢集用于工程任務。不過,作為開始,隻要找一個實際的任務,用現成的工具參考樣例代碼實作一個解決自己手上問題的小東西就是個很棒的開始啦,明确自己的學習目标,通過實際動手獲得真實回報,從錯誤和失敗中汲取經驗,踏上問題解決之旅(當然,在開始旅程之前,你可以在定向帖裡給自己立個 Flag)。
同時,在這裡也更一下潛伏在各群大佬們所做的示範,給同學們分享(安利)以備參考取用:
- From Philips-Lending Club——建構貸款違約預測模型
法
每日都能學到新東西,逐漸積累的過程好過 deadline 之前的一波流式推進,我們會推薦使用 Toggl 這樣的工具輔助你的時間管理;同時為了建構一個學習上的良性循環,最好,你能有一同學習的朋友、切實的學習需求(比如找工作、開始新項目)、高效的回報途徑(比如一份 code review)和一個靠譜的輔助來幫忙答疑解惑。
相信很多朋友都熟知一些資料科學競賽平台,裡面可以擷取多種資料集并參與各類競賽:
- Kaggle
- 天池
- AI Challenge
Read papers to make you smarter(當然前提是你需要有相應的背景知識能大概讀懂文章内容),關注一些可公開通路的論文集嘗試取用複現其中的方法能夠達到很好的練手效果(當然。。。這是一種很偏學術的方式),在這裡給出一些會議論文查閱入口:
- ICCV&CVPR
- NIPS
- JMLR
- ICLR
道
通常來講,要先知道做什麼,再去考慮具體怎麼做,否則易于迷失于各種操作細節當中;大段的代碼晦澀難懂,但在當時寫就它的編碼者腦袋裡,在實際任務概念的支援下,一些就會清晰很多。在最初的學習階段,了解做什麼和為什麼要比知道具體如何操作來的重要,在一些逐漸清晰之後,不妨從一些示例代碼上做修修改改起步,逐漸過渡到獨立編碼實作,模仿常常是跨過“能”與“不能”之間鴻溝的有效方式。
術
- Python 是我們手中的武器,你對它的使用熟練度決定着自己的學習和未來生産的效率,作為 Udacity 系列,個人推薦 CS101 到 CS212 的學習序列,在前一門課程裡可以看到 Google 創始人布林出席捧場,後一門則是 Peter Norvig 親授的高品質程式設計課。同時,希望你能随時調取 docstring 檢視 Python 庫的用法,閱讀官方文檔 了解更多細節,業餘時間可以刷刷 Python Challenge 真正以 Python 的方式去高效程式設計,還有就是使用 Python 輔助自己日常的工作,其廣泛的接口和外部庫可以幫助你操縱資料庫、Excel、調取深度學習工具包,全面提升工作效率