《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 觀點 | 我們該如何學習機器學習中的數(shù)學

觀點 | 我們該如何學習機器學習中的數(shù)學

2018-08-04
關鍵詞: 機器學習 PGM NumPy

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


數(shù)學達到什么水平才可以開始機器學習?人們并不清楚,尤其是那些在校期間沒有研究過數(shù)學或統(tǒng)計學的人。


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


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


關于數(shù)學焦慮


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


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


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


機器學習中的數(shù)學


作為軟件工程的開發(fā)者,我們一般有基礎的線性代數(shù)與矩陣微分學知識,也有一些概率論和編程的基礎。因此以它們?yōu)榛A,我們只需要根據(jù)不同的方向與領域調整知識結構就行。


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


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


數(shù)學與代碼


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


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


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

微信圖片_20180804202209.jpg


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

微信圖片_20180804202236.jpg

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


relu = np.maximum(x, 0)


ReLU 激活函數(shù)的梯度值可以表示為以下,其中 grad 表示為上游梯度:


grad[x < 0] = 0


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


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


構建機器學習產品中的數(shù)學


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


我們可以使用什么樣的降維算法可視化高維用戶數(shù)據(jù)?

方法:主成分分析與 t 分布隨機近鄰嵌入


我們該怎樣校準閾值(例如置信度選擇 0.9 或 0.8)以阻止一些欺騙性的用戶數(shù)據(jù)?

方法:概率校準


將衛(wèi)星數(shù)據(jù)偏向硅谷或阿拉斯加等世界某塊具體地區(qū)的最好方法是什么?

方法:開放性問題,也許可以是人口統(tǒng)計學方法


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


定義你的系統(tǒng)


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


機器學習系統(tǒng)中輸入和輸出都是什么?

我們該如何準備合適的數(shù)據(jù)以擬合系統(tǒng)?

如何構建特征或數(shù)據(jù)以幫助模型提高泛化性能?

如何為我們的任務定義合適的目標函數(shù)?


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


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


學習必要的數(shù)學


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


通常,你可能會發(fā)現(xiàn)在建模和調試過程背后有直觀的數(shù)學原理,例如選擇損失函數(shù)或評估度量,這些數(shù)學原理都會幫助我們實現(xiàn)更優(yōu)的工程決策。


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


機器學習研究中的數(shù)學


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


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


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


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


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


民主化機器學習研究


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


總結


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


不同的問題要求不同的數(shù)學水平,我鼓勵大家首先理清自己的目標。

如果你希望構建產品,那么尋求同伴和研究小組,通過向最終目標的前進而激勵自己學習。

在學界研究中,廣泛的數(shù)學基礎可以幫助貢獻新的基礎構造塊,進而推動領域發(fā)展。

通常,數(shù)學(尤其是研究論文形式的數(shù)學)令人望而生畏,但是「沉醉其中」是學習過程的一大部分。


本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。