Fields 負責的待辦事項『提昇專案成員AI 所需數學知識與對應Python程式』,比他預期的難許多,他應用數學系所畢業後,工作上基本上沒有用到什麼高深的數學,不過看機器學習的基本理論,無非是線性代數、偏微分方程 與機率論或統計學相關,這在大學時多少有修過;研究所時接觸演算法,什麼問題是 NP-Hard 還有一點點印象。但是如何幫提升大家這方面的知識呢?
他稍微看了 Andrew Ng 吳恩達老師於 Coursera 的 Machine Learning課程,是先從線性回歸問題著手,這衍生的就是要先了解 線性代數,在許多深度學習線上課程也把線性代數納入基本必修。很難想像他花一年時間,印象是八學分學的東西,要在一個 Sprint 兩週內除了自己要複習外,還要幫忙提升大家的知識。
再看看國內台大有林軒田以及李宏毅兩位老師公開課程,各有專注,完全不輸 Andrew Ng,何況還是講中文的。最後囫圇吞棗把李老師的機器學習課程看過一遍。隱隱約約可以感覺到機器學習與上述數學的聯繫來。但是如何用 Python 來實作這些理論呢?
他本身是 Python 新手,也不是資訊科班出身的,從基本面來思考,不該也無能平地起高樓用 Python 以及一些套件如 Numpy 來實作機器學習。參考全球各大玩家已經公開的最新框架有
另外也有Keras封裝成較高階的程式庫,底層依賴於 Tensorflow或者CNTK,最近也聽說 Mxnet也支援。但因號稱是傻瓜型深度學習程式庫,無法看到底層的數學運作,就不考慮了。
於比較各家框架優劣過程中,無意間看到 Mxnet 有提供中英文各自的教學,他讀了一下教材,發現相比 Tensorflow 還蠻容易理解的。他決定就用 Mxnet 來實作。
這個決定讓大家議論紛紛,Pete 不解,就算不選 Tensorflow,理由可能是較囉嗦門檻高,但是不選 PyTorch 而是選擇知名度與社群較低的 Mxnet 就很奇怪。
Fields 解釋:"現在我們大家處在學習機器學習的基本理論,Mxnet 是我比較過門檻較低的,容易從無到有練習打造出我們自己的模型。等到我們熟悉基本理論與實作,我個人認為要轉到其他框架並不是大問題。"
最終 Gavin 以 Product Owner 身分拍案:”以整個專案目標是AI探索,我可不希望獨尊某家,忽略了其他,我支持用 Mxnet 教學。至於後續有實際專案要執行,我們再從裡面挑選。這個不急,行有餘力看誰要幫忙學一下 Tensorflow 與 PyTorch。" 大家趕緊閉嘴了,唯恐又要再工作插單。
李宏毅老師的教材相當符合 Fields 口味,他從中擷取幾頁圖片來跟大家解釋為何需要線性代數。
要解的問題:已經取得過去歷史資料(訓練資料)。要預測寶可夢進化後的戰鬥指數會變成多少?
這是最基礎的機器學習,為了教學,採用線性迴歸模型來解(實際要找到或是設計出一個合適的模型也是很大的學問)。李老師的說法很有獨創性:可以把機器學習最後訓練出來的成果想成是一個函數。那我們唯一要做的就是想辦法從歷史資料(資料集)經過所謂的『訓練』後,讓機器幫忙找到最適合的函數。
Fields 看了這些教材,結合 Mxnet 的教學,他已經可以準備開始從線性迴歸問題,來讓其他人了解機器學習的基礎數學。
專案緣起記錄在 【UP, Scrum 與 AI專案】