要學很多數學嗎 - 給要入行機器學習的朋友們的建議

dagis發表於2022-05-18
記得幾年前,剛被安排到機器學習團隊,我問組長,機器學習,要學很多數學嗎?記得他是這麼回答,其實我們都是用各種庫,並不是需要深度的掌握後面的數學原理。
 
過去幾個月面試了很多來應聘機器學習工程師的小夥子,各種庫使用起來非常麻溜,但是如果叫他們親自計算個東西,沒有幾個能正確的算出來,比如說最簡單的準確度precision,並不是每個人能夠第一時間把公式寫出來。我們組長的回答,可能非常準確的反應了大部分機器學習工程師的現狀,各種名詞熟練掛在嘴邊,庫使用也非常熟練,但並沒有真正理解含義。這樣可行嗎?如果不可行,那數學要學到什麼程度?
 
可行不可行,從團隊角度來說,要看對機器學習的ambition,公司產品對機器學習的期望值。如果只是搞個噱頭,預測一些不痛不癢的東西,的確不需要去深度研究,大部分的活只是需要按規範處理資料,喂入開源模型,是驢是馬,就這樣了,不管了。對個人來說,如果不是需求驅動,主動去研究背後枯燥數學原理的,恐怕不是那麼多。但是如果真的要把機器學習做好,把每個百分點的提高都當作是大事件的話,顯然知其然不知所以然是不夠的,必須對模型動刀子(我同事喜歡說model surgery,我覺得挺生動的),這樣子,如果不懂背後的原理,恐怕會無從下手。
 
這幾天閒著沒事,真的認真思考了一下,根據自己的經歷,作為一名機器學習工程師,真的要學很多數學嗎,如果給要入行的朋友做建議的話應該會怎麼建議呢。想出了幾個方面的數學,建議必須考慮學習或複習:
 
數學建模。我覺得揭開機器學習神祕面紗的第一步就是數學建模。機器學習的特徵工程我覺得就是基於數學建模的。大部分模型的訓練過程都是解方程,而數學建模要做的是怎麼把實際問題用方程表示出來。最簡單的例子,預測房價,首先就得把和房價相關的因素都羅列出來,然後再用數值來表達各個因素,有的因素可以直接用數值來表達,比如說面積。但有的就不可以,比如說地理位置,我們就需要找出合適的數值對應。因為數字本身是有意義的,可以說大小是相關的,對於某些因素,當轉化為數值的時候必須去相關。這裡就有很多數學問題需要去理解。總的目的就是建立一個反應真實問題的數學模型。
 
統計學。在訓練模型之前,分析資料是不可少的。比如說房價這個例子,在分析報表中,你可能必須給出各個因素的分佈,分為數,中位數等等。有時候你還需要去除奇點(outlier)。你可能還需要分析不同因素之前的相關性。當模型訓練出來後,它的結果是如何的呢。比如說當你present你模型分數的時候,你很可能會被問到,你測試集怎麼來的,如果是普通取樣來的,那就可能被問到你取樣了幾次啊,均值多少,方差多少,這個質量提高是不是statistics significant啊。統計學在數學中屬於比較深奧的學科,真正學懂,真的必須有很大的耐心和毅力,特別是如果走出校門多年,且期間並沒用過數學的。有信心的同學,建議複習完基本的統計學原理後,挑戰一下貝葉斯模型。
 
線性代數。大部分學過線性代數和矩陣論的同學都還是比較有後怕的。好的是在機器學習工程師的日常工作中,並不需要掌握深奧的矩陣操作。矩陣分解,求置啥並沒用到過,至少我沒碰到過。但是如何矩陣相乘,擴充套件等是做model surgery的必備技能。在機器學習當中,因為計算量非常大,所以在做迴圈計算的時候,必須考慮到用矩陣來操作,叫做vectorization,中文應該是稱為向量化。向量化後在計算效能上會大大提升,有些模型轉化甚至不支援迴圈。如果不太清楚線性代數要掌握到什麼程度的話,建議可以玩玩python的numpy庫。又要建議同學們上上吳恩達的機器學習課,裡面的assignment基本上覆蓋了難度需求。
 
數學的等價概念。不太清楚屬於數學的哪個學科。我這裡要說的等價概念不是傳統的等價類,而是說如果求某個複雜公式的最大值可以等於求某個簡化公式的最大值。比如說最經典的f(x)的最大值和log(f(x))對大值,求解讓f(x)得到最大值的x,這個問題是不是等價於求log(f(x))。這種等價式會大大降低模型的難度。有些簡單的容易找到,複雜的等價式,真的需要深奧的數學理論做基礎。記得一個做機器學習的博士朋友提到過,他們和數學系的博士生的差距就是,數學系的大神們總能夠輕鬆的等價來等價去。
 
暫時想到這麼多。希望對要入行的朋友有所幫助。
更多即時原創更新,關注微信公眾號:

 

 

相關文章