如何在学习机器学习时学习数学?
摘要:?機器學習到底需要怎么樣的數學基礎?高段位機器學習如何練成?來瞧瞧。
到目前為止,我們都還不完全清楚開始機器學習需要什么樣的數學水平,特別是那些沒有在學校學習數學或統計學的人。
在這篇文章中,我的目標是提出建立產品或進行機器學習學術研究所需的數學背景。這些建議源于與機器學習工程師、研究人員和教育工作者的對話以及我在機器學習研究和行業角色方面的經驗。
首先,我會提出不同的思維模式和策略,以便在傳統課堂之外接近真正的數學教育。然后,我將概述不同類型的機器學習工作所需的具體背景,這些學科的范圍涉及到高中統計和微積分到概率圖形模型(PGM)。
關于數學焦慮的一個解釋
事實證明,很多人包括工程師都害怕數學。首先,我想談談“善于數學”的神話。
事實是,擅長數學的人有很多練習數學的習慣。并不是他們先天就是擅長數學,你可能在看他們做數學時發現他們得心應手。要清楚,要達到這種舒適狀態需要時間和精力,但這肯定不是你生就有的。本文的其余部分將幫助你確定所需的數學基礎水平,并概述構建它的策略。
入門
作為先決條件,我們假設你有線性代數/矩陣運算以及概率計算的基本知識點。我還希望你有一些基本的編程能力,這將支持作為在上下文中學習數學的工具。之后,你可以根據你感興趣的工作類型調整你的主要方向。
如何在校外學習數學?這個問題幾乎困擾我們很多人。我相信專心學習數學的最佳方式是在學生的時代。在這種環境之外,你可能不會擁有學術課堂中的氛圍、同伴和可用資源。
在校外學習數學,我建議組成學習小組,并學會及時分享各自的資源。相互激勵在這里發揮著重要作用,這種“額外”的研究應該受到鼓勵和激勵,這樣在學習上就會很有動力。
數學和代碼
數學和代碼在機器學習工作流程中是高度交織在一起的。代碼通常是由數學模型構建,它甚至共享了數學符號。實際上,現代數據科學框架(例如NumPy)使得將數學運算(例如矩陣/矢量積)轉換為可讀代碼變得直觀和有效。
我鼓勵你將寫代碼作為鞏固學習的一種方式,數學和代碼都是基于理性思考,寫代碼的過程其實就是理解數學公式的過程。例如,損失函數或優化算法的手動實現可以是真正理解基礎概念的好方法。
通過代碼學習數學的一個例子:在神經網絡中實現ReLU激活的反向傳播。作為簡要的入門讀物,反向傳播是一種依賴于微積分鏈規則來有效計算梯度的技術。
首先,我們可視化ReLU激活,定義如下:
?
要計算梯度(直觀地說,斜率),你可以想象一個分段函數,由指標函數表示如下:
NumPy為我們提供了有用、直觀的語法,我們的激活函數(藍色曲線)可以在代碼中解釋,其中x是我們的輸入,relu是我們的輸出:
relu = np.maximum(x, 0)
接下來是漸變(紅色曲線),其中grad描述了upstream漸變:
grad[x < 0] = 0
在沒有首先自己推導出梯度的情況下,這行代碼你可能看的不是很明白。在我們的代碼行中,(grad)對于滿足條件的所有元素,將upstream梯度中的所有值設置為0?[h<0]。在數學上,這實際上相當于ReLU梯度的分段表示,當乘以upstream梯度時,它會將小于0的所有值壓縮為0!
正如我們在這里看到的那樣,通過我們對微積分的基本理解,我們可以清楚地思考代碼。可以在此處找到此神經網絡實現的完整示例。
為構建機器學習產品的數學
為了寫這部分,我與機器學習工程師進行了交談,以確定數學在調試系統時最有幫助的地方。以下是工程師自己回答的數學在機器學習中的問題。希望你能從中發現一些有價值的問題。
問:我應該使用什么樣的聚類方法來可視化高維客戶數據?
方法:PCA與tSNE
問:我應該如何校準“阻止”欺詐性用戶交易的閾值?
方法:概率校準
通常,統計和線性代數可以以某種方式用于這些問題中的每一個。但是,要獲得滿意的答案通常需要針對特定??領域的方法。如果是這樣的話,你如何縮小你需要學習的數學類型?
定義你的系統
市場上有很多資源(例如,數據分析的scikit-learn,深度學習的keras)它們將幫助你跳轉編寫代碼來為你的系統建模。在你打算這樣做的時候,嘗試回答以下有關你需要構建管道的問題:
1.你系統的輸入/輸出是什么?
2.你應該如何準備數據以適合你的系統?
3.如何構建特征或策劃數據以幫助你的模型進行概括?
4.你如何為你的問題定義合理的目標?
你可能會感到驚訝,定義一個系統竟然需要處理那么多問題!之后,管道建設所需的工程也是非常重要的。換句話說,構建機器學習產品需要大量繁重的工作,不需要深入的數學背景。
資源
??Google的研究科學家Martin Zinkevich?為ML工程提供的最佳實踐
需要什么數學知識就需要什么!
當你的頭腦中完全進入到機器學習工作流程時,你可能會發現有一些步驟會被卡住,特別是在調試時。當你被困住時,你知道要查找什么嗎?你的權重是否合理?為什么你的模型不能與特定的損失定義融合?衡量成功的正確方法是什么?此時,對數據進行假設,以不同方式約束優化或嘗試不同的算法可能會有所幫助。
通常,你會發現建模/調試過程中存在數學直覺(例如,選擇損失函數或評估指標),這些直覺可能有助于做出明智的工程決策。這些都是你學習的機會!來自Fast.ai的?Rachel Thomas?是這種“按需”學習方法的支持者。
資源:
?課程:計算線性代數?by fast.ai?;
?YouTube:3blue1brown:線性代數和微積分的本質;
?教科書:線性代數,Axler;
?教科書:Tibshirani等人的統計學習元素;
?課程:斯坦福大學的CS229(機器學習)課程筆記。
數學用于機器學習研究
我現在想要描述對于機器學習中以研究為導向的工作有用的數學思維方式。機器學習研究的觀點指向即插即用系統,在這些系統中,模型會投入更多計算以訓練出更高的性能。在某些圈子里,研究人員仍然懷疑缺乏數學嚴謹性的方法可以將我們帶入人類智慧的圣杯。
值得關注的是,研究人員需要提供原始資源,例如新的基礎構建模塊,可用于獲取全新的洞察力和實地目標的方法。這可能意味著重新思考用于圖像分類的卷積神經網絡等基礎模塊,正如Geoff Hinton在他最近的Capsule Networks?論文中所做的那樣。
為了實現機器學習的下一步,我們需要提出基本問題。這需要深度數學成熟,因為整個過程涉及數千小時的“卡住”,提出問題,并在追求新問題時翻轉問題觀點。“有趣的探索”使科學家們能夠提出深刻,富有洞察力的問題,而不僅僅是簡單的想法/架構的結合。
ML研究是一個非常豐富的研究領域,在公平性、可解釋性和可訪問性方面都存在緊迫問題。越來越多的研究者希望從數學的角度來解決這些問題,而非辯證性的去看待問題。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的如何在学习机器学习时学习数学?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用CLI进行高速跨域日志复制、历史数据
- 下一篇: 儿童节,5岁宝宝写给程序员爸爸的一封信!