編者按:Vincent Chen是斯坦福大學計算機科學專業的學生,同時也是斯坦福AI研究室的一名研究助理。本文他給我們帶來了在機器學習中所需要的數學知識介紹。以下是論智對原文的編譯。
很多沒有良好數學基礎或統計學的同學們總會問,到底什么樣的數學水平才能入門機器學習?目前還沒有確切的答案。
在這篇文章中,我會列出在進行機器學習產品搭建或學術研究時所需要的數學背景知識。這些都是我在與機器學習工程師、研究者、教授的談話中以及自己的經驗中總結出的。
為了構建數學的準備知識,首先我會提出與傳統課堂不同的思維模式和學習方法。接著,我會大致敘述在機器學習領域不同類型所需要的具體背景知識,大致涵蓋了高中的統計學和微積分,到最近的概率圖形模型(PGM)。最后,我希望你能找到自己所在領域所需要的數學知識。希望這篇文章對你有用!
關于被數學支配的恐懼
數學可以說是很多人的噩夢,包括工程師們。在開始之前,我想談談那些“數學好的人”到底有什么秘訣。
實際上,數學好的人只是有很多練習的機會而已,他們習慣了在研究數學的過程中遇到困難。最近的一項研究表明,與天生的能力相比,思維方式才是能否學好數學的重要因素。
但是,想達到上述境界仍需要花點時間和努力,這并不是與生俱來的能力。
開始上手
首先,作為基礎,我們希望你有基礎的線性代數、微積分以及概率論入門知識。如果有基礎編程知識更好,這可以作為在具體語境中學習數學的工具。之后,你可以根據具體領域調整學習。
如何在學校之外學習數學
學習的最佳途徑一定是泡在學校,如果脫離了學校環境,也就沒有嚴格的體系架構了,同時也不會有來自學霸的壓力,資源明顯不足。
所以在校外學習,我推薦學習小組或者研討會的形式。在研究機構中,可能有閱讀小組這類組織。有了基本組織框架,小組內可能會一起學習某本教材,并進行討論。
這種課外學習通常不會給日常工作帶來負擔,甚至在互相激勵的環境中還能讓你的本來工作更加高效。
數學和編程
數學和代碼在機器學習研究中通常是高度混合的。大多數情況下,代碼都是直接從數學邏輯中形成,并且能用代碼語法展示出數學表示法。其實現在一些數據科學框架(例如NumPy)就能直接將數學推理(例如矩陣或向量)轉換成可讀代碼,非常直觀高效。
所以這里鼓勵通過代碼夯實數學學習。例如,練習手動實現損失函數或優化的代碼可以進一步了解基礎概念。
這里舉一個通過代碼學習數學的例子:在你的神經網絡中為ReLU激活函數進行反向傳播。反向傳播是利用微積分中的規則來計算梯度的技術。為了在這一環境中實現,我們將upstream導數和ReLU的梯度相乘。
首先,我們對ReLU進行可視化:
為了計算梯度,你可能會對分段函數進行可視化,用指示函數表示如下:
用NumPy我們可以直觀地用代碼表示出激活函數(藍色曲線),其中x是輸入,relu是輸出:
relu = np.maximum(x, 0)
梯度(紅線)也是一樣,下面的等式描述了upstream梯度:
grad[x < 0] = 0
如果你自己事先沒有推導出梯度,那么這行代碼可能不好解釋。在我們的代碼中,將upstream梯度中的所有值都設為0,以滿足[h<0]的條件。從數學角度來說,這能高效地展示ReLU梯度的分段表示,當它們乘以upstream梯度時,可以將所有小于0的值變為0。
從這里我們可以看到,了解微積分的基礎概念讓我們對代碼有了清晰的思考。想了解神經網絡部署的完整過程,可以查看:pytorch.org/tutorials/beginner/pytorchwithexamples.html
用數學打造機器學習產品
為了完成這一部分,我與機器學習工程師探討了在debug的過程中都需要哪些數學知識。以下是工程師們的建議,如果你還不了解,沒有關系,以下部分可以為你提供具體的思路。
問:我想對高維客戶數據進行可視化,應該用什么聚類方法?
答:PCA vs tSNE,參考回答:stats.stackexchange.com/questions/238538/are-there-cases-where-pca-is-more-suitable-than-t-sne
問:為屏蔽虛假用戶信息,我應該如何調整閾值(假設置信水平在0.9—0.8)?
答:進行概率校準:scikit-learn.org/stable/modules/calibration.html
問:我想確定某一區域的衛星數據的偏差,應該用哪種方法?
答:答案不唯一,也許可以試試demographic parity?blog.mrtz.org/2016/09/06/approaching-fairness.html
總的來說,統計學和線性代數可以運用到很多問題中,但是想要得到滿意的結果通常需要更專業的方法。那么,我們該如何縮小數學學習的知識呢?
定義你的系統
在利用豐富的資源編寫代碼前,你需要為自己幾個問題:
系統的輸入和輸出分別是什么?
你該如何準備適合系統的數據?
如何創建特征或數據來幫助生成模型?
如何為你的問題定義一個合理的目標?
的確,定義系統很難,但是之后的工程管道搭建也很復雜。換句話說,創建機器學習產品需要做很多工作,但大部分不需要深入的數學知識。
資源
谷歌的研發工程師Martin Zinkevich曾寫過一篇機器學習實踐教程,感興趣的讀者可自行查閱:developers.google.com/machine-learning/guides/rules-of-ml/
按需學習
剛進入機器學習領域,你可能會發現麻煩不斷,尤其是在debug的過程中。當你被某個問題困住時,應該如何解決?權重合理嗎?為什么模型會在特殊損失值下收斂?衡量成功與否的正確方法是什么?這時,對數據進行質疑也許比較有用,可以試試不同的優化方法或者算法。
通常你會發現這些在建模或debug過程中用到的數學在做決策時也很有用。Fast.ai的創始人之一Rachel Thomas就是這種“隨即可用”方法的支持者之一,在教學時,她發現讓學生對研究材料感興趣更加重要,在這之后再加入數學教育即可。
資源
課程:Computational Linear Algebra by fast.ai
地址:http://www.fast.ai/2017/07/17/num-lin-alg/ "Computational Linear Algebra by fast.ai"
YouTube:3blue1brown: Essence ofLinear AlgebraandCalculus
地址:https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw "3blue1brown"
教材:Linear Algebra Done Rightby Axler
地址:http://linear.axler.net/ " Linear Algebra Done Right"
教材:Elements of Statistical Learningby Tibshirani et al.
地址:https://web.stanford.edu/~hastie/ElemStatLearn/ "Elements of Statistical Learning"
課程:Stanford’s CS229 (Machine Learning) Course Notes
地址:http://cs229.stanford.edu/syllabus.html#opt "Stanford’s CS229 (Machine Learning
機器學習研究中的數學
下面我將介紹在機器學習學術研究中所需要的數學思維類型。有些人不屑地認為,機器學習研究中那些即插即用的系統只不過是用更多的計算實現更高的性能。在一些領域里,研究人員仍然懷疑實證方法缺少數學的嚴謹。
很多人擔心,研究領域可能在現有系統和假設上并沒有擴展對領域的基礎了解。研究者們需要提供新的基礎模塊,用于生成全新的觀點和目標。例如,就像Geoff Hinton在他的膠囊網絡論文中提到的,重新思考用于圖像分類的神經網絡模塊。
在機器學習研究中,你不可能學習所有知識,你需要做的就是關注自己感興趣的領域,切勿一味追求熱點。
機器學習研究領域包羅萬象,但是在公平性、可解釋性和可用性方面都有著許多難題。和其他科學研究的準則一樣,基礎思考并不是現成的,它需要在具備高水平數學框架的前提下耐心思考。
資源
博客:Do SWEs need mathematics? by Keith Devlin
地址:https://www.maa.org/external_archive/devlin/devlin_10_00.html "Do SWEs need mathematics? by Keith Devlin"
reddit討論:Confessions of an AI Researcher
地址:https://www.reddit.com/r/MachineLearning/comments/73n9pm/d_confession_as_an_ai_researcher_seeking_advice/ "Confessions of an AI Researcher"
博客:How to Read Mathematics by Shai Simonson and Fernando Gouvea
地址:http://www.people.vcu.edu/~dcranston/490/handouts/math-read.html "How to Read Mathematics by Shai Simonson and Fernando Gouvea"
論文:NIPS and ICML recent conference papers
文章:A Mathematician’s Lament by Paul Lockhart1
地址:https://www.maa.org/external_archive/devlin/LockhartsLament.pdf "A Mathematician’s Lament by Paul Lockhart1"
機器學習的民主化
雖然這篇并未涉及太過高深的概念,但很多機器學習論文仍然充滿著復雜的術語。作為學生,你可以試著將高深的論文分解,記錄自己的理解,通過博客等形式表達出來。在這一點上可以借鑒distill.pub的方式。
結語
希望本文能成為你在機器學習領域開始數學學習的起點。
不同問題需要不同水平的知識來解決,我建議先弄明白你的目標是什么再著手進行學習。
如果你想搭建一款產品,可以找尋同伴或在學習小組中進行。
在研究領域,廣泛的數學基礎可以助你走的更遠。
數學(尤其是研究領域的數學)的確有些令人頭大,但是被難住也是學習的一部分啊!
祝你好運!
-
神經網絡
+關注
關注
42文章
4779瀏覽量
101174 -
機器學習
+關注
關注
66文章
8439瀏覽量
133087
原文標題:資源 |不要再問我什么數學水平才能學機器學習啦
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論