本章涵蓋了
- 分類(lèi)和回歸以外的機(jī)器學(xué)習(xí)形式
- 機(jī)器學(xué)習(xí)模型的正式評(píng)估過(guò)程
- 為深度學(xué)習(xí)準(zhǔn)備數(shù)據(jù)
- 特征工程
- 解決過(guò)擬合
- 解決機(jī)器學(xué)習(xí)問(wèn)題的通用工作流程
在第三章的三個(gè)實(shí)際例子之后氯庆,您應(yīng)該開(kāi)始熟悉如何使用神經(jīng)網(wǎng)絡(luò)來(lái)處理分類(lèi)和回歸問(wèn)題扇苞,并且您已經(jīng)看到了機(jī)器學(xué)習(xí)的核心問(wèn)題:過(guò)擬合。
這一章將把你的一些新直覺(jué)形式化到一個(gè)堅(jiān)固的概念框架中,用來(lái)解決深度學(xué)習(xí)的問(wèn)題。我們將把所有這些概念——模型評(píng)估、數(shù)據(jù)預(yù)處理和特性工程稍坯,以及處理過(guò)擬合——整合到一個(gè)詳細(xì)的七步工作流程中,以處理任何機(jī)器學(xué)習(xí)任務(wù)搓劫。
4.1機(jī)器學(xué)習(xí)的四個(gè)分支
在前面的示例中瞧哟,您已經(jīng)熟悉了三種特定類(lèi)型的機(jī)器學(xué)習(xí)問(wèn)題:二分類(lèi)、多分類(lèi)和標(biāo)量回歸枪向。這三個(gè)都是監(jiān)督學(xué)習(xí)(supervised learning)的實(shí)例勤揩,目標(biāo)是學(xué)習(xí)訓(xùn)練輸入和訓(xùn)練目標(biāo)之間的關(guān)系。
監(jiān)督學(xué)習(xí)只是冰山一角——機(jī)器學(xué)習(xí)是一個(gè)有著復(fù)雜子領(lǐng)域類(lèi)別的廣闊領(lǐng)域秘蛔。機(jī)器學(xué)習(xí)算法通常分為四大類(lèi)陨亡,在下面的部分中進(jìn)行描述傍衡。
4.1.1 有監(jiān)督學(xué)習(xí)
這是目前為止最常見(jiàn)的情況。它包括负蠕,在給定一組示例(通常由人來(lái)注釋)的情景下蛙埂,學(xué)習(xí)將輸入數(shù)據(jù)映射到已知目標(biāo)(也稱(chēng)為注解(annotations))。到目前為止遮糖,你在這本書(shū)中遇到的四個(gè)例子都是有監(jiān)督學(xué)習(xí)的典型例子绣的。一般來(lái)說(shuō),目前備受關(guān)注的深度學(xué)習(xí)的幾乎所有應(yīng)用都屬于這一類(lèi)止吁,例如光學(xué)字符識(shí)別(optical character recognition, OCR)被辑、語(yǔ)音識(shí)別、圖像分類(lèi)和語(yǔ)言翻譯敬惦。
雖然有監(jiān)督學(xué)習(xí)主要由分類(lèi)和回歸組成盼理,但也有更多的外來(lái)變體,包括以下(有例子):
- 序列生成(Sequence generation)——給定一張圖片俄删,預(yù)測(cè)描述它的標(biāo)題宏怔。序列生成有時(shí)可以重新表述為一系列分類(lèi)問(wèn)題(例如在序列中反復(fù)預(yù)測(cè)單詞或詞組(Token))。
- 語(yǔ)法樹(shù)預(yù)測(cè)(Syntax tree prediction)——給定一個(gè)句子畴椰,預(yù)測(cè)它分解成的語(yǔ)法樹(shù)臊诊。
- 對(duì)象檢測(cè)(Object detection)—— 給定一張圖片,在圖片內(nèi)的特定對(duì)象周?chē)?huà)一個(gè)邊框斜脂。這也可以表示為一個(gè)分類(lèi)問(wèn)題(給定許多候選邊界框抓艳,對(duì)每個(gè)邊界框的內(nèi)容進(jìn)行分類(lèi))或一個(gè)聯(lián)合了分類(lèi)和回歸的問(wèn)題,其中邊界框坐標(biāo)是通過(guò)向量回歸預(yù)測(cè)的帚戳。
- 圖像分割(Image segmentation)——給定一幅圖片玷或,在特定對(duì)象上繪制像素級(jí)的蒙版。
4.1.2無(wú)監(jiān)督學(xué)習(xí)
機(jī)器學(xué)習(xí)的這個(gè)分支包括在不借助任何目標(biāo)的情況下對(duì)輸入數(shù)據(jù)進(jìn)行有趣的轉(zhuǎn)換片任,以實(shí)現(xiàn)數(shù)據(jù)可視化偏友、數(shù)據(jù)壓縮或數(shù)據(jù)去噪,或者更好地理解當(dāng)前數(shù)據(jù)中的相關(guān)性对供。無(wú)監(jiān)督學(xué)習(xí)是數(shù)據(jù)分析的主要內(nèi)容位他,在試圖解決一個(gè)有監(jiān)督學(xué)習(xí)的問(wèn)題之前,它通常是更好地理解數(shù)據(jù)集的必要步驟产场。降維(Dimensionality reduction)和聚類(lèi)(clustering)是無(wú)監(jiān)督學(xué)習(xí)的著名類(lèi)別鹅髓。
4.1.3 自助(Self-supervised)學(xué)習(xí)
這是監(jiān)督學(xué)習(xí)的一個(gè)特例,但它的不同之處足以讓它應(yīng)該有自己的類(lèi)別京景。自主監(jiān)督學(xué)習(xí)是一種無(wú)需人為標(biāo)記標(biāo)簽的監(jiān)督學(xué)習(xí)——可以把它看作是沒(méi)有任何人參與的監(jiān)督學(xué)習(xí)迈勋。這里仍然涉及到標(biāo)簽(因?yàn)閷W(xué)習(xí)必須受到某些東西的監(jiān)督),但它們是由輸入數(shù)據(jù)生成的醋粟,通常使用啟發(fā)式算法靡菇。
例如重归,autoencoders是自監(jiān)督學(xué)習(xí)的一個(gè)眾所周知的實(shí)例,其中生成的目標(biāo)是輸入厦凤,沒(méi)有修改鼻吮。同樣地,給定過(guò)去的幀较鼓,試圖預(yù)測(cè)視頻中的下一幀椎木,或給定之前的單詞,預(yù)測(cè)文本中的下一個(gè)單詞博烂,都是自我監(jiān)督學(xué)習(xí)的實(shí)例(短暫的監(jiān)督學(xué)習(xí)(temporally supervised learning)香椎,在這種情況下:監(jiān)督來(lái)自未來(lái)的輸入數(shù)據(jù))。請(qǐng)注意禽篱,監(jiān)督學(xué)習(xí)畜伐、自我監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)之間的區(qū)別有時(shí)可能是模糊的——這些類(lèi)別更像是沒(méi)有固定邊界的連續(xù)統(tǒng)一體。自我監(jiān)督學(xué)習(xí)可以被重新解釋為監(jiān)督學(xué)習(xí)或非監(jiān)督學(xué)習(xí)躺率,這取決于你關(guān)注的是學(xué)習(xí)機(jī)制還是它的應(yīng)用環(huán)境玛界。
請(qǐng)注意,在本書(shū)中悼吱,我們將特別關(guān)注監(jiān)督學(xué)習(xí)慎框,因?yàn)樗悄壳吧疃葘W(xué)習(xí)的主要形式,具有廣泛的行業(yè)應(yīng)用后添。在后面的章節(jié)中笨枯,我們還將簡(jiǎn)要介紹自我監(jiān)督學(xué)習(xí)。
4.1.4強(qiáng)化學(xué)習(xí)
這個(gè)機(jī)器學(xué)習(xí)的分支被長(zhǎng)期忽視遇西,直到最近在谷歌DeepMind成功地將其應(yīng)用于學(xué)習(xí)玩Atari游戲(后來(lái)馅精,學(xué)習(xí)玩圍棋到最頂尖水平)之后,它開(kāi)始受到很多關(guān)注努溃。在強(qiáng)化學(xué)習(xí)中硫嘶,agent會(huì)接收環(huán)境的信息阻问,并學(xué)會(huì)選擇能獲得最大回報(bào)的行為梧税。例如,可以通過(guò)強(qiáng)化學(xué)習(xí)來(lái)訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)称近,它“看”電子游戲屏幕并輸出游戲動(dòng)作以最大化它的分?jǐn)?shù)第队。
目前,強(qiáng)化學(xué)習(xí)主要是一個(gè)研究領(lǐng)域刨秆,在游戲之外還沒(méi)有取得顯著的實(shí)際成功凳谦。然而,隨著時(shí)間的推移衡未,我們預(yù)計(jì)強(qiáng)化學(xué)習(xí)將接管越來(lái)越廣泛的現(xiàn)實(shí)應(yīng)用領(lǐng)域:自動(dòng)駕駛汽車(chē)尸执、機(jī)器人家凯、資源管理、教育等等如失。這個(gè)想法的時(shí)機(jī)已經(jīng)到來(lái)绊诲,或者即將到來(lái)。
分類(lèi)及回歸術(shù)語(yǔ)表
分類(lèi)和回歸涉及到許多專(zhuān)業(yè)術(shù)語(yǔ)褪贵。你在前面的例子中遇到過(guò)一些掂之,在以后的章節(jié)中你會(huì)看到更多。它們有精確的脆丁、特定于機(jī)器學(xué)習(xí)的定義世舰,您應(yīng)該熟悉它們:
- Sample or input:輸入到模型中的一個(gè)數(shù)據(jù)點(diǎn)
- Prediction or output:模型的輸出結(jié)果
- Target:答案。理想情況下槽卫,根據(jù)一個(gè)外部來(lái)源的數(shù)據(jù)跟压,模型應(yīng)該預(yù)測(cè)的結(jié)果
- Prediction error or loss value: 模型的預(yù)期與目標(biāo)間的差距的度量
- Classes:分類(lèi)問(wèn)題中可供選擇的一組可能的標(biāo)簽。例如晒夹,當(dāng)分類(lèi)貓和狗的圖片時(shí)裆馒,“狗”和“貓”是兩個(gè)類(lèi)。
- Label:分類(lèi)問(wèn)題中類(lèi)注釋的特定實(shí)例丐怯。例如喷好,如果圖片#1234被注釋為包含類(lèi)“dog”,那么“dog”就是圖片#1234的標(biāo)簽读跷。
- Ground-truth or annotations:數(shù)據(jù)集的所有目標(biāo)梗搅,通常由人類(lèi)收集。
- Binary classification:一個(gè)分類(lèi)任務(wù)效览,其中每個(gè)輸入樣本應(yīng)該被分為兩個(gè)互斥的類(lèi)別
- Multiclass classification:一個(gè)分類(lèi)任務(wù)无切,其中每個(gè)輸入樣本都應(yīng)該被分為兩類(lèi)以上:例如,對(duì)手寫(xiě)數(shù)字進(jìn)行分類(lèi)丐枉。
- Multilabel classification— 一個(gè)分類(lèi)任務(wù)哆键,其中每個(gè)輸入樣本可以分配多個(gè)標(biāo)簽。例如瘦锹,一個(gè)給定的圖像可能同時(shí)包含一只貓和一只狗籍嘹,并且應(yīng)該用“貓”標(biāo)簽和“狗”的標(biāo)簽進(jìn)行標(biāo)注。每個(gè)圖像的標(biāo)簽數(shù)量通常是可變的弯院。
- Scalar regression:目標(biāo)是連續(xù)標(biāo)量值的任務(wù)辱士。預(yù)測(cè)房?jī)r(jià)就是一個(gè)很好的例子:不同的目標(biāo)價(jià)格形成一個(gè)連續(xù)的空間。
- Vector regression:目標(biāo)是一組連續(xù)值的任務(wù):例如听绳,一個(gè)連續(xù)向量颂碘。如果你對(duì)多個(gè)值進(jìn)行回歸(例如圖像中邊界框的坐標(biāo)),然后進(jìn)行向量回歸椅挣。
Mini-batch or batch:由模型同時(shí)處理的一小部分樣品(通常在8到128之間)头岔。為了便于在GPU上進(jìn)行內(nèi)存分配塔拳,樣本的數(shù)量通常是2的冪。在訓(xùn)練時(shí)峡竣,使用一個(gè)迷你批處理(mini-batch)來(lái)計(jì)算應(yīng)用于模型權(quán)重的單一梯度下降更新蝙斜。
4.2 評(píng)估機(jī)器學(xué)習(xí)模型
評(píng)估一個(gè)模型總是歸結(jié)為將可用數(shù)據(jù)分成三組:訓(xùn)練、驗(yàn)證和測(cè)試澎胡。您利用訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練孕荠,并根據(jù)驗(yàn)證數(shù)據(jù)評(píng)估您的模型。一旦您的模型準(zhǔn)備好了攻谁,您就可以在測(cè)試數(shù)據(jù)上最后一次測(cè)試它稚伍。
你可能會(huì)問(wèn),為什么不準(zhǔn)備兩套呢:一套是訓(xùn)練戚宦,一套是測(cè)試?你會(huì)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練并對(duì)測(cè)試數(shù)據(jù)進(jìn)行評(píng)估个曙。更簡(jiǎn)單!
原因是,開(kāi)發(fā)一個(gè)模型總是涉及到調(diào)整其配置:例如受楼,選擇層的數(shù)量或?qū)拥拇笮?稱(chēng)為模型的超參數(shù)(hyperparameters)垦搬,以區(qū)別于參數(shù),后者是網(wǎng)絡(luò)的權(quán)重)艳汽。通過(guò)將模型在驗(yàn)證數(shù)據(jù)上的性能作為反饋信號(hào)來(lái)執(zhí)行此調(diào)優(yōu)猴贰。從本質(zhì)上講,這種調(diào)優(yōu)是一種學(xué)習(xí)形式:在某些參數(shù)空間中搜索良好的配置河狐。因此米绕,根據(jù)模型在驗(yàn)證集上的性能調(diào)整模型的配置會(huì)很快導(dǎo)致對(duì)驗(yàn)證集的過(guò)擬合,即使您的模型從未直接針對(duì)驗(yàn)證集進(jìn)行過(guò)訓(xùn)練馋艺。
這種現(xiàn)象的核心是信息泄露的概念栅干。每次根據(jù)模型在驗(yàn)證集上的性能調(diào)整模型的超參數(shù)時(shí),關(guān)于驗(yàn)證數(shù)據(jù)的一些信息就會(huì)泄漏到模型中捐祠。如果只對(duì)一個(gè)參數(shù)這樣做一次碱鳞,那么很少有信息會(huì)泄漏,您的驗(yàn)證集將保持可靠踱蛀,以評(píng)估模型窿给。但是,如果您重復(fù)這么多次——運(yùn)行一個(gè)實(shí)驗(yàn)星岗、對(duì)驗(yàn)證集進(jìn)行評(píng)估填大,并將模型修改為結(jié)果——那么您就會(huì)將越來(lái)越多關(guān)于驗(yàn)證集的信息泄漏到模型中戒洼。
最終俏橘,您將得到一個(gè)在驗(yàn)證數(shù)據(jù)上人工執(zhí)行良好的模型,因?yàn)檫@是您優(yōu)化它的目的圈浇。您關(guān)心的是全新數(shù)據(jù)的性能寥掐,而不是驗(yàn)證數(shù)據(jù)靴寂,因此您需要使用完全不同的、從未見(jiàn)過(guò)的數(shù)據(jù)集來(lái)評(píng)估模型:測(cè)試數(shù)據(jù)集召耘。您的模型不應(yīng)該訪問(wèn)任何關(guān)于測(cè)試集的信息百炬,即使是間接的。
如果基于測(cè)試集性能對(duì)模型進(jìn)行了任何調(diào)整污它,那么您的泛化度量將是有缺陷的剖踊。
將數(shù)據(jù)分割成訓(xùn)練、驗(yàn)證和測(cè)試集看起來(lái)很簡(jiǎn)單衫贬,但是有一些高級(jí)的方法可以在數(shù)據(jù)很少的時(shí)候派上用場(chǎng)德澈。讓我們回顧一下三種經(jīng)典的評(píng)估方法:簡(jiǎn)單的保留驗(yàn)證、Kfold驗(yàn)證和通過(guò)變換迭代K-fold驗(yàn)證固惯。
-
簡(jiǎn)單的保留驗(yàn)證(SIMPLE HOLD-OUT VALIDATION)
將數(shù)據(jù)分離部分作為測(cè)試集梆造。對(duì)剩余的數(shù)據(jù)進(jìn)行訓(xùn)練,并用測(cè)試集進(jìn)行評(píng)估葬毫。正如您在前幾節(jié)中看到的镇辉,為了防止信息泄漏,您不應(yīng)該基于測(cè)試集對(duì)模型進(jìn)行調(diào)優(yōu)贴捡,因此您還應(yīng)該保留一個(gè)驗(yàn)證集忽肛。
從示意圖上看,保持驗(yàn)證如圖4.1所示烂斋。下面的清單顯示了一個(gè)簡(jiǎn)單的實(shí)現(xiàn)麻裁。
Listing 4.1 Hold-out validation
這是最簡(jiǎn)單的評(píng)估手段,它有一個(gè)缺陷:如果可用的數(shù)據(jù)很少源祈,那么您的驗(yàn)證和測(cè)試集可能包含的樣本太少煎源,無(wú)法從統(tǒng)計(jì)學(xué)上代表手邊的數(shù)據(jù)。這很容易識(shí)別:如果在分割之前對(duì)數(shù)據(jù)進(jìn)行不同的隨機(jī)洗牌最終會(huì)產(chǎn)生非常不同的模型性能度量香缺,那么您就會(huì)遇到這個(gè)問(wèn)題手销。K-fold驗(yàn)證和迭代K-fold驗(yàn)證是解決這一問(wèn)題的兩種方法,下面將對(duì)此進(jìn)行討論图张。
-
K-FOLD驗(yàn)證法(K-FOLD VALIDATION)
使用這種方法锋拖,您可以將數(shù)據(jù)分割為大小相同的K個(gè)分區(qū)。對(duì)于每個(gè)分區(qū)i祸轮,在其余的K - 1分區(qū)上訓(xùn)練一個(gè)模型兽埃,并在分區(qū)i上評(píng)估它。你的最終成績(jī)是K分的平均值适袜。當(dāng)模型的性能顯示出基于traintest分割的顯著差異時(shí)柄错,這種方法是有幫助的。與保持驗(yàn)證一樣,這種方法不會(huì)使您免于使用不同的驗(yàn)證集進(jìn)行模型校準(zhǔn)售貌。
從示意圖上看给猾,K-fold交叉驗(yàn)證類(lèi)似于圖4.2。清單4.2顯示了一個(gè)簡(jiǎn)單的實(shí)現(xiàn):
Listing 4.2 K-fold cross-validation
-
混排迭代K-FOLD方法(ITERATED K-FOLD VALIDATION WITH SHUFFLING)
在這種情況下颂跨,可用數(shù)據(jù)相對(duì)較少敢伸,需要盡可能精確地評(píng)估模型。我發(fā)現(xiàn)它在Kaggle比賽上非常有用恒削。它包括多次應(yīng)用K-fold驗(yàn)證池颈,每次對(duì)數(shù)據(jù)進(jìn)行洗牌,然后再以K種方式對(duì)數(shù)據(jù)進(jìn)行拆分钓丰。最終得分是K-fold驗(yàn)證每次運(yùn)行時(shí)獲得的平均得分饶辙。注意,您最終培訓(xùn)和評(píng)估P×K模型(P是您使用的迭代次數(shù)),這可能代價(jià)非常昂貴,
4.2.2注意事項(xiàng)
在選擇評(píng)估方案時(shí)要注意以下幾點(diǎn):
- 數(shù)據(jù)的代表性(Data representativeness)——您希望您的訓(xùn)練集和測(cè)試集都能代表手邊的數(shù)據(jù)斑粱。舉例來(lái)說(shuō),如果你要分類(lèi)數(shù)字圖片弃揽,并且你從一個(gè)樣例數(shù)組開(kāi)始,而這些樣例數(shù)組都按照它們的類(lèi)別進(jìn)行了排序则北,這時(shí)候你將前80%的數(shù)組數(shù)據(jù)作為訓(xùn)練集矿微,并將后續(xù)的20%作為你的測(cè)試集,將導(dǎo)致你的訓(xùn)練數(shù)據(jù)只包含了分類(lèi)0-7尚揣,而你的測(cè)試數(shù)據(jù)集只包含分類(lèi)8-9涌矢。這似乎是一個(gè)荒謬的錯(cuò)誤,但卻出奇地普遍快骗。
因此娜庇,在將數(shù)據(jù)分解為訓(xùn)練和測(cè)試集之前,您通常應(yīng)該隨機(jī)地打亂(randomly shuffle)數(shù)據(jù)方篮。
- 時(shí)間箭頭的方向(The arrow of time)——如果你想根據(jù)給定的過(guò)去來(lái)預(yù)測(cè)未來(lái)(例如名秀,明天的天氣,股票運(yùn)動(dòng)等等)藕溅,你不應(yīng)該在分割數(shù)據(jù)之前隨機(jī)的洗牌數(shù)據(jù)匕得。因?yàn)檫@樣做會(huì)造成暫時(shí)的泄漏:您的模型將有效地接受來(lái)自未來(lái)數(shù)據(jù)的訓(xùn)練。在這種情況下巾表,您應(yīng)該始終確保測(cè)試集中的所有數(shù)據(jù)都在訓(xùn)練集中的數(shù)據(jù)之后汁掠。
- 數(shù)據(jù)中的冗余(Redundancy in your data)——如果數(shù)據(jù)中的某些數(shù)據(jù)點(diǎn)出現(xiàn)了兩次(這在真實(shí)數(shù)據(jù)中相當(dāng)常見(jiàn)),那么將數(shù)據(jù)重組并將其分割為訓(xùn)練集和驗(yàn)證集將導(dǎo)致訓(xùn)練集和驗(yàn)證集之間的冗余集币。實(shí)際上考阱,您將在部分訓(xùn)練數(shù)據(jù)上測(cè)試,這是您能做的最糟糕的事情!確保你的訓(xùn)練集和驗(yàn)證集是分開(kāi)的鞠苟。
4.3 神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理的目的是使手頭的原始數(shù)據(jù)更易于被神經(jīng)網(wǎng)絡(luò)接受乞榨。這包括向量化秽之、規(guī)范化、處理缺失值和特征提冉唷(vectorization, normalization, handling missing values, and feature extraction)。
-
向量化(VECTORIZATION)
神經(jīng)網(wǎng)絡(luò)中的所有輸入和目標(biāo)必須是浮點(diǎn)數(shù)據(jù)的張量(或者趾访,在特定情況下态秧,整數(shù)的張量)
。任何需要處理的數(shù)據(jù)——聲音扼鞋、圖像申鱼、文本——都必須首先轉(zhuǎn)換為張量,這一步稱(chēng)為數(shù)據(jù)向量化云头。例如捐友,在前面的兩個(gè)文本分類(lèi)示例中,我們從表示為整數(shù)列表(表示單詞序列)的文本開(kāi)始溃槐,并使用one-hot編碼將它們轉(zhuǎn)換為float32的張量匣砖。在對(duì)數(shù)字進(jìn)行分類(lèi)和預(yù)測(cè)房?jī)r(jià)的例子中,數(shù)據(jù)已經(jīng)以向量形式出現(xiàn)昏滴,所以您可以跳過(guò)這一步猴鲫。 -
數(shù)值歸一化(VALUE NORMALIZATION)
在digit-classification示例中,利用從0-255范圍內(nèi)的整數(shù)編碼的圖像數(shù)據(jù)開(kāi)始谣殊,編碼灰度值拂共。在將這些數(shù)據(jù)輸入網(wǎng)絡(luò)之前,您必須將其轉(zhuǎn)換為float32并除以255姻几,這樣您最終會(huì)得到0-1范圍內(nèi)的浮點(diǎn)值宜狐。類(lèi)似地,當(dāng)預(yù)測(cè)房?jī)r(jià)時(shí)蛇捌,你從各種范圍的特征開(kāi)始——一些特征有小的浮點(diǎn)值抚恒,另一些特征有相當(dāng)大的整數(shù)值。在將這些數(shù)據(jù)輸入網(wǎng)絡(luò)之前络拌,必須獨(dú)立地對(duì)每個(gè)特性進(jìn)行規(guī)范化柑爸,使其具有標(biāo)準(zhǔn)差1和平均值0。
一般來(lái)說(shuō)盒音,輸入相對(duì)較大值的神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)是不安全的(例如表鳍,多位整數(shù),這比網(wǎng)絡(luò)權(quán)值所取的初始值大得多)或異構(gòu)數(shù)據(jù)(例如祥诽,一個(gè)特性在0-1范圍內(nèi)譬圣,另一個(gè)特性在100-200范圍內(nèi)的數(shù)據(jù))。這樣做將觸發(fā)大的梯度更新雄坪,從而阻礙網(wǎng)絡(luò)收斂厘熟。為了使您的網(wǎng)絡(luò)更容易學(xué)習(xí),您的數(shù)據(jù)應(yīng)該具有以下特征:
- 只取小值(Take small values)— 典型的,大多數(shù)值必須在0-1的范圍內(nèi)绳姨。
- 必須同質(zhì)( Be homogenous)— 也就是說(shuō)登澜,所有的特征大致都應(yīng)該相同的范圍內(nèi)取值。
此外飘庄,下面更嚴(yán)格的歸一化實(shí)踐是常見(jiàn)的脑蠕,并且可以提供幫助,盡管它并不總是必要的(例如跪削,您在digit-classification示例中沒(méi)有這樣做): - 分別對(duì)每個(gè)特性進(jìn)行規(guī)范化谴仙,使其平均值為0。
-
獨(dú)立地規(guī)范化每個(gè)特性碾盐,使其標(biāo)準(zhǔn)差為1晃跺。
備注:這就是概率論里面學(xué)到的,如何將非單元高斯分布轉(zhuǎn)換為單元高斯分布時(shí)的變換公式 xx = (x- u) / σ毫玖,通過(guò)這種變換掀虎,就能符合單元高斯分布的要求了。 心塞付枫,十年前學(xué)的數(shù)學(xué)涩盾,都還給老師了。
使用Numpy數(shù)組很容易做到這一點(diǎn):
-
處理缺失值(HANDLING MISSING VALUES)
您的數(shù)據(jù)有時(shí)可能缺少值励背。例如春霍,在房?jī)r(jià)示例中,第一個(gè)特征(數(shù)據(jù)中索引0的列)是人均犯罪率叶眉。如果這個(gè)特性不是對(duì)所有樣本可用呢?因此址儒,在訓(xùn)練或測(cè)試數(shù)據(jù)中就會(huì)有缺失值。
一般來(lái)說(shuō)衅疙,使用神經(jīng)網(wǎng)絡(luò)莲趣,將輸入的缺失值設(shè)置為0是安全的,條件是0已經(jīng)不是一個(gè)有意義的值饱溢。網(wǎng)絡(luò)將從暴露的數(shù)據(jù)中了解到值0表示丟失數(shù)據(jù)喧伞,并將開(kāi)始忽略該值。
注意绩郎,如果您期望測(cè)試數(shù)據(jù)中有缺失值潘鲫,但是網(wǎng)絡(luò)是在沒(méi)有任何缺失值的數(shù)據(jù)上訓(xùn)練的,那么網(wǎng)絡(luò)不會(huì)忽略缺失值!在這種情況下肋杖,您應(yīng)該人為地生成缺少條目的訓(xùn)練樣本:將一些訓(xùn)練樣本復(fù)制幾次溉仑,并刪除一些您希望在測(cè)試數(shù)據(jù)中丟失的特征。
4.3.2 特征工程(Feature engineering)
特征工程是利用你自己關(guān)于數(shù)據(jù)和機(jī)器學(xué)習(xí)算法(在本例中是神經(jīng)網(wǎng)絡(luò))的知識(shí)状植,在數(shù)據(jù)進(jìn)入模型之前對(duì)其應(yīng)用硬編碼(非學(xué)習(xí))轉(zhuǎn)換浊竟,使算法更好地工作怨喘。在許多情況下,期望機(jī)器學(xué)習(xí)模型能夠從完全任意的數(shù)據(jù)中學(xué)習(xí)是不合理的振定。數(shù)據(jù)需要以使模型的工作更容易的方式呈現(xiàn)給模型必怜。
讓我們來(lái)看一個(gè)直觀的例子。假設(shè)您正在開(kāi)發(fā)一個(gè)模型后频,該模型可以將時(shí)鐘的圖像作為輸入梳庆,并可以輸出一天的時(shí)間(參見(jiàn)圖4.3)。
如果您選擇使用圖像的原始像素作為輸入數(shù)據(jù)徘郭,那么您就會(huì)遇到一個(gè)機(jī)器學(xué)習(xí)的難題靠益。你需要一個(gè)卷積神經(jīng)網(wǎng)絡(luò)來(lái)解決它丧肴,你需要花費(fèi)相當(dāng)多的計(jì)算資源來(lái)訓(xùn)練網(wǎng)絡(luò)残揉。
但是,如果您已經(jīng)在較高的層次上理解了這個(gè)問(wèn)題(您已經(jīng)理解了人類(lèi)如何在時(shí)鐘面上讀取時(shí)間)芋浮,那么您就可以為機(jī)器學(xué)習(xí)算法提供更好的輸入特性:例如抱环,很容易寫(xiě)五行代碼
Python腳本來(lái)跟蹤時(shí)鐘指針的黑色像素,并輸出每只指針尖端的(x, y)坐標(biāo)纸巷。然后镇草,一個(gè)簡(jiǎn)單的機(jī)器學(xué)習(xí)算法可以學(xué)習(xí)將這些坐標(biāo)與一天的適當(dāng)時(shí)間相關(guān)聯(lián)。
你甚至可以更進(jìn)一步:做一個(gè)坐標(biāo)變換瘤旨,把(x, y)坐標(biāo)表示成關(guān)于圖像中心的極坐標(biāo)梯啤。你的輸入將成為每個(gè)時(shí)鐘指針的角度。此時(shí)存哲,您的特性使問(wèn)題變得非常簡(jiǎn)單因宇,不需要機(jī)器學(xué)習(xí);一個(gè)簡(jiǎn)單的舍入操作和字典查找就足以恢復(fù)一天的大致時(shí)間。
這就是特征工程的本質(zhì):用更簡(jiǎn)單的方式表達(dá)問(wèn)題祟偷,從而使問(wèn)題變得更容易察滑。這通常需要深入了解問(wèn)題。
在深度學(xué)習(xí)之前修肠,特征工程曾經(jīng)很重要贺辰,因?yàn)榻?jīng)典的淺層算法沒(méi)有足夠的假設(shè)空間來(lái)學(xué)習(xí)有用的特征。將數(shù)據(jù)呈現(xiàn)給算法的方式對(duì)算法的成功至關(guān)重要嵌施。例如饲化,在卷積神經(jīng)網(wǎng)絡(luò)成功之前MNIST數(shù)字分類(lèi)問(wèn)題,解決方案通陈鹕耍基于硬編碼的特征滓侍,如數(shù)字圖像中的線圈數(shù),圖像中每個(gè)數(shù)字的高度牲芋,像素值的直方圖撩笆,等等捺球。
幸運(yùn)的是,
現(xiàn)代深度學(xué)習(xí)消除了對(duì)大多數(shù)特征工程的需求夕冲,因?yàn)樯窠?jīng)網(wǎng)絡(luò)能夠從原始數(shù)據(jù)中自動(dòng)提取有用的特征氮兵。
這是否意味著只要你使用深層神經(jīng)網(wǎng)絡(luò),你就不需要擔(dān)心特征工程?不歹鱼,有兩個(gè)原因:
- 好的特性仍然允許您在使用更少的資源的同時(shí)更優(yōu)雅地解決問(wèn)題泣栈。例如,用卷積神經(jīng)網(wǎng)絡(luò)解決時(shí)鐘面讀取的問(wèn)題是荒謬的弥姻。
- 好的特性使您可以用更少的數(shù)據(jù)來(lái)解決問(wèn)題南片。
深度學(xué)習(xí)模型自主學(xué)習(xí)特征的能力依賴(lài)于大量的訓(xùn)練數(shù)據(jù)
;如果您只有幾個(gè)示例,那么它們特性中的信息值就變得至關(guān)重要庭敦。
4.4過(guò)擬合和欠擬合
在前一章的所有三個(gè)例子中——預(yù)測(cè)電影評(píng)論疼进、主題分類(lèi)和房?jī)r(jià)回歸——模型在被定義的驗(yàn)證數(shù)據(jù)上的表現(xiàn)總是在幾個(gè)迭代之后達(dá)到頂峰,然后開(kāi)始下降:模型很快開(kāi)始過(guò)擬合訓(xùn)練數(shù)據(jù)秧廉。過(guò)擬合發(fā)生在每一個(gè)機(jī)器學(xué)習(xí)問(wèn)題桃熄。學(xué)習(xí)如何處理過(guò)擬合是掌握機(jī)器學(xué)習(xí)的關(guān)鍵邢享。
機(jī)器學(xué)習(xí)的根本問(wèn)題是優(yōu)化和泛化之間的矛盾。優(yōu)化是指調(diào)整模型以獲得對(duì)訓(xùn)練數(shù)據(jù)的最佳性能(機(jī)器學(xué)習(xí)中的學(xué)習(xí))的過(guò)程,而泛化是指訓(xùn)練后的模型對(duì)以前從未見(jiàn)過(guò)的數(shù)據(jù)的表現(xiàn)凡蜻。游戲的目標(biāo)是得到好的泛化晕翠,當(dāng)然蚪战,你不能控制泛化;只能根據(jù)訓(xùn)練數(shù)據(jù)調(diào)整模型棘利。
在訓(xùn)練開(kāi)始時(shí),優(yōu)化和泛化是相關(guān)的:訓(xùn)練數(shù)據(jù)的損失越小修陡,測(cè)試數(shù)據(jù)的損失就越小沧侥。當(dāng)這種情況發(fā)生時(shí),你的模型被認(rèn)為是不合適的:仍有一些進(jìn)展;網(wǎng)絡(luò)還沒(méi)有在訓(xùn)練數(shù)據(jù)中對(duì)所有相關(guān)模式進(jìn)行建模濒析。但是正什,在對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行一定數(shù)量的迭代之后,泛化停止了改進(jìn)号杏,驗(yàn)證度量停止了婴氮,然后開(kāi)始下降:模型開(kāi)始過(guò)度擬合。也就是說(shuō)盾致,它開(kāi)始學(xué)習(xí)特定于訓(xùn)練數(shù)據(jù)的模式主经。但當(dāng)涉及到新數(shù)據(jù)時(shí),這些模式會(huì)產(chǎn)生誤導(dǎo)或不相關(guān)庭惜。
為了防止模型學(xué)習(xí)到在訓(xùn)練數(shù)據(jù)中挖掘到誤導(dǎo)或不相關(guān)的模式罩驻,最好的解決方案是獲取更多的訓(xùn)練數(shù)據(jù)。對(duì)更多數(shù)據(jù)進(jìn)行訓(xùn)練的模型自然會(huì)得到更好的推廣护赊。如果這是不可能的惠遏,那么下一個(gè)最好的解決方案就是調(diào)整模型允許存儲(chǔ)的信息量砾跃,或者對(duì)允許存儲(chǔ)的信息添加約束。如果一個(gè)網(wǎng)絡(luò)只能記住少量的模式节吮,那么優(yōu)化過(guò)程就會(huì)迫使它把注意力集中在最突出的模式上抽高,這樣就能更好地推廣。
用這種方法進(jìn)行過(guò)擬合的過(guò)程稱(chēng)為正則化(regularization)透绩。讓我們回顧一些最常見(jiàn)的正則化技術(shù)翘骂,并將它們應(yīng)用到實(shí)踐中,以改進(jìn)3.4節(jié)中的電影分類(lèi)模型帚豪。
4.4.1減小網(wǎng)絡(luò)規(guī)模
防止過(guò)擬合的最簡(jiǎn)單方法是減小模型的大小:模型中可學(xué)習(xí)參數(shù)的數(shù)量(由層數(shù)和每層單元數(shù)決定)碳竟。
在深度學(xué)習(xí)中,模型中可學(xué)習(xí)參數(shù)的數(shù)量通常被稱(chēng)為模型的容量狸臣。直觀地說(shuō)莹桅,一個(gè)具有更多參數(shù)的模型具有更多的記憶能力(memorization capacity),因此可以很容易地學(xué)習(xí)到一個(gè)完美的字典式的訓(xùn)練樣本與其目標(biāo)之間的映射——一個(gè)沒(méi)有泛化能力的映射固棚。例如统翩,可以很容易的建立一個(gè)具有500,000個(gè)二進(jìn)制參數(shù)的模型來(lái)學(xué)習(xí)MNIST訓(xùn)練集中的每個(gè)數(shù)字的分類(lèi):我們每50仙蚜,000個(gè)數(shù)字只需要10個(gè)二進(jìn)制參數(shù)此洲。(沒(méi)看懂表達(dá)的是啥,反正意思就是要說(shuō)復(fù)雜參數(shù)任意導(dǎo)致過(guò)擬合訓(xùn)練數(shù)據(jù))但是這樣的模型對(duì)于新數(shù)字樣本的分類(lèi)是無(wú)用的委粉。始終牢記這一點(diǎn):深度學(xué)習(xí)模型往往很好地適應(yīng)訓(xùn)練數(shù)據(jù)呜师,但真正的挑戰(zhàn)是泛化,而不是擬合贾节。
另一方面汁汗,如果網(wǎng)絡(luò)的記憶資源有限,它就無(wú)法輕易地學(xué)習(xí)這種映射;因此栗涂,為了使損失最小化知牌,它將不得不學(xué)習(xí)對(duì)目標(biāo)具有預(yù)測(cè)能力的壓縮表示——準(zhǔn)確地說(shuō)是我們感興趣的表示類(lèi)型。與此同時(shí)斤程,請(qǐng)記住角寸,您應(yīng)該使用具有足夠參數(shù)的模型以確保不會(huì)欠擬合:您的模型不應(yīng)該缺乏記憶資源。在容量過(guò)大和容量不足之間需要找到一個(gè)折衷辦法忿墅。
不幸的是扁藕,沒(méi)有什么神奇的公式可以確定正確的層數(shù)或每個(gè)層的大小。您必須評(píng)估不同體系結(jié)構(gòu)的數(shù)組(當(dāng)然是在驗(yàn)證集上疚脐,而不是在測(cè)試集上)亿柑,以便為數(shù)據(jù)找到正確的模型大小。找到合適的模型大小的一般工作流程是從相對(duì)較少的層和參數(shù)開(kāi)始棍弄,增加層的大小或添加新層望薄,直到您看到驗(yàn)證損失的回報(bào)遞減為止疟游。
讓我們?cè)陔娪霸u(píng)論分類(lèi)網(wǎng)絡(luò)上試試,接下來(lái)顯示原始網(wǎng)絡(luò)痕支。
Listing 4.3 Original model
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
現(xiàn)在我們?cè)囍眠@個(gè)更小的網(wǎng)絡(luò)來(lái)代替它乡摹。
Listing 4.4 Version of the model with lower capacity
model = models.Sequential()
model.add(layers.Dense(4, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(4, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
圖4.4顯示了原始網(wǎng)絡(luò)和較小網(wǎng)絡(luò)的驗(yàn)證損失的比較。點(diǎn)是較小網(wǎng)絡(luò)的驗(yàn)證損失值采转,叉是初始網(wǎng)絡(luò)(記住聪廉,驗(yàn)證損失越低越好)。
如您所見(jiàn)故慈,較小的網(wǎng)絡(luò)開(kāi)始過(guò)擬合的時(shí)間比參考網(wǎng)絡(luò)晚(在經(jīng)歷了六個(gè)迭代而不是四個(gè)迭代之后)板熊,一旦開(kāi)始過(guò)擬合,其性能下降的速度就會(huì)更慢察绷。
現(xiàn)在干签,為了好玩,讓我們?cè)谶@個(gè)基準(zhǔn)上添加一個(gè)容量大得多的網(wǎng)絡(luò)——遠(yuǎn)遠(yuǎn)超過(guò)問(wèn)題所要求的拆撼。
Listing 4.5 Version of the model with higher capacity
model = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
圖4.5顯示了與參考網(wǎng)絡(luò)相比容劳,更大的網(wǎng)絡(luò)發(fā)生了什么。點(diǎn)是較大網(wǎng)絡(luò)的驗(yàn)證損失值闸度,叉號(hào)是初始網(wǎng)絡(luò)竭贩。
更大的網(wǎng)絡(luò)幾乎是在一個(gè)迭代之后就開(kāi)始過(guò)擬合,而且過(guò)擬合程度要嚴(yán)重得多莺禁。它的驗(yàn)證損失也更大留量。
同時(shí),圖4.6顯示了兩個(gè)網(wǎng)絡(luò)的訓(xùn)練損失哟冬。正如你所看到的楼熄,大網(wǎng)絡(luò)的訓(xùn)練損失很快就接近于零。網(wǎng)絡(luò)的容量越大浩峡,建模訓(xùn)練數(shù)據(jù)的速度就越快(導(dǎo)致了低的訓(xùn)練損失)可岂,但是它越容易過(guò)度擬合(導(dǎo)致了訓(xùn)練和驗(yàn)證損失之間的巨大差異)。
4.4.2添加權(quán)重正則化
你可能對(duì)奧卡姆剃刀的原理很熟悉:對(duì)于某件事給出兩種解釋?zhuān)羁赡苁钦_的解釋是最簡(jiǎn)單的一種——假設(shè)更少的那個(gè)翰灾。這一思想也適用于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的模型:給定一些訓(xùn)練數(shù)據(jù)和網(wǎng)絡(luò)架構(gòu)缕粹,多組權(quán)重值(多模型)可以解釋數(shù)據(jù)。更簡(jiǎn)單的模型比復(fù)雜的模型更不容易過(guò)擬合预侯。
在這個(gè)上下文中致开,一個(gè)簡(jiǎn)單的模型是一個(gè)參數(shù)值分布具有較少熵的模型(或者一個(gè)參數(shù)較少的模型,如您在前一節(jié)中所見(jiàn))萎馅。因此双戳,減輕過(guò)擬合的一種常見(jiàn)方法是通過(guò)強(qiáng)制其權(quán)值取很小的值來(lái)限制網(wǎng)絡(luò)的復(fù)雜性,從而使權(quán)值的分布更有規(guī)律糜芳。這被稱(chēng)為權(quán)值正則化
飒货,它是通過(guò)增加網(wǎng)絡(luò)的損失函數(shù)來(lái)實(shí)現(xiàn)的魄衅,代價(jià)與擁有大權(quán)值相關(guān)。這種代價(jià)有兩種:
- L1 regularization— 增加的代價(jià)與權(quán)重系數(shù)(權(quán)重的L1范數(shù))的絕對(duì)值成正比塘辅。
- L2 regularization— 增加的代價(jià)與權(quán)重系數(shù)(權(quán)重的L2范數(shù))的平方成正比晃虫。L2正則化在神經(jīng)網(wǎng)絡(luò)中也稱(chēng)為權(quán)值衰減(weight decay)。別讓不同的名字迷惑了你:權(quán)值衰減在數(shù)學(xué)上和L2正則化是一樣的扣墩。
在Keras中哲银,權(quán)重正則化是通過(guò)將權(quán)重正則化實(shí)例(weight regularizer instances)作為關(guān)鍵字參數(shù)傳遞到層來(lái)添加的。讓我們?cè)陔娪霸u(píng)論分類(lèi)網(wǎng)絡(luò)中加入L2權(quán)重正則化:
Listing 4.6 Adding L2 weight regularization to the model
from keras import regularizers
model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),
activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),
activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
l2(0.001)表示層的權(quán)重系數(shù)矩陣中的每一個(gè)系數(shù)都將給網(wǎng)絡(luò)的總損耗增加0.001 * weight_coefficient_value呻惕。注意荆责,因?yàn)檫@個(gè)懲罰只在訓(xùn)練時(shí)添加,所以這個(gè)網(wǎng)絡(luò)在訓(xùn)練時(shí)的損失要比在測(cè)試時(shí)高得多亚脆。
圖4.7顯示了L2正則化懲罰的影響做院。正如您所看到的,具有L2正則化(dots)的模型比參考模型(cross)更抗過(guò)擬合濒持,盡管兩個(gè)模型的參數(shù)數(shù)量相同键耕。
作為L(zhǎng)2正則化的一種替代方法,您可以使用以下Keras中的一個(gè)權(quán)重調(diào)節(jié)器柑营。
Listing 4.7 Different weight regularizers available in Keras
4.4.3 添加dropout(丟失)
Dropout是神經(jīng)網(wǎng)絡(luò)最有效和最常用的正則化技術(shù)之一屈雄,由Geoff Hinton和他在多倫多大學(xué)的學(xué)生開(kāi)發(fā)。Dropout應(yīng)用到一個(gè)layer上由境,包括隨機(jī)丟失(dropping out) (設(shè)置為0)訓(xùn)練期間層的許多輸出特征棚亩。假設(shè)一個(gè)給定的層通常會(huì)在訓(xùn)練過(guò)程中返回一個(gè)向量[0.2,0.5,1.3,0.8,1.1]蓖议。應(yīng)用dropout之后虏杰,這個(gè)向量將會(huì)有幾個(gè)零項(xiàng)隨機(jī)分布:例如[0,0.5,1.3,0,1.1]。丟失率(dropout rate)是被歸零的特征的分?jǐn)?shù);它的值通常為0.2到0.5之間勒虾。在測(cè)試時(shí)纺阔,沒(méi)有單元會(huì)被丟失(dropped out);相反,該層的輸出值被縮減為與丟失率相等的因子修然,以平衡比訓(xùn)練時(shí)更多的單元處于活動(dòng)狀態(tài)這一事實(shí)笛钝。
考慮一個(gè)Numpy矩陣,它包含一個(gè)層的輸出layer_output愕宋,形狀為(batch_size, feature)玻靡。在訓(xùn)練時(shí),我們隨機(jī)將矩陣中值的一部分歸零:
# At training time, drops out 50% of the units in the output
layer_output *= np.random.randint(0, high=2, size=layer_output.shape)
在測(cè)試時(shí)中贝,我們通過(guò)丟失率降低輸出囤捻。這里是0.5 (因?yàn)槲覀冎皽p少了一半的單元):
# At test time
layer_output *= 0.5
注意,這個(gè)過(guò)程可以通過(guò)在訓(xùn)練時(shí)執(zhí)行操作和在測(cè)試時(shí)保持輸出不變來(lái)實(shí)現(xiàn)邻寿,這通常是它在實(shí)踐中實(shí)現(xiàn)的方式(參見(jiàn)圖4.8):
這種方法似乎很奇怪蝎土,也很隨意视哑。為什么這有助于減少過(guò)擬合?
Hinton說(shuō),他的靈感來(lái)自于銀行使用的一種防止欺詐的機(jī)制誊涯。用他自己的話來(lái)說(shuō)挡毅,“我去了我的銀行。出納員們不停地變換暴构,我問(wèn)其中一個(gè)為什么跪呈。他說(shuō)他不知道,但他們經(jīng)常移動(dòng)取逾。我想一定是因?yàn)橐氤晒υp騙銀行需要員工之間的合作庆械。這讓我意識(shí)到,在每個(gè)例子中隨機(jī)移除不同的神經(jīng)元子集菌赖,可以防止陰謀缭乘,從而減少過(guò)擬合。核心思想是在一個(gè)層的輸出值中引入噪聲可以打破那些不重要的偶發(fā)事件模式(Hinton稱(chēng)之為陰謀)琉用,如果沒(méi)有噪聲存在堕绩,網(wǎng)絡(luò)就會(huì)開(kāi)始記憶這些模式。
在Keras中邑时,您可以通過(guò)dropout層在網(wǎng)絡(luò)中引入dropout奴紧,它適用于它前面的層的輸出:
model.add(layers.Dropout(0.5))
讓我們?cè)贗MDB網(wǎng)絡(luò)中添加兩個(gè)Dropout層,看看它們?cè)跍p少過(guò)擬合方面做得如何晶丘。
Listing 4.8 Adding dropout to the IMDB network
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))
圖4.9顯示了結(jié)果的圖表黍氮。同樣,這是對(duì)參考網(wǎng)絡(luò)的明顯改進(jìn)浅浮。
綜上所述沫浆,以下是防止神經(jīng)網(wǎng)絡(luò)過(guò)擬合最常見(jiàn)的方法:
- 得到更多的訓(xùn)練數(shù)據(jù)。
- 減少網(wǎng)絡(luò)的能力滚秩。
- 添加權(quán)值正規(guī)化专执。
- 添加Dropout。
4.5機(jī)器學(xué)習(xí)的通用工作流
在本節(jié)中郁油,我們將展示一個(gè)通用藍(lán)圖本股,您可以使用它來(lái)攻破和解決任何機(jī)器學(xué)習(xí)問(wèn)題。藍(lán)圖把你在這一章學(xué)到的概念聯(lián)系在一起:問(wèn)題定義桐腌,評(píng)估拄显,特性工程,和解決過(guò)擬合案站。
4.5.1定義問(wèn)題并組裝數(shù)據(jù)集
首先躬审,您必須定義手邊的問(wèn)題:
- 您的輸入數(shù)據(jù)是什么?你想預(yù)測(cè)什么?只有當(dāng)你有可用的訓(xùn)練數(shù)據(jù)時(shí),你才能學(xué)會(huì)預(yù)測(cè):例如,只有當(dāng)你有可用的電影評(píng)論和情感注釋時(shí)盒件,你才能學(xué)會(huì)對(duì)電影評(píng)論的情緒進(jìn)行分類(lèi)蹬碧。因此,數(shù)據(jù)可用性通常是這個(gè)階段的限制因素(除非你有辦法付錢(qián)讓別人幫你收集數(shù)據(jù))炒刁。
- 你面臨什么樣的問(wèn)題?是二分類(lèi)嗎?多分類(lèi)?標(biāo)量回歸?向量回歸?多分類(lèi)多標(biāo)簽分類(lèi)問(wèn)題?
其他的東西恩沽,比如聚類(lèi)、生成或強(qiáng)化學(xué)習(xí)?識(shí)別問(wèn)題類(lèi)型將指導(dǎo)您選擇模型體系結(jié)構(gòu)翔始、損失函數(shù)等罗心。
除非您知道您的輸入和輸出是什么,以及您將使用什么數(shù)據(jù)城瞎,否則您無(wú)法進(jìn)入下一個(gè)階段渤闷。注意你在這個(gè)階段所做的假設(shè): - 你假設(shè)你的輸出可以通過(guò)你的輸入來(lái)預(yù)測(cè)。
- 你假設(shè)您的可用數(shù)據(jù)具有足夠的信息來(lái)了解輸入和輸出之間的關(guān)系脖镀。
在你有一個(gè)可行的模型之前飒箭,這些僅僅是假設(shè),等待著被證實(shí)或失效蜒灰。不是所有的問(wèn)題都能解決;僅僅因?yàn)槟阊b配了輸入X和目標(biāo)Y的樣本并不意味著X包含足夠的信息來(lái)預(yù)測(cè)弦蹂。例如,如果你試圖預(yù)測(cè)某只股票在股票市場(chǎng)上的走勢(shì)强窖,考慮到它最近的歷史價(jià)格凸椿,你不太可能成功,因?yàn)闅v史價(jià)格不包含太多的預(yù)測(cè)信息翅溺。
你應(yīng)該知道的一類(lèi)不可解問(wèn)題是非平穩(wěn)問(wèn)題(nonstationary problems)脑漫。假設(shè)您正在嘗試構(gòu)建一個(gè)服裝推薦引擎,您正在對(duì)它為期一個(gè)月的數(shù)據(jù)進(jìn)行訓(xùn)練(8月份)咙崎,并且希望在冬季開(kāi)始生成推薦优幸。一個(gè)大問(wèn)題是,人們購(gòu)買(mǎi)的服裝種類(lèi)隨季節(jié)而變化:購(gòu)買(mǎi)服裝在幾個(gè)月的時(shí)間里是一種非固定的現(xiàn)象叙凡。你試圖建立的模型會(huì)隨著時(shí)間而改變劈伴。在這種情況下,正確的做法是不斷地根據(jù)最近的數(shù)據(jù)重新訓(xùn)練您的模型握爷,或者在問(wèn)題穩(wěn)定的時(shí)間段收集數(shù)據(jù)。對(duì)于像買(mǎi)衣服這樣的周期性問(wèn)題严里,幾年的數(shù)據(jù)就足以捕捉到季節(jié)的變化——但是記住把一年中的時(shí)間作為你的模型的輸入!(備注:機(jī)器學(xué)習(xí)沒(méi)法解決非平穩(wěn)序列新啼,其實(shí)也好理解,非平穩(wěn)序列中刹碾,你的訓(xùn)練數(shù)據(jù)與用來(lái)預(yù)測(cè)的數(shù)據(jù)間的關(guān)聯(lián)信息應(yīng)該很少燥撞。當(dāng)然例子中如果在同一個(gè)季節(jié)內(nèi)部的預(yù)測(cè),那就屬于一個(gè)平穩(wěn)序列了)
記住,機(jī)器學(xué)習(xí)只能用于記憶訓(xùn)練數(shù)據(jù)中的模式物舒。
你只能認(rèn)出你以前看到的東西色洞。通過(guò)對(duì)過(guò)去數(shù)據(jù)的機(jī)器學(xué)習(xí)來(lái)預(yù)測(cè)未來(lái),是在假設(shè)未來(lái)會(huì)像過(guò)去一樣冠胯。通常情況并非如此火诸。
4.5.2選擇成功的標(biāo)準(zhǔn)
要控制某事,你需要能夠觀察它荠察。為了獲得成功置蜀,你必須定義你所說(shuō)的成功是什么——accuracy?Precision和recall?客戶保留利率?您的成功度量標(biāo)準(zhǔn)將指導(dǎo)損失函數(shù)的選擇:您的模型將如何優(yōu)化。它應(yīng)該直接與你的更高層次的目標(biāo)相一致悉盆,比如你事業(yè)的成功盯荤。
對(duì)于均衡分類(lèi)問(wèn)題,每個(gè)類(lèi)都是等概率的焕盟,receiver operating特性曲線(ROC AUC)下的accuracy和面積是常用的度量標(biāo)準(zhǔn)秋秤。對(duì)于分類(lèi)不平衡的問(wèn)題,可以使用precision和recall脚翘。對(duì)于排序問(wèn)題或多標(biāo)簽分類(lèi)航缀,可以使用平均精度(mean average precision)。而且堰怨,需要定義自己的標(biāo)準(zhǔn)來(lái)衡量成功的情況并不少見(jiàn)芥玉。要了解機(jī)器學(xué)習(xí)成功指標(biāo)的多樣性以及它們?nèi)绾闻c不同的問(wèn)題領(lǐng)域相關(guān)聯(lián),瀏覽data science com網(wǎng)站是很有幫助的备图。
4.5.3 決策評(píng)估方法
一旦你知道你的目標(biāo)是什么灿巧,你必須確定如何衡量你目前的進(jìn)展。我們之前回顧了三個(gè)常見(jiàn)的評(píng)估方案:
- 保持一個(gè)保留驗(yàn)證集的方法:當(dāng)你有足夠的數(shù)據(jù)
- 執(zhí)行K-fold cross-validation:當(dāng)你只有少量的樣本用于保留驗(yàn)證時(shí)揽涮,該選擇是明知可靠的選擇
- 執(zhí)行迭代K-fold驗(yàn)證:在可用數(shù)據(jù)很少的情況下執(zhí)行高度精確的模型評(píng)估
選一個(gè)吧抠藕。在大多數(shù)情況下,第一種方法都能很好地工作蒋困。
4.5.4 準(zhǔn)備數(shù)據(jù)
一旦你知道你在訓(xùn)練什么盾似,你在優(yōu)化什么,以及如何評(píng)估你的方法雪标,你就幾乎準(zhǔn)備好開(kāi)始訓(xùn)練模型了零院。但首先,你應(yīng)該以一種可以被輸入機(jī)器學(xué)習(xí)模型的方式來(lái)格式化你的數(shù)據(jù)——在這里村刨,我們假設(shè)一個(gè)深層神經(jīng)網(wǎng)絡(luò):
- 如前所述告抄,數(shù)據(jù)應(yīng)該格式化為張量。
- 張量中的值通常應(yīng)該按比例縮小到較小的值:例如在[-1,1]或[0,1]之間嵌牺。
- 如果不同的特征采用不同范圍(異構(gòu)數(shù)據(jù))的值打洼,則應(yīng)該對(duì)數(shù)據(jù)進(jìn)行歸一化(normalized)
- 可能需要一些特性工程龄糊,特別是對(duì)于小數(shù)據(jù)問(wèn)題
一旦輸入數(shù)據(jù)和目標(biāo)數(shù)據(jù)的張量就緒,就可以開(kāi)始訓(xùn)練模型募疮。
4.5.5開(kāi)發(fā)一個(gè)比基線更好的模型
您在此階段的目標(biāo)是實(shí)現(xiàn)統(tǒng)計(jì)能力(statistical power):即開(kāi)發(fā)一個(gè)能夠超過(guò)靜默基線的小型模型炫惩。在MNIST digit-classification示例中,任何accuracy達(dá)到0.1以上的都可以稱(chēng)為具有統(tǒng)計(jì)能力;在IMDB示例中阿浓,它的accuracy要求大于0.5他嚷。
注意,實(shí)現(xiàn)統(tǒng)計(jì)能力并不總是可能的搔扁。如果在嘗試了多個(gè)合理的體系結(jié)構(gòu)之后爸舒,您不能打破一個(gè)隨機(jī)的基線,那么您所問(wèn)問(wèn)題的答案可能不會(huì)出現(xiàn)在輸入數(shù)據(jù)中稿蹲。記住你做了兩個(gè)假設(shè):
- 你假設(shè)你的輸出可以預(yù)測(cè)給定輸入扭勉。
- 您假設(shè)可用的數(shù)據(jù)足以提供足夠的信息來(lái)了解輸入和輸出之間的關(guān)系。
很可能這些假設(shè)是錯(cuò)誤的苛聘,在這種情況下涂炎,你必須回到繪圖板(就是說(shuō)要重新開(kāi)始設(shè)計(jì))。
假設(shè)一切順利设哗,您需要做出三個(gè)關(guān)鍵選擇來(lái)構(gòu)建您的第一個(gè)工作模型:
- 最后一層的激活函數(shù)(Last-layer activation):它建立了網(wǎng)絡(luò)輸出的有用約束唱捣。例如,IMDB分類(lèi)示例在最后一層使用了sigmoid;回歸示例沒(méi)有在最后一層使用任何激活函數(shù)等等网梢。
- 損失函數(shù)——這應(yīng)該與您試圖解決的問(wèn)題類(lèi)型相匹配震缭。例如,IMDB示例使用binary_crossentropy战虏,回歸示例使用mse等等拣宰。
-
優(yōu)化配置——您將使用什么優(yōu)化器?它的學(xué)習(xí)率是多少?在大多數(shù)情況下,使用rmsprop烦感,并配合它的默認(rèn)學(xué)習(xí)率是安全的巡社。
關(guān)于損失函數(shù)的選擇,請(qǐng)注意手趣,并不是總是能夠直接優(yōu)化用于度量問(wèn)題成功與否的度量標(biāo)準(zhǔn)晌该。有時(shí),沒(méi)有簡(jiǎn)單的方法可以將度量轉(zhuǎn)換為損失函數(shù);畢竟绿渣,損失函數(shù)只需要給定一小批(mini-batch)數(shù)據(jù)就可以計(jì)算(理想情況下朝群,損失函數(shù)只需要計(jì)算單個(gè)數(shù)據(jù)點(diǎn)),并且必須是可微的(否則怯晕,您不能使用反向傳播來(lái)訓(xùn)練網(wǎng)絡(luò))潜圃。例如,廣泛使用的分類(lèi)度量ROC AUC不能直接進(jìn)行優(yōu)化舟茶。因此,在分類(lèi)任務(wù)中,通常會(huì)優(yōu)化ROC AUC的代理度量吧凉,比如交叉熵隧出。一般來(lái)說(shuō),你可以希望交叉熵越低阀捅,ROC AUC就越高胀瞪。
表4.1為模型選擇正確的最后一層激活和損失函數(shù)
4.5.6 擴(kuò)展:開(kāi)發(fā)一個(gè)過(guò)擬合的模型
一旦你得到了一個(gè)具有統(tǒng)計(jì)能力的模型,問(wèn)題就變成了饲鄙,你的模型是否足夠強(qiáng)大?它是否有足夠的層和參數(shù)來(lái)正確地建模手邊的問(wèn)題?例如凄诞,一個(gè)只有一個(gè)隱藏層和兩個(gè)單元的網(wǎng)絡(luò)在MNIST上具有統(tǒng)計(jì)能力,但不足以很好地解決這個(gè)問(wèn)題忍级。記住帆谍,機(jī)器學(xué)習(xí)中的廣義張量是在優(yōu)化和泛化之間;理想的模型是在不完全擬合和過(guò)度擬合之間的邊界;在undercapacity和overcapacity之間。想弄清楚這條邊界在哪里轴咱,你必須先穿過(guò)它汛蝙。
為了弄清楚您需要多大的模型,您必須開(kāi)發(fā)一個(gè)過(guò)擬合的模型朴肺。
這很簡(jiǎn)單:
- 添加層
- 使得層更大
- 在更多的epochs中訓(xùn)練
始終監(jiān)控訓(xùn)練損失和驗(yàn)證損失窖剑,以及您關(guān)心的任何指標(biāo)的訓(xùn)練和驗(yàn)證值。當(dāng)您看到模型在驗(yàn)證數(shù)據(jù)上的性能開(kāi)始下降時(shí)戈稿,您已經(jīng)實(shí)現(xiàn)了過(guò)擬合西土。
下一個(gè)階段是開(kāi)始對(duì)模型進(jìn)行正則化(regularizing)和調(diào)優(yōu),以盡可能接近既欠擬合也不過(guò)擬合的理想模型鞍盗。
4.5.7模型正則化需了,調(diào)整超參數(shù)
這個(gè)步驟將花費(fèi)最多的時(shí)間:您將反復(fù)修改模型,訓(xùn)練它橡疼,評(píng)估您的驗(yàn)證數(shù)據(jù)(此時(shí)不是測(cè)試數(shù)據(jù))援所,再次修改它,然后重復(fù)欣除,直到模型達(dá)到最佳狀態(tài)住拭。以下是一些你應(yīng)該嘗試的事情:
- 添加dropout
- 嘗試不同的架構(gòu):添加或移除層
- 添加L1和L2正則化(regularization)
- 嘗試不同的超參數(shù)(例如每層單元的數(shù)量或優(yōu)化器的學(xué)習(xí)率)來(lái)找到最佳配置。
- 可選地历帚,迭代特性工程:添加新特征滔岳,或刪除那些看起來(lái)不提供信息的特征。
注意以下內(nèi)容:每次使用驗(yàn)證過(guò)程的反饋來(lái)優(yōu)化模型時(shí)挽牢,您都會(huì)將驗(yàn)證過(guò)程的信息泄漏到模型中谱煤。重復(fù)幾次,這是無(wú)害的;但是在多次迭代中系統(tǒng)地完成禽拔,最終會(huì)導(dǎo)致您的模型過(guò)擬合驗(yàn)證過(guò)程(即使模型沒(méi)有直接針對(duì)任何驗(yàn)證數(shù)據(jù)進(jìn)行訓(xùn)練)刘离。這使得評(píng)估過(guò)程不那么可靠室叉。
一旦你建立了一個(gè)令人滿意的模型配置,您可以在所有可用數(shù)據(jù)(訓(xùn)練和驗(yàn)證)上訓(xùn)練您的最終產(chǎn)品模型,并在測(cè)試集中最后一次評(píng)估它硫惕。如果測(cè)試集上的性能明顯低于驗(yàn)證數(shù)據(jù)上的性能茧痕,這可能意味著您的驗(yàn)證過(guò)程根本不可靠,或者您在調(diào)優(yōu)模型參數(shù)時(shí)開(kāi)始度擬合驗(yàn)證數(shù)據(jù)恼除。在這種情況下踪旷,您可能希望切換到更可靠的評(píng)估協(xié)議(例如迭代K-fold驗(yàn)證)。
章節(jié)總結(jié)
- 定義手頭的問(wèn)題和要訓(xùn)練的數(shù)據(jù)豁辉。收集這些數(shù)據(jù)令野,或者在需要時(shí)用標(biāo)簽對(duì)其進(jìn)行注釋。
- 選擇在你的問(wèn)題上如何衡量成功徽级。您將在驗(yàn)證數(shù)據(jù)上監(jiān)視哪些指標(biāo)?
- 確定評(píng)估方法:保留驗(yàn)證?K-fold驗(yàn)證?應(yīng)該使用哪一部分?jǐn)?shù)據(jù)進(jìn)行驗(yàn)證?
- 開(kāi)發(fā)第一個(gè)比基本基線更好的模型:一個(gè)具有統(tǒng)計(jì)能力的模型气破。
- 開(kāi)發(fā)一個(gè)過(guò)擬合的模型。
- 根據(jù)驗(yàn)證數(shù)據(jù)的性能灰追,調(diào)整模型并調(diào)優(yōu)其超參數(shù)堵幽。很多機(jī)器學(xué)習(xí)研究?jī)A向于只關(guān)注這一步,但要把大局記在心里弹澎。
備注:
1朴下,用sigmoid作為激活函數(shù),為什么往往損失函數(shù)選用binary_crossentropy
參考地址:https://blog.csdn.net/wtq1993/article/details/51741471
2,softmax與categorical_crossentropy的關(guān)系苦蒿,以及sigmoid與bianry_crossentropy的關(guān)系殴胧。
參考地址:https://www.zhihu.com/question/36307214
3,各大損失函數(shù)的定義:MSE,MAE,MAPE,hinge,squad_hinge,binary_crossentropy等
參考地址:https://www.cnblogs.com/laurdawn/p/5841192.html