如何在學習機器學習時學習數學?

摘要: 機器學習到底須要怎麼樣的數學基礎?高段位機器學習如何練成?來瞧瞧。

到目前爲止,咱們都還不徹底清楚開始機器學習須要什麼樣的數學水平,特別是那些沒有在學校學習數學或統計學的人。算法

在這篇文章中,個人目標是提出創建產品或進行機器學習學術研究所需的數學背景。這些建議源於與機器學習工程師、研究人員和教育工做者的對話以及我在機器學習研究和行業角色方面的經驗。編程

首先,我會提出不一樣的思惟模式和策略,以便在傳統課堂以外接近真正的數學教育。而後,我將概述不一樣類型的機器學習工做所需的具體背景,這些學科的範圍涉及到高中統計和微積分到機率圖形模型(PGM)。網絡

關於數學焦慮的一個解釋架構

事實證實,不少人包括工程師都懼怕數學。首先,我想談談「善於數學」的神話。框架

事實是,擅長數學的人有不少練習數學的習慣。並非他們先天就是擅長數學,你可能在看他們作數學時發現他們駕輕就熟。要清楚,要達到這種溫馨狀態須要時間和精力,但這確定不是你生就有的。本文的其他部分將幫助你肯定所需的數學基礎水平,並概述構建它的策略。機器學習

入門函數

做爲先決條件,咱們假設你有線性代數/矩陣運算以及機率計算的基本知識點。我還但願你有一些基本的編程能力,這將支持做爲在上下文中學習數學的工具。以後,你能夠根據你感興趣的工做類型調整你的主要方向。工具

如何在校外學習數學?這個問題幾乎困擾咱們不少人。我相信專心學習數學的最佳方式是在學生的時代。在這種環境以外,你可能不會擁有學術課堂中的氛圍、同伴和可用資源。性能

在校外學習數學,我建議組成學習小組,並學會及時分享各自的資源。相互激勵在這裏發揮着重要做用,這種「額外」的研究應該受到鼓勵和激勵,這樣在學習上就會頗有動力。學習

數學和代碼

數學和代碼在機器學習工做流程中是高度交織在一塊兒的。代碼一般是由數學模型構建,它甚至共享了數學符號。實際上,現代數據科學框架(例如NumPy)使得將數學運算(例如矩陣/矢量積)轉換爲可讀代碼變得直觀和有效。

我鼓勵你將寫代碼做爲鞏固學習的一種方式,數學和代碼都是基於理性思考,寫代碼的過程其實就是理解數學公式的過程。例如,損失函數或優化算法的手動實現能夠是真正理解基礎概念的好方法。

經過代碼學習數學的一個例子:在神經網絡中實現ReLU激活的反向傳播。做爲簡要的入門讀物,反向傳播是一種依賴於微積分鏈規則來有效計算梯度的技術。

首先,咱們可視化ReLU激活,定義以下:

clipboard.png

要計算梯度(直觀地說,斜率),你能夠想象一個分段函數,由指標函數表示以下:

clipboard.png

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研究是一個很是豐富的研究領域,在公平性、可解釋性和可訪問性方面都存在緊迫問題。愈來愈多的研究者但願從數學的角度來解決這些問題,而非辯證性的去看待問題。

本文做者:【方向】

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索