線性代數與張量?這本開放書籍幫你掃清通往 ML 的數學絆腳石
數學是機器學習的基礎。斯坦福大學教授 Stephen Boyd 聯合加州大學洛杉磯分校的 Lieven Vandenberghe 教授出版了一本基礎數學書籍,從向量到最小二乘法,分三部分進行講解並配以輔助資料。此外,這本書也是斯坦福 EE103 課程、UCLA EE133A 課程的教材,由劍橋大學出版社出版(允許網路公開)。
專案地址:https://web.stanford.edu/~boyd/vmls/
這一本書的資料還是比較齊全的,除了本身 473 頁的教材,還有另一本 178 頁的對應程式碼講解。當然如果讀者只需要瞭解數學部分的話,程式碼部分是不需要了解的。但是如果比較關注線性代數的應用,可能就需要閱讀這些基礎程式碼,並順便學一學 Julia 語言了。最後,這一本書還提供了對應的課程 PPT,讀者也可以把它們作為輔助資料。
書籍簡介
這本書旨在介紹向量、矩陣和最小二乘方法等應用線性代數的基礎內容,它的目標是為只有很少或根本沒有線性代數基礎的初學者提供入門方法,包括線性代數的基本思想以及在資料科學和機器學習等領域的應用方法。
不過讀者還是需要熟悉一般的數學符號,並且在一些地方也會用到微積分,但它們並不起關鍵作用,因此基本上以前學過高數就差不多了。這本書包含了很多傳統概率論與統計學所討論的話題,例如使用數學模型擬合數據等,但讀者不一定需要這一方面的背景知識。
這本書比一般的應用線性代數課本要有更少的數學成分,只會詳細介紹基本線性代數、線性獨立性等理論概念,以及 QR因式分解這一計算工具。而這本書討論的大多數機器學習等方面的應用只會使用一種方法,即最小二乘法及其擴充套件。在某種意義下,該書更強調的是應用,即依賴於少量基本數學概念和方法,而覆蓋大多數應用。但是這本書所呈現的數學是完整的,因為它會仔細證明每一個數學宣告。然而,與大多數介紹性的線性代數課本相比,這本書描述了許多實際應用。包括一些通常被認為是高階主題的應用,如文件分類、狀態估計和投資組合優化等。
這本書並不需要任何計算機程式設計的知識,因此可以作為傳統的教學課程,我們只需要閱讀對應章節並完成一些不涉及數值計算的練習題就行了。然而,這種方法會並不能使我們完全理解這本書,同時也得不到實際鍛鍊,例如我們可以使用這本書的觀點與方法構建一個基於資料的預測模型、增強影象資料或優化投資組合等。隨著計算力的不斷增長,以及 NumPy 等高效矩陣運算庫的發展,這本書中的描述的方法可以輕鬆地應用到實踐中。因此讀者還可以使用 Python 等程式語言練習不同的專案而補充學習資源,只有使用真實資料搭建應用才能真切地理解理論思想。本書提供了一些需要數值計算的練習題,且資料檔案與程式語言的資源都可線上獲得。
這本書主要分為三部分。第一部分介紹了向量及各種向量運算和函式,例如加法、向量內積、距離和角度等。本書還展示瞭如何使用向量表示文件中的詞數、時間序列、目標屬性、產品規格、音訊資料和影象等。第二部分如同前一部分重點關注矩陣的概念與應用,包括矩陣的求逆和解線性方程等。第三部分介紹了最小二乘法,它不僅展示瞭如何簡單而自然地近似求解一個超定方程組,同時還有一些可應用到很多方法的最小二乘擴充套件知識。
該書還可用於自學,並輔以線上提供的資料,例如下面這份 470 頁的 PPT。
地址:https://web.stanford.edu/~boyd/vmls/vmls-slides.pdf
按照設計,本書的進度會逐漸加快,也就是說第一部分和第二部分有許多細節和簡單的例子,第三部分有更多高階的例子和應用。對於只有很少線性代數基礎或根本沒有的讀者而言,課程可以側重於第一部分和第二部分,並且僅簡單瞭解一些更高階的應用。而熟悉背景知識的讀者可以快速過一遍前面兩部分,並將重點放在最後的應用部分上。
除了線性代數等數學基礎,這本書還介紹了很多機器學習應用,包括比較流行的 K 均值聚類等。而這些機器學習演算法主要都介紹了數學表現形式和偽演算法,並不涉及具體的程式碼,讀者可另外檢視這本書的配套程式碼實現。這本書提供的了基於 Julia 語言的配套程式碼!
下面我們將簡要介紹聚類這一方面課本內容與對應的 Julia 程式碼。聚類也就是說將同類的無監督資料聚在一起,它的目標函式可以簡單地定義為各樣本到對應聚類中心的距離和。如果這個距離和非常大,那麼聚類的效果就不好,我們會希望通過最優化演算法最小化這個距離。在這本書中,距離可以定義為:
而 K 均值聚類會更形象地利用影象展示聚類效果,下圖展示了 K 均值聚類迭代一次的更新過程:
而這一更新過程會有對應的為程式碼:
除了這些基礎內容外,這本書還會展示很多視覺化內容以幫助理解理論知識,例如展示了最終聚類結果的圖 4.4 和展示了損失函式下降趨勢的圖 4.5:
當然,K 均值聚類還提供了對應 Julia 實現,如下展示了實現該演算法的程式碼,讀者在學習這本書的同時還能順便學學 Julia 語言。
function kmeans(X, k; maxiters = 100, tol = 1e-5) if ndims(X) == 2 X = [X[:,i] for i in 1:size(X,2)] end; N = length(X) n = length(X[1]) distances = zeros(N) reps = [zeros(n) for j=1:k] assignment = [ rand(1:k) for i in 1:N ] Jprevious = Inf for iter = 1:maxiters for j = 1:k group = [i for i=1:N if assignment[i] == j] reps[j] = sum(X[group]) / length(group); end; for i = 1:N (distances[i], assignment[i]) = findmin([norm(X[i] - reps[j]) for j = 1:k]) end; J = norm(distances)^2 /N println("Iteration ", iter, ": Jclust = ", J, ".") if iter > 1 && abs(J - Jprevious) < tol * J return assignment, reps end Jprevious = J end end
最後,這本書的對應程式碼和資料都可以在 GitHub 中找到:https://github.com/VMLS-book。
ofollow,noindex" target="_blank">入門 數學 線性代數 書籍
相關資料
Factorization
在數學中,把一個數學因子(比如數字,多項式,或矩陣)分解其他數學因子的乘積。比如:整數15可以分解成兩個質數3和5的乘積,一個多項式x^2 -4 可被因式分解為(x+2)(x-2)。
來源: Wikipedia
Machine Learning
機器學習是人工智慧的一個分支,是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、計算複雜性理論等多門學科。機器學習理論主要是設計和分析一些讓計算機可以自動“學習”的演算法。因為學習演算法中涉及了大量的統計學理論,機器學習與推斷統計學聯絡尤為密切,也被稱為統計學習理論。演算法設計方面,機器學習理論關注可以實現的,行之有效的學習演算法。
來源:Mitchell, T. (1997). Machine Learning. McGraw Hill.
Loss function
在數學優化,統計學,計量經濟學,決策理論,機器學習和計算神經科學等領域,損失函式或成本函式是將一或多個變數的一個事件或值對映為可以直觀地表示某種與之相關“成本”的實數的函式。
來源: Wikipedia
Objective function
目標函式f(x)就是用設計變數來表示的所追求的目標形式,所以目標函式就是設計變數的函式,是一個標量。從工程意義講,目標函式是系統的效能標準,比如,一個結構的最輕重量、最低造價、最合理形式;一件產品的最短生產時間、最小能量消耗;一個實驗的最佳配方等等,建立目標函式的過程就是尋找設計變數與目標的關係的過程,目標函式和設計變數的關係可用曲線、曲面或超曲面表示。
來源: 百度百科
Least squares
最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。 利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小。 “最小二乘法”是對過度確定系統,即其中存在比未知數更多的方程組,以迴歸分析求得近似解的標準方法。在這整個解決方案中,最小二乘法演算為每一方程式的結果中,將殘差平方和的總和最小化。
來源: 維基百科