前言
深度學習是機器學習的一個特定分支。我們要想充分理解深度學習,必須對機器學習的基本原理有深刻的理解。
大部分機器學習演算法都有超引數(必須在學習演算法外手動設定)。機器學習本質上屬於應用統計學,其更加強調使用計算機對複雜函式進行統計估計,而較少強調圍繞這些函式證明置信區間;因此我們會探討兩種統計學的主要方法: 頻率派估計和貝葉斯推斷。同時,大部分機器學習演算法又可以分成監督學習和無監督學習兩類;本文會介紹這兩類演算法定義,並給出每個類別中一些演算法示例。
本章內容還會介紹如何組合不同的演算法部分,例如最佳化演算法、代價函式、模型和資料 集,來建立一個機器學習演算法。最後,在 5.11 節中,我們描述了一些限制傳統機器學習泛化能力的因素。正是這些挑戰推動了克服這些障礙的深度學習演算法的發展。
大部分深度學習演算法都是基於被稱為隨機梯度下降的演算法求解的。
5.1 學習演算法
機器學習演算法是一種能夠從資料中學習的演算法。這裡所謂的“學習“是指:“如果計算機程式在任務 \(T\) 中的效能(以 \(P\) 衡量)隨著經驗 \(E\) 而提高,則可以說計算機程式從經驗 \(E\) 中學習某類任務 \(T\) 和效能度量 \(P\)。”-來自 Mitchell
(1997
)
經驗 \(E\),任務 \(T\) 和效能度量 \(P\) 的定義範圍非常寬廣,本文不做詳細解釋。
5.1.1 任務 \(T\)
從 “任務” 的相對正式的定義上說,學習過程本身不能算是任務。學習是我們所謂的獲取完成任務的能力。機器學習可以解決很多型別的任務,一些非常常見的機器學習任務列舉如下:
- 分類:在這類任務中,計算機程式需要指定某些輸入屬於 \(k\) 類中的哪一類,例如影像分類中的二分類問題,多分類、單標籤問題、多分類多標籤問題。
- 迴歸:在這類任務中,計算機程式需要對給定輸入預測數值。為了解決這個任務,學習演算法需要輸出函式 \(f : \mathbb{R}^n \to \mathbb{R}\)。除了返回結果的形式不一樣外,這類 問題和分類問題是很像的。
- 機器翻譯
- 結構化輸出
- 異常檢測
- 合成和取樣
- 去噪
- 密度估計或機率質量函式估計
- 輸入缺失分類
- 轉錄
- 缺失值填補
5.1.2 效能度量 \(P\)
為了評估機器學習演算法的能力,我們必須設計其效能的定量度量。通常,效能度量 \(P\) 特定於系統正在執行的任務 \(T\)。
可以理解為不同的任務有不同的效能度量。
對於諸如分類、缺失輸入分類和轉錄任務,我們通常度量模型的準確率(accu- racy
)。準確率是指該模型輸出正確結果的樣本比率。我們也可以透過錯誤率(error rate
)得到相同的資訊。錯誤率是指該模型輸出錯誤結果的樣本比率。
我們使用測試集(test set
)資料來評估系統效能,將其與訓練機器學習系統的訓練集資料分開。
值得注意的是,效能度量的選擇或許看上去簡單且客觀,但是選擇一個與系統理想表現能對應上的效能度量通常是很難的。
5.1.3 經驗 \(E\)
根據學習過程中的不同經驗,機器學習演算法可以大致分類為無監督(unsuper-vised
)演算法和監督(supervised
)演算法。
無監督學習演算法(unsupervised learning algorithm
)訓練含有很多特徵的資料集,然後學習出這個資料集上有用的結構性質。在深度學習中,我們通常要學習生成資料集的整個機率分佈,顯式地,比如密度估計,或是隱式地,比如合成或去噪。 還有一些其他型別的無監督學習任務,例如聚類,將資料集分成相似樣本的集合。
監督學習演算法(supervised learning algorithm
)也訓練含有很多特徵的資料集,但與無監督學習演算法不同的是資料集中的樣本都有一個標籤(label
)或目標(target
)。例如,Iris
資料集註明瞭每個鳶尾花卉樣本屬於什麼品種。監督學習演算法透過研究 Iris
資料集,學習如何根據測量結果將樣本劃分為三個不同品種。
半監督學習演算法中,一部分樣本有監督目標,另外一部分樣本則沒有。在多例項學習中,樣本的整個集合被標記為含有或者不含有該類的樣本,但是集合中單獨的樣本是沒有標記的。
大致說來,無監督學習涉及到觀察隨機向量 \(x\) 的好幾個樣本,試圖顯式或隱式地學習出機率分佈 \(p(x)\),或者是該分佈一些有意思的性質; 而監督學習包含觀察隨機向量 \(x\) 及其相關聯的值或向量 \(y\),然後從 \(x\) 預測 \(y\),通常是估計 \(p(y | x)\)。術語監督學習(supervised learning
)源自這樣一個視角,教員或者老師提供目標 \(y\) 給機器學習系統,指導其應該做什麼。在無監督學習中,沒有教員或者老師,演算法必須學會在沒有指導的情況下理解資料。
無監督學習和監督學習並不是嚴格定義的術語。它們之間界線通常是模糊的。很多機器學習技術可以用於這兩個任務。
儘管無監督學習和監督學習並非完全沒有交集的正式概念,它們確實有助於粗略分類我們研究機器學習演算法時遇到的問題。傳統地,人們將回歸、分類或者結構化輸出問題稱為監督學習。支援其他任務的密度估計通常被稱為無監督學習。
表示資料集的常用方法是設計矩陣(design matrix
)。
5.1.4 示例: 線性迴歸
我們將機器學習演算法定義為,透過經驗以提高計算機程式在某些任務上效能的演算法。這個定義有點抽象。為了使這個定義更具體點,我們展示一個簡單的機器學習示例: 線性迴歸(linear regression
)。
顧名思義,線性迴歸解決迴歸問題。 換句話說,目標是構建一個系統,該系統可以將向量 \(x \in \mathbb{R}\) 作為輸入,並預測標量 \(y \in \mathbb{R}\) 作為輸出。線上性迴歸的情況下,輸出是輸入的線性函式。令 \(\hat{y}\) 表示模型預測值。我們定義輸出為
其中 \(w \in \mathbb{R}^{n}\) 是引數(parameter
)向量。
引數是控制系統行為的值。在這種情況下,\(w_i\) 是係數,會和特徵 \(x_i\) 相乘之 後全部相加起來。我們可以將 \(w\) 看作是一組決定每個特徵如何影響預測的權重 (weight)。
透過上述描述,我們可以定義任務 \(T\) : 透過輸出 \(\hat{y} = w^{⊤}x\) 從 \(x\) 預測 \(y\)。
我們使用測試集(test set
)來評估模型效能如何,將輸入的設計矩 陣記作 \(\textit{X}\)(test),迴歸目標向量記作 \(y\)(test)。
迴歸任務常用的一種模型效能度量方法是計算模型在測試集上的 均方誤差(mean squared error
)。如果 \(\hat{y}\)(test
) 表示模型在測試集上的預測值,那麼均方誤差表示為:
直觀上,當 \(\hat{y}^{(test)}\) = \(y^{(test)}\) 時,我們會發現誤差降為 0。
圖 5.1 展示了線性迴歸演算法的使用示例。
5.2 容量、過擬合和欠擬合
機器學習的挑戰主要在於演算法如何在測試集(先前未觀測的新輸入資料)上表現良好,而不只是在訓練集上表現良好。在測試集(以前未觀察到的輸入)上表現良好的能力稱為泛化(generalization
)。
我們通常透過在與訓練集分開收集的測試集上測量其效能來估計機器學習模型的泛化誤差。
機器學習演算法的兩個主要挑戰是: 欠擬合(underfitting
)和過擬合(overfitting
)。
- 欠擬合是指模型不能在訓練集上獲得足夠低的誤差。
- 而過擬合是指訓練誤差和和測試誤差之間的差距太大。
我們可以透過調整模型的容量(capacity
),來控制模型是否偏向於過擬合或者欠擬合。通俗地講,模型的容量是指其擬合各種函式的能力。容量低的模型可能很難擬合訓練集,容量高的模型可能會過擬合,因為記住了不適用於測試集的訓練集性質。
一種控制訓練演算法容量的方法是選擇假設空間(hypothesis space
),即允許學習演算法選擇作為解決方案的一組函式。例如,線性迴歸演算法將其輸入的所有線性函式的集合作為其假設空間。我們可以推廣線性迴歸以在其假設空間中包含多項式,而不僅僅是線性函式。這樣做就增加模型的容量。
當機器學習演算法的容量適合於所執行任務的複雜度和所提供訓練資料的數量時,演算法效果通常會最佳。容量不足的模型不能解決複雜任務。容量高的模型能夠解決複雜的任務,但是當其容量高於任務所需時,有可能會過擬合。
圖 5.2 展示了上述原理的使用情況。我們比較了線性,二次和 9
次預測器擬合真 實二次函式的效果。
統計學習理論提供了量化模型容量的不同方法。在這些中,最有名的是 Vapnik- Chervonenkis 維度(Vapnik-Chervonenkis dimension, VC)。VC
維度量二元分類 器的容量。VC
維定義為該分類器能夠分類的訓練樣本的最大數目。假設存在 \(m\) 個 不同 \(x\) 點的訓練集,分類器可以任意地標記該 \(m\) 個不同的 \(x\) 點,VC
維被定義為 \(m\) 的最大可能值。
因為可以量化模型的容量,所以使得統計學習理論可以進行量化預測。統計學習理論中最重要的結論闡述了訓練誤差和泛化誤差之間差異的上界隨著模型容量增長而增長,但隨著訓練樣本增多而下降 (Vapnik and Chervonenkis, 1971
; Vapnik, 1982
; Blumer et al., 1989
; Vapnik, 1995
)。這些邊界為機器學習演算法可以有效解決問題提供了理論 驗證,但是它們很少應用於實際中的深度學習演算法。一部分原因是邊界太鬆,另一部分原因是很難確定深度學習演算法的容量。由於有效容量受限於最佳化演算法的能力,所以確定深度學習模型容量的問題特別困難。而且我們對深度學習中涉及的非常普遍的非凸最佳化問題的理論瞭解很少。
雖然更簡單的函式更可能泛化(訓練誤差和測試誤差的差距小),但我們仍然必須選擇一個足夠複雜的假設來實現低訓練誤差。通常,隨著模型容量的增加,訓練誤差會減小,直到它逐漸接近最小可能的誤差值(假設誤差度量具有最小值)。通常,泛化誤差是一個關於模型容量的 U 形曲線函式。如下圖 5.3
所示。
5.2.1 沒有免費午餐定理
機器學習的沒有免費午餐定理(Wolpert,1996
)指出,對所有可能的資料生成分佈進行平均,每個分類演算法在對以前未觀察到的點進行分類時具有相同的錯誤率。換句話說,在某種意義上,沒有任何機器學習演算法普遍優於其他任何演算法。
上述這個結論聽著真的讓人傷感,但慶幸的是,這些結論僅在我們考慮所有可能的資料生成分佈時才成立。如果我們對實際應用中遇到的機率分佈型別做出假設,那麼我們可以設計出在這些分佈上表現良好的學習演算法。
這意味著機器學習研究的目標不是找一個通用學習演算法或是絕對最好的學習演算法。反之,我們的目標是理解什麼樣的分佈與人工智慧獲取經驗的 “真實世界” 相關,什麼樣的學習演算法在我們關注的資料生成分佈上效果最好。
總結:沒有免費午餐定理清楚地闡述了沒有最優的學習演算法,即暗示我們必須在特定任務上設計效能良好的機器學習演算法。
5.2.2 正則化
演算法的效果不僅很大程度上受影響於假設空間的函式數量,也取決於這些函式的具體形式。
在假設空間中,相比於某一個學習演算法,我們可能更偏好另一個學習演算法。這 意味著兩個函式都是符合條件的,但是我們更偏好其中一個。只有非偏好函式比偏好函式在訓練資料集上效果明顯好很多時,我們才會考慮非偏好函式。
我們可以加入權重衰減(weight decay
)來修改線性迴歸的訓練標準。新的代價函式 \(J(w)\) 定義如下:
\(\lambda\) 是超引數,需提前設定,其控制我們對較小權重的偏好強度。當 \(\lambda = 0\),我們沒有任何偏好。\(\lambda\) 越大,則權重越小。最小化 \(J(w)\) 會導致權重的選擇在擬合訓練資料和較小權重之間進行權衡。
簡單來說,就是給代價函式新增正則化項(regularizer)
的懲罰,即正則化一個學習函式為 \(f(x;\theta)\) 的模型。上述權重衰減的例子中,正則化項是 \(\Omega(w) = \lambda w^{⊤}w\)。 在後續的第七章,我們將學習其他的正則化項。
我們將正則化定義為“對學習演算法的修改-旨在減少泛化誤差而不是訓練誤差”。正則化是機器學習領域的中心問題之一,只有最佳化能夠與其重要性相媲。
和沒有最優的學習演算法一樣,特別地,也沒有最優的正則化形式。反之,我們必須挑選一個非常適合於我們所要解決的任務的正則形式。
5.3 超引數和驗證集
超引數的值不是透過學習演算法本身學習出來的,而是需要演算法定義者手動指定的。
5.3.1 驗證集的作用
通常,80%
的訓練資料用於訓練,20%
用於驗證。驗證集是用於估計訓練中或訓練後的泛化誤差,從而更新超引數。
5.3.2 交叉驗證
一個小規模的測試集意味著平均測試誤差估計的統計不確定性,使得很難判斷演算法 A 是否比演算法 B 在給定的任務上做得更好。解決辦法是基於在原始資料上隨機取樣或分離出的不同資料集上重複訓練和測試,最常見的就是 \(k\)-折交叉驗證,即將資料集分成 \(k\) 個 不重合的子集。測試誤差可以估計為 \(k\) 次計算後的平均測試誤差。在第 \(i\) 次測試時, 資料的第 \(i\) 個子集用於測試集,其他的資料用於訓練集。演算法過程如下所示。
k 折交叉驗證雖然一定程度上可以解決小資料集上測試誤差的不確定性問題,但代價則是增加了計算量。
5.4 估計、偏差和方差
統計領域為我們提供了很多工具來實現機器學習目標,不僅可以解決訓練集上 的任務,還可以泛化。基本的概念,例如引數估計、偏差和方差,對於正式地刻畫泛化、欠擬合和過擬合都非常有幫助。
5.4.1 點估計
略
5.4.2 偏差
5.4.4 權衡偏差和方差以最小化均方誤差
偏差和方差度量著估計量的兩個不同誤差來源。偏差度量著偏離真實函式或引數的誤差期望。而方差度量著資料上任意特定取樣可能導致的估計期望的偏差。
偏差和方差的關係和機器學習容量、欠擬合和過擬合的概念緊密相聯。用 MSE 度量泛化誤差(偏差和方差對於泛化誤差都是有意義的)時,增加容量會增加方差,降低偏差。如圖 5.6 所示,我們再次在關於容量的函式中,看到泛化誤差的 U 形曲線。
參考資料
《深度學習》