觀點| 我們該如何學習機器學習中的數學

2020-12-17 機器之心Pro

選自ycombinator博客,機器之心編譯,作者:Vincent Chen,參與:機器之心編輯部。

數學在機器學習中非常重要,不論是在算法上理解模型代碼,還是在工程上構建系統,數學都必不可少。通常離開學校後很難有機會靜下心學習數學知識,因此我們最好能通過閱讀小組或讀書會等形式營造環境,並專注學習那些在實踐中常常需要用到的數學知識。

數學達到什麼水平才可以開始機器學習?人們並不清楚,尤其是那些在校期間沒有研究過數學或統計學的人。

本文的寫作目的是介紹構建機器學習產品或進行相關學術研究所必需的數學背景,以及數學在工程和研究中的重要性。這些建議是根據我和機器學習工程師、研究者和教育者交流而得到的,當然也有我自己在機器學習研究和業界工作中的個人經驗。

為了構建必備的數學背景,我首先提出不同的思維模式和策略,幫助大家在學校之外也可以接受數學教育。然後,我會給出不同種類機器學習工作所需的數學背景,從高中水平的統計學和微積分到概率圖模型(PGM)的最新進展。希望大家讀完本文後,能夠對自己在機器學習工作中所需要的數學教育有清楚的認知。

關於數學焦慮

很多人害怕數學,包括工程師。首先,我想解決「擅長數學」這一迷思。

一般精通數學的人有大量和數學有關的實踐經驗。因此,他們在研究數學時更容易保持專注。相比內在能力,學生的思維模式才是決定一個人學習數學能力的關鍵。

不過要想達到這種狀態需要付出大量時間和努力,但是這並不會讓你感到無聊。下文將幫助大家確定你所需要的數學水平,以及學習策略。

機器學習中的數學

作為軟體工程的開發者,我們一般有基礎的線性代數與矩陣微分學知識,也有一些概率論和編程的基礎。因此以它們為基礎,我們只需要根據不同的方向與領域調整知識結構就行。

那麼我們該如何在校外學習數學呢?我相信學習數學最好的方法是將其作為一份全職工作,也就是學生。因為離開了學校,我們很難進行結構化的學習,也很難有正向的同齡壓力和眾多的學習資源。但是在校外學習中,我比較推薦成立學習小組或研討會,它們同樣能提供類似學校的學習環境。

在研究實驗室中,這種課外學習可能是以閱讀小組的形式進行。我們可以討論課本中難以理解的地方,也可以討論自己對它們的見解。而學習的環境是支持長期數學學習的動力,因此建立這種環境並意識到數學在工程與研究中的重要性非常關鍵。

數學與代碼

數學和代碼在機器學習工作流程中高度交織在一起。代碼通常可以根據數學直觀地構建,它甚至會共享數學符號與句法。實際上,NumPy 等現代數據科學框架令數學運算很容易轉化為直觀的代碼。我們可以將代碼作為鞏固學習的方式,且數學和代碼都依賴於對概念的精確理解與符號表示。例如,手動用 NumPy 實現損失函數或最優化算法是理解它們概念非常好的方式。

作為通過代碼學習數學的案例,我們可以考慮一個實際的案例,即為神經網絡實現反向傳播和 ReLU 激活函數。作為入門級概念,反向傳播是一種依賴於微積分鏈式求導法則的技術,它能高效計算梯度。為了在神經網絡中利用鏈式求導法則,我們可以使用 ReLU 激活函數的梯度乘以上遊導數。

為了完成反向傳播的案例,首先我們可以可視化 ReLU 激活函數:

為了計算 ReLU 的梯度或斜率,我們可以將其可視化為分段函數,其中自變量小於零的地方斜率為 0,自變量大於零的地方斜率恆等於 1。

NumPy 可以幫助我們構建 ReLU 函數,使用 maximum 函數可以只輸出該函數中所有參數中相對較大的值。如下所示 x 為輸入,relu 為輸出:

relu = np.maximum(x, 0)

ReLU 激活函數的梯度值可以表示為以下,其中 grad 表示為上遊梯度:

grad[x < 0] = 0

如果沒有首先手動推導出梯度,上述代碼可能並不是那麼容易理解。在我們的代碼中,其將所有滿足條件 [x < 0] 的元素梯度 grad 都設置為零,也就是說上遊梯度只有在 x>0 的情況下才能繼續向前傳播。在數學上,這等價於 ReLU 激活函數梯度的分段線性表徵,它將所有小於 0 的值壓縮為 0,並乘上上遊梯度。

如上所示,若對於微積分有一定的理解,那麼我們可以清晰地理解這兩行基本代碼。因為機器學習中很多代碼都在描述數學運算,因此了解數學原理對於理解機器學習模型過程非常重要。

構建機器學習產品中的數學

為了完成這一章節,我曾與機器學習工程師探討到底哪些數學對於調試他們的系統最重要。以下一些問題與回答是工程師站在數學的角度下的看法。

我們可以使用什麼樣的降維算法可視化高維用戶數據?方法:主成分分析與 t 分布隨機近鄰嵌入我們該怎樣校準閾值(例如置信度選擇 0.9 或 0.8)以阻止一些欺騙性的用戶數據?方法:概率校準將衛星數據偏向矽谷或阿拉斯加等世界某塊具體地區的最好方法是什麼?方法:開放性問題,也許可以是人口統計學方法

一般而言,統計學和線性代數能以某些方式應用於這些問題。然而,為了獲得令人滿意的回答,我們通常需要特定領域的方法。如果是這樣的話,我們該如何選擇一些我們需要學習的數學內容?

定義你的系統

目前有非常多的資源可以幫助我們跨越寫代碼而直接調用函數構建機器學習系統,例如數據分析中常用的 scikit-learn 和深度學習中常用的 keras。所以你們可以嘗試回答以下關於搭建機器學習流程的問題:

機器學習系統中輸入和輸出都是什麼?我們該如何準備合適的數據以擬合系統?如何構建特徵或數據以幫助模型提高泛化性能?如何為我們的任務定義合適的目標函數?

你可能會比較驚訝,定義機器學習系統可能會比較困難,但搭建的流程並不複雜。換而言之,構建機器學習產品要求非常多的工程工作,但並不要求有非常深厚的數學背景。

資源:谷歌機器學習應用的四十三條經驗法則(附 PDF)

學習必要的數學

如果一頭鑽進機器學習工作流,你可能會發現在調試機器學習系統時會遇到一些困難。當遇到困難時你知道需要查找什麼嗎?你的權重是不是合理?為什麼模型使用一些損失函數不能收斂?用什麼樣的度量方法衡量模型性能才是合理的?在這個時候,對數據分布做出假設、約束最優化方法或採用不同的算法都是非常有幫助的。

通常,你可能會發現在建模和調試過程背後有直觀的數學原理,例如選擇損失函數或評估度量,這些數學原理都會幫助我們實現更優的工程決策。

因此,根據實際工程中遇到的數學,再進一步學習這些數學才是更好的方法。

機器學習研究中的數學

這裡,我想要描述下對機器學習研究有幫助的數學心態。對機器學習研究比較嘲諷的觀點認為,它是一種即插即用的系統,把大量計算層級堆疊在一起而獲得好的表現。在一些圈子裡,研究人員依然質疑經驗性的方法缺乏嚴謹的數學推導(例如,一些深度學習方法),無法為我們帶來廣義上的智能。

它擔憂研究界可能是建立在已有的系統與假設上,並未擴展我們對機器學習領域的基礎理解。研究員們需要貢獻新的、基礎的研究模塊,從而用於啟發全新的洞見與研究方法。例如像深度學習先驅 Geoff Hinton 提出 Capsule 網絡一樣,它重新考慮圖像分類中常用的 CNN 基礎。

為了機器學習的下一步躍遷,我們需要提出基礎問題。這需要對數學的熟練掌握,就像深度學習書籍的作者 Michael Nielsen 描述的「有趣的多探索」。這個過程可能經歷數千小時的思考、提問、推翻問題尋求新的視角。「有趣的探索」能讓科學家提出深度、有洞見的問題,超越簡單的想法和架構。

要清楚,在機器學習研究中,不可能什麼都學。為了正確地「有趣探索」,需要你遵照自己的興趣,而不是一直計較最熱的新研究。

機器學習是一個異常豐富的研究領域,有大量未解決的問題:公正、可解釋性、易用性。如同所有的學科一樣,基本思想不是請求式的過程,需要耐心地用高級數學框架思考重大難題的解決方案。

民主化機器學習研究

我希望我沒有把「研究數學」描述得過於難懂,因為使用數學的思路應該以直觀的方式表現。悲哀的是,許多機器學習論文仍然充滿大量複雜的、前後矛盾的術語,關鍵直覺難以理解。作為學生,你可以為自己、為這個領域做個偉大貢獻:通過博客、推特等方式把這些密集的論文轉寫為可消化的直覺知識塊。以 distill.pub 為例,它就專注於提供對機器學習研究的清晰解釋。換言之,把技術思路的解釋作為學習探索的方式,有趣而又有幫助。

總結

希望本文能夠幫助大家針對機器學習提高數學水平。

不同的問題要求不同的數學水平,我鼓勵大家首先理清自己的目標。如果你希望構建產品,那麼尋求同伴和研究小組,通過向最終目標的前進而激勵自己學習。在學界研究中,廣泛的數學基礎可以幫助貢獻新的基礎構造塊,進而推動領域發展。通常,數學(尤其是研究論文形式的數學)令人望而生畏,但是「沉醉其中」是學習過程的一大部分。

相關焦點

  • 機器學習中所需要的數學知識介紹
    本文他給我們帶來了在機器學習中所需要的數學知識介紹。以下是論智對原文的編譯。 很多沒有良好數學基礎或統計學的同學們總會問,到底什麼樣的數學水平才能入門機器學習?目前還沒有確切的答案。 在這篇文章中,我會列出在進行機器學習產品搭建或學術研究時所需要的數學背景知識。這些都是我在與機器學習工程師、研究者、教授的談話中以及自己的經驗中總結出的。
  • 機器學習中的數學,這是一份新鮮出爐的熱門草稿
    一旦得到恰當的形式化,我們就可以使用數學工具推導出機器學習算法設計的選擇結果。這幫助我們理解正在解決的任務,同時了解智能的本質。全球數學專業的學生常見的一種抱怨是數學話題似乎與實際問題沒有什麼相關。我們認為機器學習是促使人們學習數學的直接動力。
  • 如何使用 Python學習機器學習
    Learning) 成為近幾年來計算機科學界十分熱門的研究領域,如今在實體和在線的學習機器學習的資源有很多,本文整理了一些好用學習資源希望幫助初學者能更容易使用 Python 入門機器學習的領域中,從零開始學習機器學習。
  • 如何用數學函數去理解機器學習?
    本文主要分享了如何基於數學函數原理去理解機器學習的本質,並簡要介紹了機器學習的過程。基於最近看的一些文章和書籍,本文將重點分享,如何用數學函數去理解機器學習的過程,以及用數學原理指導產品工作的一些思考。一、機器學習的本質機器學習,即學習人類的分析、判斷、解決問題的能力。人的能力如何得來?通過長期的信息輸入,再經過大腦思考,最後輸出對事物的判斷。
  • 徹底解決數學問題-《機器學習的數學》出版了
    相信不少讀者在學習《深度學習》、《統計學習方法》、《Pattern Recognition and Machine Learning》等經典教材以及閱讀本領域論文、開原始碼的時候都曾經為那些數學符號和公式、定理感到困惑和苦惱。數學是對大家掌握機器學習造成障礙的最主要原因之一,沒有紮實的數學基礎,真正掌握機器學習談何容易?如何解決機器學習領域的數學問題?
  • 專家觀點碰撞:深度學習能否取代其他機器學習算法
    【編者按】深度學習在最近兩年非常火爆,但深度學習能否取代其他機器學習算法?紐約大學研究生Ran Bi根據Quora上的一個討論總結了不同的觀點,CSDN編輯將其翻譯如下,並加上一些國內人工智慧專家的觀點,供大家參考。深度學習迅速地成長起來了,並且以其瘋狂的實證結果著實令我們驚奇。Quora上有一個關於深度學習是否會讓其他的機器學習算法過時的討論。
  • 機器學習入門教程-第03課:如何學習「機器學習」
    第03課:如何學習「機器學習」學習「機器學習」這件事,我走過很長的一段彎路。有一些心得、體會和方法,在此和大家分享。以模型為驅動,了解「機器學習」的本質本課力圖引導大家以模型為驅動,進行學習。這一個個的模型,就是機器學習的「肌肉」,我們要通過觀察學習這一塊塊肌肉,以其為載體來了解機器學習的核心——將事物轉化為數值,將關係、變換轉化為運算,以事實(數據)為依據,以規章(算法)為準繩,通過計算來掌握事物的客觀規律(模型)。要知道,這些經典模型固然經典,但是到了實際應用中,它們並非神聖不可改變。
  • 機器學習中基本的數學符號是什麼?
    此外,本文還給出了 5 個當你在理解數學符號遇到困難時可以應急的小技巧。在機器學習中,你永遠都繞不過數學符號。通常,只要有一個代數項或一個方程符號看不懂,你就完全看不懂整個過程是怎麼回事了。這種境況非常令人沮喪,尤其是對於那些正在成長中的機器學習初學者來說更是如此。
  • 機器學習中的數學到底難不難
    本文轉載自【微信公眾號:機器學習算法與Python精研,ID:AITop100】經微信公眾號授權轉載,如需轉載與原文作者聯繫很多人學了Python,嚮往著機器學習和深度學習,但總是感覺數學是自己最薄弱的一塊,因此不敢動手,不知道怎麼學習,那麼機器學習中哪些數學是需要我們掌握的呢
  • 機器學習背後,你不能不知道的數學核心概念
    現在讓我們把這個問題解決掉——你需要理解機器學習算法背後的數學原理,才能成為一名數據科學家。沒有別的辦法。這是數據科學家角色的一個固有部分,每一位招聘人員和有經驗的機器學習專業人士都將證明這一點。因此,這就引出了一個問題,我們該如何著手學習呢?這就是我們將在本文中學習的內容。
  • 在機器學習項目中該如何選擇優化器
    介紹為你的機器學習項目選擇一個好的優化器是非常困難的。熱門的深度學習庫,如PyTorch或TensorFlow,提供了廣泛的優化器的選擇,不同的優化器,每個都有自己的優缺點。此外,當前深度學習的挑戰帶來了新的SGD變體,如LARS或LAMB。例如,谷歌研究在其最新論文中使用LARS訓練了一個強大的自監督模型。下面的部分將介紹最流行的優化器。如果你已經熟悉了這些概念,請轉到「如何選擇正確的優化器」部分。
  • 機器學習數學知識結構圖
    在今天這篇文章裡,我們將對機器學習的數學知識進行總結,畫出類似的結構圖。由於數學知識體系太過龐大,因此我們分成了整體知識結構圖,以及每門課的知識結構圖。先說整體結構。在機器學習中所用到的主要有微積分、線性代數、概率論、最優化方法、資訊理論、隨機過程、圖論這幾門數學課的知識。它們之間的關係如下圖所示。
  • 《機器學習數學基礎》最新版,Mathematics for Machine Learning
    機器學習數學基礎》最新版 417 頁 pdf 版本已經放出,本書旨在激勵人們學習數學概念,包括數學基礎知識和使用數學基礎知識進行機器學習算法示例兩部分,值得收藏學習!  機器學習建立在數學語言的基礎上,用來表達直觀上顯而易見但卻難以形式化的概念。一旦正確地形式化,我們就可以使用數學工具來得出我們設計選擇的結果。這使我們能夠深入了解我們正在解決的任務以及智能的本質。全球數學系學生普遍抱怨的一個問題是,數學所涵蓋的主題似乎與實際問題沒有太多關聯。我們認為機器學習是人們學習數學的一個明顯而直接的動機。
  • 資源 |不要再問我什麼數學水平才能學機器學習啦
    本文他給我們帶來了在機器學習中所需要的數學知識介紹。以下是論智對原文的編譯。很多沒有良好數學基礎或統計學的同學們總會問,到底什麼樣的數學水平才能入門機器學習?目前還沒有確切的答案。在這篇文章中,我會列出在進行機器學習產品搭建或學術研究時所需要的數學背景知識。這些都是我在與機器學習工程師、研究者、教授的談話中以及自己的經驗中總結出的。
  • 一文介紹機器學習中基本的數學符號
    在機器學習中,你永遠都繞不過數學符號。通常,只要有一個代數項或一個方程符號看不懂,你就完全看不懂整個過程是怎麼回事了。這種境況非常令人沮喪,尤其是對於那些正在成長中的機器學習初學者來說更是如此。如果你能了解一些基本的數學符號以及相關的小技巧,那你就在看懂機器學習方法的論文或書籍描述上前進了一大步。在本教程中,你將學到機器學習技術描述中遇到的基本數學符號。
  • 機器學習會取代數學建模嗎?讓我們假設一個微積分落後但深度學習...
    更驚人的是,很多數學博士生打算將機器學習嵌入到它們的研究課題中,從而形成將「傳統」(ODE和PDE)和「現代」(深度學習)相結合和新型混合模型。  所以,機器學習是否會最終取代數學建模?  如果數學模型在科研領域無法突破,我們最終是否會使用機器學習的方法來獲得建模上的進展呢?  當然不是!
  • 資料| 《 機器學習數學基礎 》
    《 機器學習數學基礎 》機器學習構建於數學語言之上,以表達看似直觀實則難以形式化的概念。一旦得到恰當的形式化,我們就可以使用數學工具推導出機器學習算法設計的選擇結果。這幫助我們理解正在解決的任務,同時了解智能的本質。全球數學專業的學生常見的一種抱怨是數學話題似乎與實際問題沒有什麼相關。我們認為機器學習是促使人們學習數學的直接動力。本書旨在作為構建現代機器學習基礎的大量數學文獻的指南。我們通過直接指出數學概念在基礎機器學習問題中的有用性來促進對數學概念學習的需求。
  • 入門 | 一文介紹機器學習中基本的數學符號
    如果你能了解一些基本的數學符號以及相關的小技巧,那你就在看懂機器學習方法的論文或書籍描述上前進了一大步。在本教程中,你將學到機器學習技術描述中遇到的基本數學符號。在學完整個教程後,你會知道:讓我們開始學習吧!
  • 【機器學習基礎】數學推導+純Python實現機器學習算法21:馬爾可夫鏈蒙特卡洛
    限於篇幅,本文不對MCMC的前置知識進行詳細介紹,關於蒙特卡洛方法和馬爾可夫鏈的大量內容,請各位讀者自行查閱相關材料進行學習。本文聚焦於MCMC方法本身原理和常用實現方法。MCMC簡介     一般來說,對目標概率模型進行隨機抽樣能夠幫助我們得到該分布的近似數值解。但如果隨機變量的多元的,或者所要抽樣的概率密度函數形式是複雜的非標準式時,直接應用蒙特卡洛方法就會很困難。
  • 學習機器學習,一定要會高等數學嗎?
    雖然我不希望學員會喜歡機器學習數學,但我也會盡力為學員提供一些有關如何使旅途更愉快的指導許多機器學習書籍都告訴學員有關線性代數的知識。我認為學員需要的還不止這些。線性代數的豐富經驗是必不可少的—機器學習算法使向量空間和矩陣數學的每一點都緊縮。學員還需要了解大量的統計信息和概率,以及微分和積分算法,尤其是如果學員想更多地參與深度學習的話。