機器學習必備的數學基礎有哪些?
大家好,我是王天一。我是北京郵電大學博士畢業,目前在貴州大學大資料資訊工程學院任教,同時也是咱們極客時間《人工智慧基礎課》這個專欄的作者。
今天我們分享的內容,主要是關於機器學習中的基礎數學,包括以下四個部分。
第一,我們關注的是機器學習當中會用到哪些基礎數學。
第二,這些數學在機器學習,或者說在人工智慧這個大環境下都能起到一些什麼樣的作用。
第三,有了這個學科,有了數學,分析了它的作用之後,我們需要把它掌握到一個什麼樣的程度。
最後,簡單地介紹一下,如何在短時間內,能儘快高效率地掌握。
1機器學習會用到哪些數學基礎第一部分,我們先來看一看機器學習需要哪些數學的基礎。我們可以先引用一個專家的定義。這個專家是來自美國華盛頓大學的佩羅·多明戈斯。這也是人工智慧領域的一個老兵。他對於機器學習給出了這樣一個定義,機器學習是由三個部分組成,分別是表示、評價,還有優化。
在表示這一步當中,我們需要建立起資料,還有實際問題的抽象模型。所以,這裡面就包括了兩個方面,一方面我們要對要解決的這個實際的問題進行抽象化處理。比方說我們要設計一個演算法,判斷一個郵件它到底是不是一封垃圾郵件,那麼得到的結果無外乎兩種,要麼是,要麼不是。這樣一個問題如果對它做抽象,實際上就是個二分分類問題。是,我們可以把它定義成 0,不是,可以把它定義成 1。所以,這個問題最終要解決的是什麼呢?輸出一個 0 或者 1 的結果。當然把 0 和 1 的意義調過來也可以,用 1 代表是垃圾郵件,0 代表不是,也是可以的。所以,在表示的過程當中,我們要解決的問題就是把我們面臨的真實世界當中的一些物理問題給它抽象化,抽象成一個數學問題。抽象出來這個數學問題之後,我們要進一步去解決它,還要對這個資料進行表示。
對於問題抽象完了以後,我們還要對資料進行抽象。在判定這個郵件到底是不是垃圾郵件的時候,我們要怎麼判斷呢?要根據它的特徵進行判斷,看一看這個郵件裡的關健字是否有關於推銷的,或者關於產品的一些關鍵字。這些特徵,這些關鍵字,我們就要把它表示成一個特徵,表示成一個向量,或者表示成其他的形式。表示成向量也好,表示成其他形式也好,都是對這個資料做出了抽象。
在表示階段,我們需要建立的是資料,還有問題的抽象模型。把這個模型建立出來,然後去尋找合理的演算法。
K- 近鄰演算法 。在機器學習當中,我們常見的有 K- 近鄰演算法。K- 近鄰演算法在我們的專欄中沒有提到,因為它太簡單了。它實際上就是,找到一個樣本點和這個樣本點最近的幾個鄰居,最近的這 K 個鄰居。按照少數服從多數的原則,對它進行分類,這就是 K- 近鄰演算法。
迴歸模型 。除此之外,還有線性迴歸,這樣的統計學習方法。我建立一個線性迴歸模型,當然,對二分類我們可以建立邏輯迴歸模型。
決策樹 。還有像決策樹這樣的方法。決策樹它不依賴於資料,它完全是自頂向下的一個設計。線性迴歸也好,邏輯迴歸也好,它是從資料反過來去推導模型,而決策樹直接去用模型判定資料,兩個方向不太一樣。
SVM 支援向量機 。最後,還有 SVM 支援向量機這樣的純數學方法。所以說表示的部分,我們需要把問題和資料進行抽象,這個時候我們就要用到抽象的工具。
給定了模型之後,我們如何評價這個模型的好壞呢?這個時候就需要設定一個目標函式,來評價這個模型的性質。
設定目標函式
目標函式的選取也可以有多種形式。像對於我們說到的垃圾郵件這種問題,我們可以定義一個錯誤率。比方說一個郵件它原本不是垃圾郵件,但是我這個演算法誤判成了垃圾郵件,這就是一個錯例。所以呢,錯誤率在分類問題當中是個常用的指標,或者說常用的目標函式。
最小均方誤差和最大後驗概率
那麼在迴歸當中呢,我們會使用最小均方誤差這樣一個常用目標函式,尤其是線上性迴歸裡。除此之外呢,還有最大後驗概率,一些其他的指標。
優化有了目標函式以後,我們要求解這個目標函式在模型之下的一個最優解,這個模型能夠獲取到的最小錯誤率,或者最小均方誤差是多少呢?我們要求出一個特定的值。沒有這個值的話,你如何評價不同的模型它到底是好是壞呢?所以說優化這個步驟它的作用是求解目標函式在模型之下的一個最優解,看看這個模型在解決這個問題的時候,最好能達到什麼樣的程度。
總結來說,多明戈斯教授總結到的機器學習的三個步驟,包括了表示、評價、優化這樣三個步驟,在這三個步驟當中我們會用到不同的數學公式來分別解決這三個問題。
三種數學工具 線性代數在這三個步驟中,應用了三種不同的工具。在表示這個步驟當中,我們主要使用的工具是什麼呢?就是線性代數。線性代數呢,我們在這個專欄裡面也提到,它起到的一個最主要的作用就是把具體的事物轉化成抽象的數學模型。不管你的世界當中有多麼紛繁複雜,我們都可以把它轉化成一個向量,或者一個矩陣的形式。這就是線性代數最主要的作用。
所以,線上性代數解決表示這個問題的過程中,我們主要包括這樣兩個部分,一方面是線性空間理論,也就是我們說的向量、矩陣、變換這樣一些問題。第二個是矩陣分析。給定一個矩陣,我們可以對它做所謂的 SVD(singular value decomposition)分解,也就是做奇異值分解,或者是做其他的一些分析。這樣兩個部分共同構成了我們機器學習當中所需要的線性代數,當然了,這兩者也是各有側重。線性空間的話,我們主要應用在一些解決理論問題當中,矩陣分析在理論當中有使用,在實踐當中也有一些使用。
概率統計我們說到,線性代數起作用是在表示的過程當中。在評價過程中,我們需要使用到概率統計。概率統計包括了兩個方面,一方面是數理統計,另外一方面是概率論。
數理統計好理解,我們機器學習當中應用的很多模型都是來源於數理統計。比方說最簡單的線性迴歸,還有邏輯迴歸,它實際上都是來源於統計學。在具體地給定了目標函式之後,我們在實際地去評價這個目標函式的時候,我們會用到一些概率論。比方說給定了一個分佈,我要求解這個目標函式的期望值。在平均意義上,這個目標函式能達到什麼程度呢?這個時候就需要使用到概率論。所以說在評價這個過程中,我們會主要應用到概率統計的一些知識。
實際上對於數理統計來說,我們在評價模型的時候,不只關注的是一個目標函式,我們可能還關注一些它的統計特性。比如說它的置信度,或者是其他的一些指標。你這個模型建立起來,它的可信性程度到底有多大,這些在早期的機器學習演算法當中也是需要考慮的。當然隨著神經網路,隨著深度學習的興起,這部分內容實際上漸漸地衰落,或者漸漸地被忽略。你在神經網路當中可能只需要達到一個這個好的目標函式,好的指標就行,至於說它的置信度,這些我們不去考慮。
所以說,這也是深度學習不太受學數學,或者說學統計學的人待見的一個原因。因為統計學強調什麼呢?強調可解釋性,你這個模型能夠達到什麼樣的指標,我們能把它清清楚楚地講明白,為什麼能夠達到這樣的指標,它的原理在哪?它背後的根據在哪?我給定一個分佈,假如說高斯分佈,那麼再給定一個模型,我就可以通過嚴謹而簡潔的這個數學推導,把這個結果以公式的形式給它呈現出來,這個看起來就很高大上,或者說很清楚。但神經網路和深度學習,現在還達不到這樣可解釋的程度。所以說現在也有人批評,說深度學習是鍊金術,主要的原因在這裡。我只能夠通過調引數調出一個比較好的結果,但是到底這個結果為什麼會出現?哪些因素會影響到它?可能還不是那麼清晰。所以呢,關於概率統計,我們主要應用在評價這個過程中。
最優化理論關於優化,就不用說了,我們肯定用到的是最優化理論。在最優化理論當中,主要的研究方向是凸優化。
凸優化當然它有些限制,但它的好處是什麼呢?能夠簡化這個問題的解。因為在優化當中我們都知道,我們要求的是一個最大值,或者是最小值,但實際當中我們可能會遇到一些區域性的極大值,區域性的極小值,還有鞍點這樣的點。凸優化可以避免這個問題。在凸優化當中,極大值就是最大值,極小值也就是最小值。
但在實際當中,尤其是引入了神經網路還有深度學習之後,凸優化的應用範圍越來越窄,很多情況下它不再適用,所以這裡面我們主要用到的是無約束優化。我在整個範圍之內,我對引數,對輸入並沒有限定。在整個的輸入範圍內去求解,不設定額外的約束條件。同時,在神經網路當中應用最廣的一個演算法,一個優化方法,就是反向傳播。
三種數學工具和三個步驟並非一一對應我們今天談論這個機器學習當中,用到的基礎數學都包括哪些呢?包括這三種,線性代數,概率統計,還有最優化理論。這是我們在機器學習當中用到的最基礎的一些數學工具。如果大概做一個分類,分別對應到我們機器學習當中,表示、評價,還有優化這樣三個步驟。
當然,這種應用它也並不是說一一對應的關係。在表示當中我只用到線性代數,概率統計一點兒都不涉及,同樣地,我在評價的時候,線性代數也不涉及,不是這樣,都會有一個交叉的過程,但是在每個步驟當中應用到的主要工具還是有所區別。
高等數學是數學工具的基礎當然,在數學工具當中,我們並沒有涉及到高等數學,高等數學我們就把它當作一個基礎,一個基礎中的基礎。不光是人工智慧,或者說機器學習,只要有數學參與的地方,我們都需要有高等數學的這個基礎。那麼具體到機器學習當中,我們在高等數學這一塊兒用到的比較多的,可能包括求導,微分,這樣的一些內容。當然還有這個積分,我們在求解這個目標函式的期望值的時候可能也會遇到。
所以到這呢,我們就說,我們介紹了機器學習當中用到了哪些數學。主要就是這三塊,線性代數,概率統計,還有最優化,那麼任何複雜的演算法實際上都是由這三者的結合疊加所構造出來的,那麼這三者在機器學習當中他們起到的作用分別是什麼呢?我們可以具體地來看一看。
2三種數學工具在機器學習中的作用線性代數 將具體事物抽象為數學物件對於線性代數來說,我們可以對它做一個簡單的定義。所謂線性代數是什麼?就是數量和結構的一個組合,也就是說,線性代數等於數量加上結構。本身數量呢,它是一個單獨的數。對於單個的數我們沒有結構可言,對於單個的物件沒有結構可言。但是當我們把一組數,或者一堆數排列到一塊兒的時候,這個排列不是隨機的排列,而是有一定的順序進行排列的時候,這個時候,數目之間的順序或者數量之間的順序就形成了一種結構,這個結構就可以蘊含一定的資訊,能夠供我們去使用。
除了順序之外,結構還有另外一層含義。我可以對數量定義一些運算。線上性空間裡面我們提到,基本的運算包括什麼呢?包括加法,包括數乘,這樣一些運算。有了運算之後,我們就可以對不同的物件,單個的數目放在一塊兒,按照一定的順序排列在一起,我們可以把它組成一個向量,組成這樣一個物件。那麼有了加法,數乘這樣一些運算之後,你就可以對這個物件再來進行一些操作。這樣的話,就實現了把具體事物給它抽象成數學物件,這樣的一個過程。這就是線性代數最主要的一個作用。當然不光是在機器學習裡面,在其他應用到線性代數的場合也是一樣:把具體的事物抽象成為數學物件。
提升大規模運算的效率當然除此之外呢,它還有另外一個優勢,線性代數還有另外一個作用,就是能夠提升大規模運算的效率。因為在現代的機器學習當中,我們要處理的資料都是海量的資料,資料的數量是呈指數形式的增長。我們要處理的資料越來越多,如果只是簡單地說,用最傳統的方法,用一個一個的 for 迴圈去處理高維的矩陣,它的效率肯定是相當低下。有了線性代數之後,我們可以把矩陣的運算引入到機器學習的演算法當中,通過一些額外的庫,或者一些額外的軟體包,提升大規模運算的效率。這裡面最直觀的一個例子就是 MATLAB 軟體。MATLAB 軟體本身名字叫矩陣實驗室。它的特點,或者說它的賣點就在於,對矩陣,或者說對向量它操作的高效率。
所以說呢,線性代數,我們把它總結一下,它就等於數量和結構的組合。它的作用,一方面可以把具體的事物抽象成數學物件,另外一方面,可以提升大規模運算的效率。
概率統計 利用資料學習模型如果我們說,線性代數可以看成是數量還有結構的組合的話,那麼概率統計就可以看成是模型還有資料的組合。
那麼模型和資料組合在一塊,實際上是雙向的處理。我們機器學習有學習的階段,我們要利用這個資料去訓練這個模型,這個階段,我們是用資料去學習這個模型。在模型裡面,我們就可以去選擇。有那麼多的模型,像我們剛才說到的,有 K- 近鄰的模型,有迴歸模型,有決策樹,還有支援向量機,這樣不同的模型。我訓練的任務就是用資料來學習這些模型,來確定這個模型的引數,最終得到一個確定的模型。這就可以看成什麼呢?看成是在給定資料的情況下,我來求解這個引數,它的條件概率。給定的資料,如果有一部分引數的條件概率是最大的,那麼就選擇這部分引數,作為我這個模型的引數。實際上,訓練過程解決的就是這樣一個問題。
當然具體來說,包括生成模型,包括判別模型,那麼生成模型我們求解的是輸入輸出的一個聯合概率分佈,那麼判別模型是一個條件概率分佈。但不管怎麼樣,很多情況下,我們關注的目標都是分佈,那麼利用資料進行訓練的過程也就是學習這個分佈的過程。
利用模型推斷資料接下來呢,在訓練結束之後,我們要這個模型要來幹什麼呢?要進行預測,也就是說,利用這個模型來進行資料的推斷。給定這個模型,我給到一個輸入,我輸入可能是一個特徵,一些特徵的組合,形成一個向量。我把這個輸入的向量代入到模型當中,就可以求出一個結果,當然也可能是多個結果。我取這個概率最大的結果作為一個輸出,這個過程就是反過來利用模型去推斷資料的一個過程。所以我們說,概率統計等於模型和資料的一個組合,這個組合是雙向的。在學習階段,我們利用資料來訓練模型,在預測階段,我們利用模型反過來去推斷這個資料。
所以,在概率統計這一塊,我們關注的是模型的使用,還有概率的求解。當然兩者不是完全區別開的,是相互融合的。在建立模型的時候,我們會利用到一些先驗概率分佈。在求解目標函式的時候,我們也會涉及求解數學期望這樣一些操作。這裡面我們也給出了一個例項,就是迴歸分析還有機器學習方法的比較。
最優化理論概率統計呢,我們可以把它解釋成這個模型和資料的一個組合,那麼最優化的話,就可以看成是目標和約束的一個組合。在這裡面,我們最優化的目標是什麼呢?是求解,讓這個期望函式,或者讓目標函式取到最值的解,手段是什麼呢?就是通過調整模型的引數來實現,為什麼要調整這個模型的引數?因為很多時候,我們想求解到這個解析解是求不出來的。在很多複雜的問題當中呢,這個解析解是沒有辦法求出來的。對於線性迴歸來說,我們可以求解出 Beta 的一個表示式,那樣一個矩陣相乘,求逆,再進行相乘的一個表示式。很多時候,這個解析解我們求不到,求不到怎麼辦?就只能一點一點去試,一步一步去找,我要的最小值或者最大值,它到底在哪?這個時候就會用到我們最優化的方法,包括梯度下降,包括其他的一些方法。
在使用這些方法的時候,我們要注意調整一些引數。一方面是模型的引數,另外一方面還有所謂的超引數。
調整模型引數,一方面,它的作用讓我們找到真正的最小值,或者找到真正的最大值。另外一方面,避免在尋找的過程中把最小值,或者最大值,本來你是能找到的,但是這個超引數沒有設計好,比如說我的步長、速率沒有設計好,把這個點錯過,要避免這樣一些問題。所以說對於最優化而言,我們可以把它看成是目標,還有引數的一個組合,通過這兩者來找到我們想要的合適的點。
3需要掌握到什麼程度?剛才呢,我們結合這些例項,解釋了線性代數,概率論,概率學統計,還有最優化,在機器學習當中的一些作用。接下來我們來看一看,需要掌握到什麼程度。需要掌握到什麼程度呢?實際上,應該說是一個見仁見智的問題。當然理想的情況肯定是掌握得越多越好,最好你能把所有的數學都掌握到,不光是我們提到的這些,甚至更加高階的你都會,這是最好的效果。當然在實際當中,我們不可能,沒有那麼多精力去專門地鑽研到這個數學當中,所以說這種理想的情況也是不存在的。那麼具體來說,掌握到什麼程度呢?
機器學習的三重境界 能使用:利用已知方法解決問題我在這裡列出來了三個階段。第一個階段呢,我管它叫做能使用。也就是說,給定一個模型,我能夠用它來根據給定的輸入來求解輸出,也就是利用已知的方法來解決問題。那麼這個已知的方法,我可以把它看成一個黑箱子,我不關注這個過程,不關注這個方法是如何解決問題,只要能夠解決問題就行。可能已經有了一個演算法,那麼我只需要對資料做一些處理,把這個資料送入到演算法當中,得到一個輸出,我能看明白這個輸出是怎麼回事,這就可以。這是能使用的階段,我只是做一個演算法的使用者,我能把它用清楚就夠了。
能看懂:理解已知方法的工作原理如果在能使用的基礎上再進一步,那麼就是能看懂,我不光用這個已知的方法來解決問題,同時我還能夠理解這個方法的工作原理。知其然,還能知其所以然。能使用就是知其然,能看懂就是知其所以然。那麼這個方法可能背後有一些數學推導,會涉及到一些概率,最優化,還有線性代數的一些使用。那麼這個能看懂,就要求你具備相關的知識,能夠把這個推導的過程給它順下來,知道這個方法具體是怎麼來工作。
能設計:根據問題特徵開發新方法如果在這個能看懂的基礎上,再進一步的話,我們可以把它叫做能設計。我把已知方法理解之後,我還可以根據我的問題,根據我自己的實際問題的特點,來開發一些新的方法。要麼呢,可以對已知的方法我來做一些改進,使它更符合我自己的一個待解決問題的方法,或者說我開發一個完全新的方法,就是重新推導,推倒重來,直接設計一個新的方法。那麼很顯然,這個呢,對於數學功底就有更深層次的一個要求。
所以我們說對於數學的掌握程度包括這樣的三個層次,能使用,能看懂,還能設計。那麼具體在實際當中,你需要做到哪個程度,那麼就要根據自己的實際情況來做出判斷。
如何儘快、高效率掌握數學知識? 掌握核心概念在這方面,我給出的建議是,一方面是,我們要握核心概念,線上性代數當中核心概念是什麼?就是線性空間,向量矩陣以及對於向量矩陣的度量,包括範數、包括內積這些,這些就是它的核心概念。那麼在概率統計當中,頻率學派,還有貝葉斯學派,他們兩者之間的區別是一個核心概念,同時呢,像期望方差這些指標,還有條件概率,這樣的一些概念,條件概率聯合概率這樣一些概念也是核心概念。那麼在最優化當中,這些演算法,這個梯度下降法,或者牛頓法,這就是核心概念。
以點帶面在時間有限的情況下,我們一定要把有限的精力集中在重要的知識上。先把這些核心概念搞清楚,再通過這些核心的概念,來以點代面,從這些關鍵的問題去鋪開,慢慢地去接觸其他的問題。
問題導向最後一點呢,我覺得,在學習的時候,我們可以以問題為導向,就是結合著我們實際的需求,結合我們實際的問題,來決定我們去學什麼。這個呢,和我們前面所說到的這個掌握到什麼程度也是一樣,掌握到什麼程度也是相通的。因為畢竟我們學習,機器學習,學習機器學習當中的數學都是為了解決問題。如果不能解決問題的話,你學到的這個東西的價值就沒有能夠解決問題的這個知識的價值大。當然我們也不能說一點價值都沒有。在學習的時候,大家可以嘗試著以問題為導向。帶著問題去探索這些知識,帶著問題去學習知識,可能你會發現,這樣會得到更高的效率。
4推薦書目推薦書目在我們專欄裡面也有相應的推送。在基礎數學,基礎學習,神經網路,還有深度學習,每個模組我們結束之後都會推薦一些相關的書籍。但是在這裡,我想要跟大家推薦的兩本書,都是關於機器學習,或者說都是關於統計學習,一本叫 An Introduction Statistical to Learning ,另一本叫 The Elements of Statistical Learning 。
兩本書的作者是同一撥人,有兩個共同的作者。它們講述的都是統計學習,或者機器學習的方法。其中前一本可以看成是後一本的簡化版。它更通俗、更簡單一些,後面這個稍微有些難。為什麼推薦這兩本呢?因為這兩本,它更深入的會挖掘方法背後的一些數學含義。我們能夠看到的教科書,它主要的作用是把這個方法講清楚。來了個方法,比如說線性迴歸,怎麼推導,怎麼區算,一大堆公式寫出來,那麼給出一個推導的結果,或者說決策樹,或者其他的演算法都一樣,可能到這裡就結束了,我的任務就完成了。
這兩本書,它不光是介紹方法推導,它可能更看中統計學上的意義。我們為什麼要這麼做,我們設計這個方法在統計學上有什麼意義。因為作者都是統計學家,有幾十年的積澱,有幾十年的研究積澱,所以,相比於其他市面上教科書,我認為他們兩個 insight 可能更多一些。當然了,大家看起來,也會有相應的難度,可能並不是像我們平時的教科書那麼簡單。這些書,我們一遍兩遍是讀不完的,如果真正要從事人工智慧、機器學習這方面的工作的話,可能要多讀幾遍,每讀一遍也會有不同的收穫。