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