編者按:Vincent Chen是斯坦福大學計算機科學專業(yè)的學生,同時也是斯坦福AI研究室的一名研究助理。本文他給我們帶來了在機器學習中所需要的數(shù)學知識介紹。以下是論智對原文的編譯。
很多沒有良好數(shù)學基礎或統(tǒng)計學的同學們總會問,到底什么樣的數(shù)學水平才能入門機器學習?目前還沒有確切的答案。
在這篇文章中,我會列出在進行機器學習產品搭建或學術研究時所需要的數(shù)學背景知識。這些都是我在與機器學習工程師、研究者、教授的談話中以及自己的經(jīng)驗中總結出的。
為了構建數(shù)學的準備知識,首先我會提出與傳統(tǒng)課堂不同的思維模式和學習方法。接著,我會大致敘述在機器學習領域不同類型所需要的具體背景知識,大致涵蓋了高中的統(tǒng)計學和微積分,到最近的概率圖形模型(PGM)。最后,我希望你能找到自己所在領域所需要的數(shù)學知識。希望這篇文章對你有用!
關于被數(shù)學支配的恐懼
數(shù)學可以說是很多人的噩夢,包括工程師們。在開始之前,我想談談那些“數(shù)學好的人”到底有什么秘訣。
實際上,數(shù)學好的人只是有很多練習的機會而已,他們習慣了在研究數(shù)學的過程中遇到困難。最近的一項研究表明,與天生的能力相比,思維方式才是能否學好數(shù)學的重要因素。
但是,想達到上述境界仍需要花點時間和努力,這并不是與生俱來的能力。
開始上手
首先,作為基礎,我們希望你有基礎的線性代數(shù)、微積分以及概率論入門知識。如果有基礎編程知識更好,這可以作為在具體語境中學習數(shù)學的工具。之后,你可以根據(jù)具體領域調整學習。
如何在學校之外學習數(shù)學
學習的最佳途徑一定是泡在學校,如果脫離了學校環(huán)境,也就沒有嚴格的體系架構了,同時也不會有來自學霸的壓力,資源明顯不足。
所以在校外學習,我推薦學習小組或者研討會的形式。在研究機構中,可能有閱讀小組這類組織。有了基本組織框架,小組內可能會一起學習某本教材,并進行討論。
這種課外學習通常不會給日常工作帶來負擔,甚至在互相激勵的環(huán)境中還能讓你的本來工作更加高效。
數(shù)學和編程
數(shù)學和代碼在機器學習研究中通常是高度混合的。大多數(shù)情況下,代碼都是直接從數(shù)學邏輯中形成,并且能用代碼語法展示出數(shù)學表示法。其實現(xiàn)在一些數(shù)據(jù)科學框架(例如NumPy)就能直接將數(shù)學推理(例如矩陣或向量)轉換成可讀代碼,非常直觀高效。
所以這里鼓勵通過代碼夯實數(shù)學學習。例如,練習手動實現(xiàn)損失函數(shù)或優(yōu)化的代碼可以進一步了解基礎概念。
這里舉一個通過代碼學習數(shù)學的例子:在你的神經(jīng)網(wǎng)絡中為ReLU激活函數(shù)進行反向傳播。反向傳播是利用微積分中的規(guī)則來計算梯度的技術。為了在這一環(huán)境中實現(xiàn),我們將upstream導數(shù)和ReLU的梯度相乘。
首先,我們對ReLU進行可視化:
為了計算梯度,你可能會對分段函數(shù)進行可視化,用指示函數(shù)表示如下:
用NumPy我們可以直觀地用代碼表示出激活函數(shù)(藍色曲線),其中x是輸入,relu是輸出:
relu = np.maximum(x, 0)
梯度(紅線)也是一樣,下面的等式描述了upstream梯度:
grad[x < 0] = 0
如果你自己事先沒有推導出梯度,那么這行代碼可能不好解釋。在我們的代碼中,將upstream梯度中的所有值都設為0,以滿足[h<0]的條件。從數(shù)學角度來說,這能高效地展示ReLU梯度的分段表示,當它們乘以upstream梯度時,可以將所有小于0的值變?yōu)?。
從這里我們可以看到,了解微積分的基礎概念讓我們對代碼有了清晰的思考。想了解神經(jīng)網(wǎng)絡部署的完整過程,可以查看:pytorch.org/tutorials/beginner/pytorchwithexamples.html
用數(shù)學打造機器學習產品
為了完成這一部分,我與機器學習工程師探討了在debug的過程中都需要哪些數(shù)學知識。以下是工程師們的建議,如果你還不了解,沒有關系,以下部分可以為你提供具體的思路。
問:我想對高維客戶數(shù)據(jù)進行可視化,應該用什么聚類方法?
答: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
問:我想確定某一區(qū)域的衛(wèi)星數(shù)據(jù)的偏差,應該用哪種方法?
答:答案不唯一,也許可以試試demographic parity?blog.mrtz.org/2016/09/06/approaching-fairness.html
總的來說,統(tǒng)計學和線性代數(shù)可以運用到很多問題中,但是想要得到滿意的結果通常需要更專業(yè)的方法。那么,我們該如何縮小數(shù)學學習的知識呢?
定義你的系統(tǒng)
在利用豐富的資源編寫代碼前,你需要為自己幾個問題:
系統(tǒng)的輸入和輸出分別是什么?
你該如何準備適合系統(tǒng)的數(shù)據(jù)?
如何創(chuàng)建特征或數(shù)據(jù)來幫助生成模型?
如何為你的問題定義一個合理的目標?
的確,定義系統(tǒng)很難,但是之后的工程管道搭建也很復雜。換句話說,創(chuàng)建機器學習產品需要做很多工作,但大部分不需要深入的數(shù)學知識。
資源
谷歌的研發(fā)工程師Martin Zinkevich曾寫過一篇機器學習實踐教程,感興趣的讀者可自行查閱:developers.google.com/machine-learning/guides/rules-of-ml/
按需學習
剛進入機器學習領域,你可能會發(fā)現(xiàn)麻煩不斷,尤其是在debug的過程中。當你被某個問題困住時,應該如何解決?權重合理嗎?為什么模型會在特殊損失值下收斂?衡量成功與否的正確方法是什么?這時,對數(shù)據(jù)進行質疑也許比較有用,可以試試不同的優(yōu)化方法或者算法。
通常你會發(fā)現(xiàn)這些在建?;騞ebug過程中用到的數(shù)學在做決策時也很有用。Fast.ai的創(chuàng)始人之一Rachel Thomas就是這種“隨即可用”方法的支持者之一,在教學時,她發(fā)現(xiàn)讓學生對研究材料感興趣更加重要,在這之后再加入數(shù)學教育即可。
資源
課程: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
機器學習研究中的數(shù)學
下面我將介紹在機器學習學術研究中所需要的數(shù)學思維類型。有些人不屑地認為,機器學習研究中那些即插即用的系統(tǒng)只不過是用更多的計算實現(xiàn)更高的性能。在一些領域里,研究人員仍然懷疑實證方法缺少數(shù)學的嚴謹。
很多人擔心,研究領域可能在現(xiàn)有系統(tǒng)和假設上并沒有擴展對領域的基礎了解。研究者們需要提供新的基礎模塊,用于生成全新的觀點和目標。例如,就像Geoff Hinton在他的膠囊網(wǎng)絡論文中提到的,重新思考用于圖像分類的神經(jīng)網(wǎng)絡模塊。
在機器學習研究中,你不可能學習所有知識,你需要做的就是關注自己感興趣的領域,切勿一味追求熱點。
機器學習研究領域包羅萬象,但是在公平性、可解釋性和可用性方面都有著許多難題。和其他科學研究的準則一樣,基礎思考并不是現(xiàn)成的,它需要在具備高水平數(shù)學框架的前提下耐心思考。
資源
博客: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的方式。
結語
希望本文能成為你在機器學習領域開始數(shù)學學習的起點。
不同問題需要不同水平的知識來解決,我建議先弄明白你的目標是什么再著手進行學習。
如果你想搭建一款產品,可以找尋同伴或在學習小組中進行。
在研究領域,廣泛的數(shù)學基礎可以助你走的更遠。
數(shù)學(尤其是研究領域的數(shù)學)的確有些令人頭大,但是被難住也是學習的一部分啊!
祝你好運!
-
神經(jīng)網(wǎng)絡
+關注
關注
42文章
4814瀏覽量
103734 -
機器學習
+關注
關注
66文章
8505瀏覽量
134677
原文標題:資源 |不要再問我什么數(shù)學水平才能學機器學習啦
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
評論