做機器學(xué)習(xí)需要多少數(shù)學(xué)基礎(chǔ)?這是很多初學(xué)者最關(guān)心的問題,答案也眾說紛紜。
有人說,概率論線性代數(shù)要預(yù)先精通;有人說,微積分要懂一點;也有人說,沒必要特地去補;甚至有人專門寫了繞開數(shù)學(xué)的深度學(xué)習(xí)入門教材……
斯坦福大學(xué)計算機系學(xué)生、斯坦福AI實驗室研究助理(RA)Vincent Chen,最近在硅谷最牛孵化器Y Combinator官方博客上發(fā)表的一篇文章,就專門深入探討了里這個問題。
Vincent想要說的是,具體問題具體分析。
他跟領(lǐng)域內(nèi)的很多工程師、研究人員、教育工作者,討論了這個問題,再加上自己的經(jīng)驗,得出了這樣的結(jié)論:解決不同問題,可能需要不同程度的直覺 (Intuition) ,所以首先要知道自己的目標是什么。
構(gòu)建產(chǎn)品和做研究,需要的數(shù)學(xué)就不太一樣。
不過,還是要先從大家都差不多的入門階段說起。
入門須知
熟悉線性代數(shù)/矩陣運算,是機器學(xué)習(xí)的軟性前提。也就是說,最好懂,不強制。
當然,學(xué)習(xí)數(shù)學(xué)最好的環(huán)境還是學(xué)校。沒有了學(xué)校里的壓力、競爭和交流,就要找其他方式來補充:學(xué)習(xí)小組、學(xué)習(xí)型午餐會都是不錯的形式。
想要在工作中學(xué)數(shù)學(xué),編程最好也會一點,它會成為你的學(xué)習(xí)工具。
要知道,在機器學(xué)習(xí)任務(wù)中,數(shù)學(xué)和代碼是交織在一起的。代碼需要數(shù)學(xué)上的直覺,甚至和數(shù)學(xué)符號的語法有共通之處。
舉個例子:練習(xí)手動實現(xiàn)損失函數(shù)(loss functions)或者優(yōu)化算法(optimization algorithm),就是真正理解背后概念的好方法。
再舉個比較實際的例子:在神經(jīng)網(wǎng)絡(luò)里手動為線性整流函數(shù)(ReLU)實現(xiàn)反向傳播,就涉及用微積分里的鏈式法則來有效計算梯度,而運用鏈式法則,需要用ReLU的梯度乘以一個導(dǎo)數(shù)。
最開始,要先將ReLU激活函數(shù)可視化:
計算梯度(就是看起來的斜率),要可視化一個階梯函數(shù),用指示函數(shù)表示:
現(xiàn)在的數(shù)據(jù)科學(xué)框架能直觀地把數(shù)學(xué)運算翻譯成可讀的代碼,NumPy就是其中之一。對于上面這個任務(wù),它就可以將激活函數(shù)(藍色曲線)用代碼表示出來:
relu = np.maximum(x, 0)
梯度(紅色曲線)也可以:
grad[x < 0] = 0
只有親自求了一遍導(dǎo)數(shù),才能理解這行代碼。
掌握基礎(chǔ)之后,就可以根據(jù)你的實際需求自定義學(xué)習(xí)方向了。
造機器學(xué)習(xí)產(chǎn)品需要的數(shù)學(xué)
作為一名學(xué)生,Vincent通過和多名機器學(xué)習(xí)工程師聊天,了解了他們在debug時最有用的數(shù)學(xué)知識。
總的來說,統(tǒng)計學(xué)和線性代數(shù)總是有用的,但面對不同的問題又有不同的需求。
那么,怎么確定該精修哪些數(shù)學(xué)知識呢?
首先,要定義你的系統(tǒng)。
想寫代碼為系統(tǒng)建模,可用的資源多得是。在構(gòu)建系統(tǒng)的過程中,要想著這些問題:
系統(tǒng)的輸入/輸出是什么?
怎樣準備適合系統(tǒng)的數(shù)據(jù)?
怎樣構(gòu)建特征、處理數(shù)據(jù)能讓模型更好地泛化?
怎樣為你的問題定義合理的目標?
然后,在你用到數(shù)學(xué)的時候,去學(xué)習(xí)它。
一頭扎進機器學(xué)習(xí)里,你就會發(fā)現(xiàn)自己會卡在某些步驟。卡住的時候,該查什么呢?你的權(quán)重合理嗎?你的模型為什么用這種損失就不收斂?
這時候,就需要對數(shù)據(jù)做假設(shè),換個方式約束優(yōu)化,或者換個算法試試。于是在這個建模或者debug過程里,你會發(fā)現(xiàn)懂數(shù)學(xué)對做決定有很大幫助,比如說要選擇損失函數(shù)和評價指標,數(shù)學(xué)就是個好工具。
這可以說是一種“按需”學(xué)習(xí)的方法了。
做機器學(xué)習(xí)研究需要的數(shù)學(xué)
如果是做研究的話,就需要廣泛的數(shù)學(xué)基礎(chǔ),來給你鋪路。
現(xiàn)在,很多研究都是在現(xiàn)有系統(tǒng)之上進行的,缺少對基礎(chǔ)的理解。
這樣還不夠,研究者應(yīng)該貢獻更基本的模塊。比如說,可以像深度學(xué)習(xí)教父Geoff Hinton提出的膠囊網(wǎng)絡(luò)(Capsule Networks)一樣,重新思考卷積神經(jīng)網(wǎng)絡(luò)(CNN)這種基本模塊。
要想在機器學(xué)習(xí)領(lǐng)域做出這樣的成就,就需要問一些基礎(chǔ)問題,也就需要對數(shù)學(xué)的深刻理解?!渡窠?jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》教材的作者Michael Nielsen稱之為“帶著玩心的探索”。
這個探索過程中,可能會在一個問題上卡幾個小時,可能需要換個角度去看問題。不過,只有這樣,科學(xué)家才能超越直觀想法和架構(gòu)的組合,提出深刻、有見地的問題。
和構(gòu)建產(chǎn)品不一樣的是,機器學(xué)習(xí)研究里的基礎(chǔ)思考不是“按需”進行的,想要以高級的數(shù)學(xué)框架所要求的廣度來思考、批判性地解決問題,需要耐心學(xué)習(xí)。
不要怕
總的來說,數(shù)學(xué)可能是有點可怕,你會卡在一個又一個地方。但是,這本來就是數(shù)學(xué)學(xué)習(xí)很重要的部分。
不要害怕。
實際上,數(shù)學(xué)好的人都要花好多時間來練習(xí),于是,他們對這種做數(shù)學(xué)“被卡住”的感覺就習(xí)以為常了。想要學(xué)好數(shù)學(xué),首先需要建立學(xué)生的心態(tài)。
想要習(xí)以為常,當然需要付出時間和努力,加油~
-
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8406瀏覽量
132561 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121111
原文標題:怎樣搞定機器學(xué)習(xí)里的數(shù)學(xué)?斯坦福高手教你具體問題具體分析
文章出處:【微信號:CAAI-1981,微信公眾號:中國人工智能學(xué)會】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論