關(guān)鍵組件
無論我們遇到什么類型的機器學(xué)習(xí)問題,這些組件都將伴隨我們左右:
- 我們可以學(xué)習(xí)的數(shù)據(jù)(data)。
- 如何轉(zhuǎn)換數(shù)據(jù)的模型(model)。
- 一個目標(biāo)函數(shù)(objective function),用來量化模型的有效性。
- 調(diào)整模型參數(shù)以優(yōu)化目標(biāo)函數(shù)的算法。
1. 數(shù)據(jù)
沒有數(shù)據(jù),數(shù)據(jù)科學(xué)毫無用武之地。 每個數(shù)據(jù)集由一個個樣本(example)組成,大多時候,它們遵循獨立同分布(idependently and identically distributed, i.i.d.)。 樣本有時也叫做數(shù)據(jù)點(data point)或者數(shù)據(jù)實例(data instance),通常每個樣本由一組稱為特征(features,或協(xié)變量(covariates))的屬性組成。 機器學(xué)習(xí)模型會根據(jù)這些屬性進行預(yù)測。 在上面的監(jiān)督學(xué)習(xí)問題中,要預(yù)測的是一個特殊的屬性,它被稱為標(biāo)簽(label,或目標(biāo)(target))。
假設(shè)我們處理的是圖像數(shù)據(jù),每一張單獨的照片即為一個樣本,它的特征由每個像素數(shù)值的有序列表表示。 比如,(200\times 200)彩色照片由(200\times200\times3=120000)個數(shù)值組成,其中的“3”對應(yīng)于每個空間位置的紅、綠、藍(lán)通道的強度。 再比如,對于一組醫(yī)療數(shù)據(jù),給定一組標(biāo)準(zhǔn)的特征(如年齡、生命體征和診斷),我們可能用此數(shù)據(jù)嘗試預(yù)測患者是否會存活。
當(dāng)每個樣本的特征類別數(shù)量都是相同的,所以其特征向量是固定長度的,這個長度被稱為數(shù)據(jù)的維數(shù)(dimensionality)。 固定長度的特征向量是一個方便的屬性,它有助于我們量化學(xué)習(xí)大量樣本。
然而,并不是所有的數(shù)據(jù)都可以用”固定長度“的向量表示。 以圖像數(shù)據(jù)為例,如果它們?nèi)縼碜詷?biāo)準(zhǔn)顯微鏡設(shè)備,那么“固定長度”是可取的; 但是如果我們的圖像數(shù)據(jù)來自互聯(lián)網(wǎng),我們不能天真的假想它們都有相同的分辨率或形狀。 這時,我們可以考慮將圖像裁剪成標(biāo)準(zhǔn)尺寸,但這種辦法很局限,數(shù)據(jù)有丟失信息的風(fēng)險。 此外,文本數(shù)據(jù)更不符合”固定長度“的要求。 考慮一下亞馬遜等電子商務(wù)網(wǎng)站上的客戶評論:有些文本數(shù)據(jù)是簡短的(比如“好極了”);有些則長篇大論。 與傳統(tǒng)機器學(xué)習(xí)方法相比,深度學(xué)習(xí)的一個主要優(yōu)勢是可以處理不同長度的數(shù)據(jù)。
一般來說,我們擁有的數(shù)據(jù)越多,我們的工作就越容易。 當(dāng)我們有了更多的數(shù)據(jù),我們通??梢杂?xùn)練出更強大的模型,從而減少對預(yù)先設(shè)想假設(shè)的依賴。 數(shù)據(jù)集的由小變大為現(xiàn)代深度學(xué)習(xí)的成功奠定基礎(chǔ)。 在沒有大數(shù)據(jù)集的情況下,許多令人興奮的深度學(xué)習(xí)模型黯然失色。 就算一些深度學(xué)習(xí)模型在小數(shù)據(jù)集上能夠工作,但其效能并不比不上傳統(tǒng)方法。
請注意,僅僅擁有海量的數(shù)據(jù)是不夠的,我們還需要正確的數(shù)據(jù)。 如果數(shù)據(jù)中充滿了錯誤,或者如果數(shù)據(jù)的特征不能預(yù)測任務(wù)目標(biāo),那么模型很可能無效。 有一句古語很好地反映了這個現(xiàn)象:“輸入的是垃圾,輸出的也是垃圾?!保ā癎arbage in, garbage out.”) 此外,糟糕的預(yù)測性能甚至?xí)颖斗糯笫聭B(tài)的嚴(yán)重性。 在一些敏感應(yīng)用中,如預(yù)測性監(jiān)管、簡歷篩選和用于貸款的風(fēng)險模型,我們必須特別警惕垃圾數(shù)據(jù)的后果。 一種常見的問題來著不均衡的數(shù)據(jù)集,比如在一個有關(guān)醫(yī)療的訓(xùn)練數(shù)據(jù)集中,某些人群沒有樣本表示。 想象一下,假設(shè)你要訓(xùn)練一個皮膚癌識別模型,但它(在訓(xùn)練數(shù)據(jù)集)從未見過的黑色皮膚的人群,就會頓時束手無策。
再比如,如果用“過去的招聘決策數(shù)據(jù)”來訓(xùn)練一個篩選簡歷的模型,那么機器學(xué)習(xí)模型可能會無意中捕捉到歷史殘留的不公正,并將其自動化。 然而,這一切都可能在不知情的情況下發(fā)生。 因此,當(dāng)數(shù)據(jù)不具有充分代表性,甚至包含了一些社會偏見時,模型就很有可能失敗。
2. 模型
大多數(shù)機器學(xué)習(xí)會涉及到數(shù)據(jù)的轉(zhuǎn)換。 比如,我們建立一個“攝取照片并預(yù)測笑臉”的系統(tǒng)。再比如,我們攝取一組傳感器讀數(shù),并預(yù)測讀數(shù)的正常與異常程度。 雖然簡單的模型能夠解決如上簡單的問題,但本書中關(guān)注的問題超出了經(jīng)典方法的極限。 深度學(xué)習(xí)與經(jīng)典方法的區(qū)別主要在于:前者關(guān)注的功能強大的模型,這些模型由神經(jīng)網(wǎng)絡(luò)錯綜復(fù)雜的交織在一起,包含層層數(shù)據(jù)轉(zhuǎn)換,因此被稱為深度學(xué)習(xí)(deep learning)。 在討論深度模型的過程中,我們也將提及一些傳統(tǒng)方法。
3. 目標(biāo)函數(shù)
前面,我們將機器學(xué)習(xí)介紹為“從經(jīng)驗中學(xué)習(xí)“。 這里所說的“學(xué)習(xí)”,是指自主提高模型完成某些任務(wù)的效能。 但是,什么才算真正的提高呢? 在機器學(xué)習(xí)中,我們需要定義模型的優(yōu)劣程度的度量,這個度量在大多數(shù)情況是“可優(yōu)化”的,我們稱之為目標(biāo)函數(shù)(objective function)。 我們通常定義一個目標(biāo)函數(shù),并希望優(yōu)化它到最低點。因為越低越好,所以這些函數(shù)有時被稱為損失函數(shù)(loss function, 或cost function)。 但這只是一個慣例,你也可以取一個新的函數(shù),優(yōu)化到它的最高點。這兩個函數(shù)本質(zhì)上是相同的,只是翻轉(zhuǎn)一下符號。
當(dāng)任務(wù)為試圖預(yù)測數(shù)值時,最常見的損失函數(shù)是平方誤差(squared error),即預(yù)測值與實際值之差的平方。 當(dāng)試圖解決分類問題時,最常見的目標(biāo)函數(shù)是最小化錯誤率,即預(yù)測與實際情況不符的樣本比例。 有些目標(biāo)函數(shù)(如平方誤差)很容易被優(yōu)化,有些目標(biāo)(如錯誤率)由于不可微性或其他復(fù)雜性難以直接優(yōu)化。 在這些情況下,通常會優(yōu)化替代目標(biāo)。
通常,損失函數(shù)是根據(jù)模型參數(shù)定義的,并取決于數(shù)據(jù)集。 在一個數(shù)據(jù)集上,我們通過最小化總損失來學(xué)習(xí)模型參數(shù)的最佳值。 該數(shù)據(jù)集由一些為訓(xùn)練而收集的樣本組成,稱為訓(xùn)練數(shù)據(jù)集(training dataset,或稱為訓(xùn)練集(training set))。 然而,在訓(xùn)練數(shù)據(jù)上表現(xiàn)良好的模型,并不一定在“新數(shù)據(jù)集“上有同樣的效能,這里的“新數(shù)據(jù)集“通常稱為測試數(shù)據(jù)集(test dataset,或稱為測試集(test set))。
綜上所述,我們通常將可用數(shù)據(jù)集分成兩部分:訓(xùn)練數(shù)據(jù)集用于擬合模型參數(shù),測試數(shù)據(jù)集用于評估擬合的模型。 然后我們觀察模型在這兩部分?jǐn)?shù)據(jù)集的效能。 你可以把”一個模型在訓(xùn)練數(shù)據(jù)集上的效能“想象成”一個學(xué)生在模擬考試中的分?jǐn)?shù)“。 這個分?jǐn)?shù)用來為一些真正的期末考試做參考,即使成績令人鼓舞,也不能保證期末考試成功。 換言之,測試性能可能會顯著偏離訓(xùn)練性能。 當(dāng)一個模型在訓(xùn)練集上表現(xiàn)良好,但不能推廣到測試集時,我們說這個模型是“過擬合”(overfitting)的。 就像在現(xiàn)實生活中,盡管模擬考試考得很好,真正的考試不一定百發(fā)百中。
4. 優(yōu)化算法
一旦我們獲得了一些數(shù)據(jù)源及其表示、一個模型和一個合適的損失函數(shù),我們接下來就需要一種算法,它能夠搜索出最佳參數(shù),以最小化損失函數(shù)。 深度學(xué)習(xí)中,大多流行的優(yōu)化算法通常基于一種基本方法–梯度下降(gradient descent)。 簡而言之,在每個步驟中,梯度下降法都會檢查每個參數(shù),看看如果你僅對該參數(shù)進行少量變動,訓(xùn)練集損失會朝哪個方向移動。 然后,它在可以減少損失的方向上優(yōu)化參數(shù)。