前言
深度學(xué)習(xí)是機器學(xué)習(xí)的一個特定分支。我們要想充分理解深度學(xué)習(xí),必須對機器學(xué)習(xí)的基本原理有深刻的理解。
大部分機器學(xué)習(xí)算法都有超參數(shù)(必須在學(xué)習(xí)算法外手動設(shè)定)。機器學(xué)習(xí)本質(zhì)上屬于應(yīng)用統(tǒng)計學(xué),其更加強調(diào)使用計算機對復(fù)雜函數(shù)進(jìn)行統(tǒng)計估計,而較少強調(diào)圍繞這些函數(shù)證明置信區(qū)間;因此我們會探討兩種統(tǒng)計學(xué)的主要方法: 頻率派估計和貝葉斯推斷。同時,大部分機器學(xué)習(xí)算法又可以分成監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)兩類;本文會介紹這兩類算法定義,并給出每個類別中一些算法示例。
本章內(nèi)容還會介紹如何組合不同的算法部分,例如優(yōu)化算法、代價函數(shù)、模型和數(shù)據(jù) 集,來建立一個機器學(xué)習(xí)算法。最后,在 5.11 節(jié)中,我們描述了一些限制傳統(tǒng)機器學(xué)習(xí)泛化能力的因素。正是這些挑戰(zhàn)推動了克服這些障礙的深度學(xué)習(xí)算法的發(fā)展。
大部分深度學(xué)習(xí)算法都是基于被稱為隨機梯度下降的算法求解的。
5.1 學(xué)習(xí)算法
機器學(xué)習(xí)算法是一種能夠從數(shù)據(jù)中學(xué)習(xí)的算法。這里所謂的“學(xué)習(xí)“是指:“如果計算機程序在任務(wù) 中的性能(以
衡量)隨著經(jīng)驗
而提高,則可以說計算機程序從經(jīng)驗
中學(xué)習(xí)某類任務(wù)
和性能度量
。”-來自
Mitchell (1997)
經(jīng)驗
,任務(wù)
和性能度量
的定義范圍非常寬廣,本文不做詳細(xì)解釋。
5.1.1 任務(wù)
從 “任務(wù)” 的相對正式的定義上說,學(xué)習(xí)過程本身不能算是任務(wù)。學(xué)習(xí)是我們所謂的獲取完成任務(wù)的能力。機器學(xué)習(xí)可以解決很多類型的任務(wù),一些非常常見的機器學(xué)習(xí)任務(wù)列舉如下:
-
分類:在這類任務(wù)中,計算機程序需要指定某些輸入屬于
類中的哪一類,例如圖像分類中的二分類問題,多分類、單標(biāo)簽問題、多分類多標(biāo)簽問題。
-
回歸:在這類任務(wù)中,計算機程序需要對給定輸入預(yù)測數(shù)值。為了解決這個任務(wù),學(xué)習(xí)算法需要輸出函數(shù)
。除了返回結(jié)果的形式不一樣外,這類 問題和分類問題是很像的。
- 機器翻譯
- 結(jié)構(gòu)化輸出
- 異常檢測
- 合成和采樣
- 去噪
- 密度估計或概率質(zhì)量函數(shù)估計
- 輸入缺失分類
- 轉(zhuǎn)錄
- 缺失值填補
5.1.2 性能度量
為了評估機器學(xué)習(xí)算法的能力,我們必須設(shè)計其性能的定量度量。通常,性能度量 特定于系統(tǒng)正在執(zhí)行的任務(wù)
。
可以理解為不同的任務(wù)有不同的性能度量。
對于諸如分類、缺失輸入分類和轉(zhuǎn)錄任務(wù),我們通常度量模型的準(zhǔn)確率(accu- racy)。準(zhǔn)確率是指該模型輸出正確結(jié)果的樣本比率。我們也可以通過錯誤率(error rate)得到相同的信息。錯誤率是指該模型輸出錯誤結(jié)果的樣本比率。
我們使用測試集(test set)數(shù)據(jù)來評估系統(tǒng)性能,將其與訓(xùn)練機器學(xué)習(xí)系統(tǒng)的訓(xùn)練集數(shù)據(jù)分開。
值得注意的是,性能度量的選擇或許看上去簡單且客觀,但是選擇一個與系統(tǒng)理想表現(xiàn)能對應(yīng)上的性能度量通常是很難的。
5.1.3 經(jīng)驗
根據(jù)學(xué)習(xí)過程中的不同經(jīng)驗,機器學(xué)習(xí)算法可以大致分類為無監(jiān)督(unsuper- vised)算法和監(jiān)督(supervised)算法。
無監(jiān)督學(xué)習(xí)算法(unsupervised learning algorithm)訓(xùn)練含有很多特征的數(shù)據(jù)集,然后學(xué)習(xí)出這個數(shù)據(jù)集上有用的結(jié)構(gòu)性質(zhì)。在深度學(xué)習(xí)中,我們通常要學(xué)習(xí)生成數(shù)據(jù)集的整個概率分布,顯式地,比如密度估計,或是隱式地,比如合成或去噪。 還有一些其他類型的無監(jiān)督學(xué)習(xí)任務(wù),例如聚類,將數(shù)據(jù)集分成相似樣本的集合。
監(jiān)督學(xué)習(xí)算法(supervised learning algorithm)也訓(xùn)練含有很多特征的數(shù)據(jù)集,但與無監(jiān)督學(xué)習(xí)算法不同的是數(shù)據(jù)集中的樣本都有一個標(biāo)簽(label)或目標(biāo)(target)。例如,Iris 數(shù)據(jù)集注明了每個鳶尾花卉樣本屬于什么品種。監(jiān)督學(xué)習(xí)算法通過研究 Iris 數(shù)據(jù)集,學(xué)習(xí)如何根據(jù)測量結(jié)果將樣本劃分為三個不同品種。
半監(jiān)督學(xué)習(xí)算法中,一部分樣本有監(jiān)督目標(biāo),另外一部分樣本則沒有。在多實例學(xué)習(xí)中,樣本的整個集合被標(biāo)記為含有或者不含有該類的樣本,但是集合中單獨的樣本是沒有標(biāo)記的。
大致說來,無監(jiān)督學(xué)習(xí)涉及到觀察隨機向量 的好幾個樣本,試圖顯式或隱式地學(xué)習(xí)出概率分布
,或者是該分布一些有意思的性質(zhì); 而監(jiān)督學(xué)習(xí)包含觀察隨機向量
及其相關(guān)聯(lián)的值或向量
,然后從
預(yù)測
,通常是估計
。術(shù)語監(jiān)督學(xué)習(xí)(
supervised learning)源自這樣一個視角,教員或者老師提供目標(biāo) 給機器學(xué)習(xí)系統(tǒng),指導(dǎo)其應(yīng)該做什么。在無監(jiān)督學(xué)習(xí)中,沒有教員或者老師,算法必須學(xué)會在沒有指導(dǎo)的情況下理解數(shù)據(jù)。
無監(jiān)督學(xué)習(xí)和監(jiān)督學(xué)習(xí)并不是嚴(yán)格定義的術(shù)語。它們之間界線通常是模糊的。很多機器學(xué)習(xí)技術(shù)可以用于這兩個任務(wù)。
盡管無監(jiān)督學(xué)習(xí)和監(jiān)督學(xué)習(xí)并非完全沒有交集的正式概念,它們確實有助于粗略分類我們研究機器學(xué)習(xí)算法時遇到的問題。傳統(tǒng)地,人們將回歸、分類或者結(jié)構(gòu)化輸出問題稱為監(jiān)督學(xué)習(xí)。支持其他任務(wù)的密度估計通常被稱為無監(jiān)督學(xué)習(xí)。
表示數(shù)據(jù)集的常用方法是設(shè)計矩陣(design matrix)。
5.1.4 示例: 線性回歸
我們將機器學(xué)習(xí)算法定義為,通過經(jīng)驗以提高計算機程序在某些任務(wù)上性能的算法。這個定義有點抽象。為了使這個定義更具體點,我們展示一個簡單的機器學(xué)習(xí)示例: 線性回歸(linear regression)。
顧名思義,線性回歸解決回歸問題。 換句話說,目標(biāo)是構(gòu)建一個系統(tǒng),該系統(tǒng)可以將向量 作為輸入,并預(yù)測標(biāo)量
作為輸出。在線性回歸的情況下,輸出是輸入的線性函數(shù)。令
表示模型預(yù)測值。我們定義輸出為
其中 是參數(shù)(
parameter)向量。
參數(shù)是控制系統(tǒng)行為的值。在這種情況下, 是系數(shù),會和特征
相乘之 后全部相加起來。我們可以將
看作是一組決定每個特征如何影響預(yù)測的權(quán)重 (weight)。
通過上述描述,我們可以定義任務(wù) : 通過輸出
從
預(yù)測
。
我們使用測試集(test set)來評估模型性能如何,將輸入的設(shè)計矩 陣記作 (test),回歸目標(biāo)向量記作
(test)。
回歸任務(wù)常用的一種模型性能度量方法是計算模型在測試集上的 均方誤差(mean squared error)。如果 (
test) 表示模型在測試集上的預(yù)測值,那么均方誤差表示為:
直觀上,當(dāng) =
時,我們會發(fā)現(xiàn)誤差降為 0。
圖 5.1 展示了線性回歸算法的使用示例。

5.2 容量、過擬合和欠擬合
機器學(xué)習(xí)的挑戰(zhàn)主要在于算法如何在測試集(先前未觀測的新輸入數(shù)據(jù))上表現(xiàn)良好,而不只是在訓(xùn)練集上表現(xiàn)良好。在測試集(以前未觀察到的輸入)上表現(xiàn)良好的能力稱為泛化(generalization)。
我們通常通過在與訓(xùn)練集分開收集的測試集上測量其性能來估計機器學(xué)習(xí)模型的泛化誤差。
機器學(xué)習(xí)算法的兩個主要挑戰(zhàn)是: 欠擬合(underfitting)和過擬合(overfitting)。
- 欠擬合是指模型不能在訓(xùn)練集上獲得足夠低的誤差。
- 而過擬合是指訓(xùn)練誤差和和測試誤差之間的差距太大。
我們可以通過調(diào)整模型的容量(capacity),來控制模型是否偏向于過擬合或者欠擬合。通俗地講,模型的容量是指其擬合各種函數(shù)的能力。容量低的模型可能很難擬合訓(xùn)練集,容量高的模型可能會過擬合,因為記住了不適用于測試集的訓(xùn)練集性質(zhì)。
一種控制訓(xùn)練算法容量的方法是選擇假設(shè)空間(hypothesis space),即允許學(xué)習(xí)算法選擇作為解決方案的一組函數(shù)。例如,線性回歸算法將其輸入的所有線性函數(shù)的集合作為其假設(shè)空間。我們可以推廣線性回歸以在其假設(shè)空間中包含多項式,而不僅僅是線性函數(shù)。這樣做就增加模型的容量。
當(dāng)機器學(xué)習(xí)算法的容量適合于所執(zhí)行任務(wù)的復(fù)雜度和所提供訓(xùn)練數(shù)據(jù)的數(shù)量時,算法效果通常會最佳。容量不足的模型不能解決復(fù)雜任務(wù)。容量高的模型能夠解決復(fù)雜的任務(wù),但是當(dāng)其容量高于任務(wù)所需時,有可能會過擬合。
圖 5.2 展示了上述原理的使用情況。我們比較了線性,二次和 9 次預(yù)測器擬合真 實二次函數(shù)的效果。

統(tǒng)計學(xué)習(xí)理論提供了量化模型容量的不同方法。在這些中,最有名的是 Vapnik- Chervonenkis 維度(Vapnik-Chervonenkis dimension, VC)。VC 維度量二元分類 器的容量。VC 維定義為該分類器能夠分類的訓(xùn)練樣本的最大數(shù)目。假設(shè)存在 個 不同
點的訓(xùn)練集,分類器可以任意地標(biāo)記該
個不同的
點,
VC 維被定義為 的最大可能值。
因為可以量化模型的容量,所以使得統(tǒng)計學(xué)習(xí)理論可以進(jìn)行量化預(yù)測。統(tǒng)計學(xué)習(xí)理論中最重要的結(jié)論闡述了訓(xùn)練誤差和泛化誤差之間差異的上界隨著模型容量增長而增長,但隨著訓(xùn)練樣本增多而下降 (Vapnik and Chervonenkis, 1971; Vapnik, 1982; Blumer et al., 1989; Vapnik, 1995)。這些邊界為機器學(xué)習(xí)算法可以有效解決問題提供了理論 驗證,但是它們很少應(yīng)用于實際中的深度學(xué)習(xí)算法。一部分原因是邊界太松,另一部分原因是很難確定深度學(xué)習(xí)算法的容量。由于有效容量受限于優(yōu)化算法的能力,所以確定深度學(xué)習(xí)模型容量的問題特別困難。而且我們對深度學(xué)習(xí)中涉及的非常普遍的非凸優(yōu)化問題的理論了解很少。
雖然更簡單的函數(shù)更可能泛化(訓(xùn)練誤差和測試誤差的差距小),但我們?nèi)匀槐仨氝x擇一個足夠復(fù)雜的假設(shè)來實現(xiàn)低訓(xùn)練誤差。通常,隨著模型容量的增加,訓(xùn)練誤差會減小,直到它逐漸接近最小可能的誤差值(假設(shè)誤差度量具有最小值)。通常,泛化誤差是一個關(guān)于模型容量的 U 形曲線函數(shù)。如下圖 5.3 所示。

5.2.1 沒有免費午餐定理
機器學(xué)習(xí)的沒有免費午餐定理(Wolpert,1996)指出,對所有可能的數(shù)據(jù)生成分布進(jìn)行平均,每個分類算法在對以前未觀察到的點進(jìn)行分類時具有相同的錯誤率。換句話說,在某種意義上,沒有任何機器學(xué)習(xí)算法普遍優(yōu)于其他任何算法。
上述這個結(jié)論聽著真的讓人傷感,但慶幸的是,這些結(jié)論僅在我們考慮所有可能的數(shù)據(jù)生成分布時才成立。如果我們對實際應(yīng)用中遇到的概率分布類型做出假設(shè),那么我們可以設(shè)計出在這些分布上表現(xiàn)良好的學(xué)習(xí)算法。
這意味著機器學(xué)習(xí)研究的目標(biāo)不是找一個通用學(xué)習(xí)算法或是絕對最好的學(xué)習(xí)算法。反之,我們的目標(biāo)是理解什么樣的分布與人工智能獲取經(jīng)驗的 “真實世界” 相關(guān),什么樣的學(xué)習(xí)算法在我們關(guān)注的數(shù)據(jù)生成分布上效果最好。
總結(jié):沒有免費午餐定理清楚地闡述了沒有最優(yōu)的學(xué)習(xí)算法,即暗示我們必須在特定任務(wù)上設(shè)計性能良好的機器學(xué)習(xí)算法。
5.2.2 正則化
算法的效果不僅很大程度上受影響于假設(shè)空間的函數(shù)數(shù)量,也取決于這些函數(shù)的具體形式。
在假設(shè)空間中,相比于某一個學(xué)習(xí)算法,我們可能更偏好另一個學(xué)習(xí)算法。這 意味著兩個函數(shù)都是符合條件的,但是我們更偏好其中一個。只有非偏好函數(shù)比偏好函數(shù)在訓(xùn)練數(shù)據(jù)集上效果明顯好很多時,我們才會考慮非偏好函數(shù)。
我們可以加入權(quán)重衰減(weight decay)來修改線性回歸的訓(xùn)練標(biāo)準(zhǔn)。新的代價函數(shù) 定義如下:
是超參數(shù),需提前設(shè)置,其控制我們對較小權(quán)重的偏好強度。當(dāng)
,我們沒有任何偏好。
越大,則權(quán)重越小。最小化
會導(dǎo)致權(quán)重的選擇在擬合訓(xùn)練數(shù)據(jù)和較小權(quán)重之間進(jìn)行權(quán)衡。
簡單來說,就是給代價函數(shù)添加正則化項(regularizer)的懲罰,即正則化一個學(xué)習(xí)函數(shù)為 的模型。上述權(quán)重衰減的例子中,正則化項是
。 在后續(xù)的第七章,我們將學(xué)習(xí)其他的正則化項。
我們將正則化定義為“對學(xué)習(xí)算法的修改-旨在減少泛化誤差而不是訓(xùn)練誤差”。正則化是機器學(xué)習(xí)領(lǐng)域的中心問題之一,只有優(yōu)化能夠與其重要性相媲。
和沒有最優(yōu)的學(xué)習(xí)算法一樣,特別地,也沒有最優(yōu)的正則化形式。反之,我們必須挑選一個非常適合于我們所要解決的任務(wù)的正則形式。
5.3 超參數(shù)和驗證集
超參數(shù)的值不是通過學(xué)習(xí)算法本身學(xué)習(xí)出來的,而是需要算法定義者手動指定的。
5.3.1 驗證集的作用
通常,80% 的訓(xùn)練數(shù)據(jù)用于訓(xùn)練,20% 用于驗證。驗證集是用于估計訓(xùn)練中或訓(xùn)練后的泛化誤差,從而更新超參數(shù)。
5.3.2 交叉驗證
一個小規(guī)模的測試集意味著平均測試誤差估計的統(tǒng)計不確定性,使得很難判斷算法 A 是否比算法 B 在給定的任務(wù)上做得更好。解決辦法是基于在原始數(shù)據(jù)上隨機采樣或分離出的不同數(shù)據(jù)集上重復(fù)訓(xùn)練和測試,最常見的就是 -折交叉驗證,即將數(shù)據(jù)集分成
個 不重合的子集。測試誤差可以估計為
次計算后的平均測試誤差。在第
次測試時, 數(shù)據(jù)的第
個子集用于測試集,其他的數(shù)據(jù)用于訓(xùn)練集。算法過程如下所示。
k 折交叉驗證雖然一定程度上可以解決小數(shù)據(jù)集上測試誤差的不確定性問題,但代價則是增加了計算量。

5.4 估計、偏差和方差
統(tǒng)計領(lǐng)域為我們提供了很多工具來實現(xiàn)機器學(xué)習(xí)目標(biāo),不僅可以解決訓(xùn)練集上 的任務(wù),還可以泛化?;镜母拍睿鐓?shù)估計、偏差和方差,對于正式地刻畫泛化、欠擬合和過擬合都非常有幫助。
5.4.1 點估計
略
5.4.2 偏差
5.4.4 權(quán)衡偏差和方差以最小化均方誤差
偏差和方差度量著估計量的兩個不同誤差來源。偏差度量著偏離真實函數(shù)或參數(shù)的誤差期望。而方差度量著數(shù)據(jù)上任意特定采樣可能導(dǎo)致的估計期望的偏差。
偏差和方差的關(guān)系和機器學(xué)習(xí)容量、欠擬合和過擬合的概念緊密相聯(lián)。用 MSE 度量泛化誤差(偏差和方差對于泛化誤差都是有意義的)時,增加容量會增加方差,降低偏差。如圖 5.6 所示,我們再次在關(guān)于容量的函數(shù)中,看到泛化誤差的 U 形曲線。

參考資料
-《深度學(xué)習(xí)》