小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

 taotao_2016 2020-06-21

來(lái)源:Datawhale

本文約6000字,建議閱讀10+分鐘

本文以圖文的形式對(duì)模型算法中的集成學(xué)習(xí),以及對(duì)集中學(xué)習(xí)在深度學(xué)習(xí)中的應(yīng)用進(jìn)行了詳細(xì)解讀。

標(biāo)簽:機(jī)器學(xué)習(xí)

數(shù)據(jù)及背景

阿里天池-零基礎(chǔ)入門(mén)CV賽事:

https://tianchi.aliyun.com/competition/entrance/531795/introduction

集成學(xué)習(xí)

集成學(xué)習(xí),即分類器集成,通過(guò)構(gòu)建并結(jié)合多個(gè)學(xué)習(xí)器來(lái)完成學(xué)習(xí)任務(wù)。一般結(jié)構(gòu)是:先產(chǎn)生一組“個(gè)體學(xué)習(xí)器”,再用某種策略將它們結(jié)合起來(lái)。結(jié)合策略主要有平均法、投票法和學(xué)習(xí)法等。集成學(xué)習(xí)(ensemble learning)通過(guò)構(gòu)建并結(jié)合多個(gè)學(xué)習(xí)器來(lái)完成學(xué)習(xí)任務(wù),有時(shí)也被稱為多分類器系統(tǒng)(multi-classifier system)、基于委員會(huì)的學(xué)習(xí)(committee-based learning)。

集成學(xué)習(xí)是這樣一個(gè)過(guò)程,按照某種算法生成多個(gè)模型,如分類器或者稱為專家,再將這些模型按照某種方法組合在一起來(lái)解決某個(gè)智能計(jì)算問(wèn)題。集成學(xué)習(xí)主要用來(lái)提高模型(分類,預(yù)測(cè),函數(shù)估計(jì)等)的性能,或者用來(lái)降低模型選擇不當(dāng)?shù)目赡苄?。集成算法本身是一種監(jiān)督學(xué)習(xí)算法,因?yàn)樗梢员挥?xùn)練然后進(jìn)行預(yù)測(cè),組合的多個(gè)模型作為整體代表一個(gè)假設(shè)(hypothesis)。

集成方法是將幾種機(jī)器學(xué)習(xí)技術(shù)組合成一個(gè)預(yù)測(cè)模型的元算法,以達(dá)到減小方差(bagging)、偏差(boosting) 或改進(jìn)預(yù)測(cè)(stacking) 的效果。

分類器(Classifier)

分類器是數(shù)據(jù)挖掘中對(duì)樣本進(jìn)行分類的方法的統(tǒng)稱,包含決策樹(shù)、邏輯回歸、樸素貝葉斯、神經(jīng)網(wǎng)絡(luò)等算法。分類是數(shù)據(jù)挖掘的一種非常重要的方法。分類的概念是在已有數(shù)據(jù)的基礎(chǔ)上學(xué)會(huì)一個(gè)分類函數(shù)或構(gòu)造出一個(gè)分類模型(即分類器)。該函數(shù)或模型能夠把數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄映射到給定類別中的某一個(gè),從而可以應(yīng)用于數(shù)據(jù)預(yù)測(cè)。

分類器的構(gòu)造和實(shí)施大體會(huì)經(jīng)過(guò)以下幾個(gè)步驟:

  • 選定樣本(包含正樣本和負(fù)樣本),將所有樣本分成訓(xùn)練樣本和測(cè)試樣本兩部分。
  • 在訓(xùn)練樣本上執(zhí)行分類器算法,生成分類模型。
  • 在測(cè)試樣本上執(zhí)行分類模型,生成預(yù)測(cè)結(jié)果。
  • 根據(jù)預(yù)測(cè)結(jié)果,計(jì)算必要的評(píng)估指標(biāo),評(píng)估分類模型的性能。

1. 決策樹(shù)分類器

構(gòu)造這個(gè)分類器不需要任何領(lǐng)域的知識(shí),也不需要任何的參數(shù)設(shè)置。因此它特別適合于探測(cè)式的知識(shí)發(fā)現(xiàn)。此外,這個(gè)分類器還可以處理高維數(shù)據(jù),而且采用的是類似于樹(shù)這種形式,也特別直觀和便于理解。因此,決策樹(shù)是許多商業(yè)規(guī)則歸納系統(tǒng)的基礎(chǔ)。

2. 樸素貝葉斯分類器

素貝葉斯分類器是假設(shè)數(shù)據(jù)樣本特征完全獨(dú)立,以貝葉斯定理為基礎(chǔ)的簡(jiǎn)單概率分類器。

3. AdaBoost算法

AdaBoost算法的自適應(yīng)在于前一個(gè)分類器產(chǎn)生的錯(cuò)誤分類樣本會(huì)被用來(lái)訓(xùn)練下一個(gè)分類器,從而提升分類準(zhǔn)確率,但是對(duì)于噪聲樣本和異常樣本比較敏感。

4. 支持向量機(jī)

支持向量機(jī)是用過(guò)構(gòu)建一個(gè)或者多個(gè)高維的超平面來(lái)將樣本數(shù)據(jù)進(jìn)行劃分,超平面即為樣本之間的分類邊界。

5. K近鄰算法

基于k近鄰的K個(gè)樣本作為分析從而簡(jiǎn)化計(jì)算提升效率,K近鄰算法分類器是基于距離計(jì)算的分類器。

集成學(xué)習(xí)方法

集成學(xué)習(xí)有許多集成模型,例如自助法、自助聚合(Bagging)、隨機(jī)森林、提升法(Boosting)、堆疊法(stacking)以及許多其它的基礎(chǔ)集成學(xué)習(xí)模型。

集成方法的思想是通過(guò)將這些個(gè)體學(xué)習(xí)器(個(gè)體學(xué)習(xí)器稱為“基學(xué)習(xí)器”,基學(xué)習(xí)器也被稱為弱學(xué)習(xí)器。)的偏置和/或方差結(jié)合起來(lái),從而創(chuàng)建一個(gè)強(qiáng)學(xué)習(xí)器(或集成模型),從而獲得更好的性能。

我們可以用三種主要的旨在組合弱學(xué)習(xí)器的元算法:

  • 自助聚合(Bagging),該方法通??紤]的是同質(zhì)弱學(xué)習(xí)器,相互獨(dú)立地并行學(xué)習(xí)這些弱學(xué)習(xí)器,并按照某種確定性的平均過(guò)程將它們組合起來(lái)。
  • 提升法(Boosting),該方法通??紤]的也是同質(zhì)弱學(xué)習(xí)器。它以一種高度自適應(yīng)的方法順序地學(xué)習(xí)這些弱學(xué)習(xí)器(每個(gè)基礎(chǔ)模型都依賴于前面的模型),并按照某種確定性的策略將它們組合起來(lái)。
  • 堆疊法(Stacking),該方法通??紤]的是異質(zhì)弱學(xué)習(xí)器,并行地學(xué)習(xí)它們,并通過(guò)訓(xùn)練一個(gè) 元模型 將它們組合起來(lái),根據(jù)不同弱模型的預(yù)測(cè)結(jié)果輸出一個(gè)最終的預(yù)測(cè)結(jié)果。

非常粗略地說(shuō),我們可以說(shuō)Bagging的重點(diǎn)在于獲得一個(gè)方差比其組成部分更小的集成模型,而B(niǎo)oosting和Stacking則將主要生成偏置比其組成部分更低的強(qiáng)模型(即使方差也可以被減小)。

1. 自助聚合(Bagging)

在并行化的方法中,我們單獨(dú)擬合不同的學(xué)習(xí)器,因此可以同時(shí)訓(xùn)練它們。最著名的方法是自助聚合(Bagging),它的目標(biāo)是生成比單個(gè)模型更棒的集成模型。Bagging的方法實(shí)現(xiàn)。

自助法:這種統(tǒng)計(jì)技術(shù)先隨機(jī)抽取出作為替代的 B 個(gè)觀測(cè)值,然后根據(jù)一個(gè)規(guī)模為 N 的初始數(shù)據(jù)集生成大小為 B 的樣本(稱為自助樣本)。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

在某些假設(shè)條件下,這些樣本具有非常好的統(tǒng)計(jì)特性:在一級(jí)近似中,它們可以被視為是直接從真實(shí)的底層(并且往往是未知的)數(shù)據(jù)分布中抽取出來(lái)的,并且彼此之間相互獨(dú)立。因此,它們被認(rèn)為是真實(shí)數(shù)據(jù)分布的代表性和獨(dú)立樣本(幾乎是獨(dú)立同分布的樣本)。

為了使這種近似成立,必須驗(yàn)證兩個(gè)方面的假設(shè):

  • 初始數(shù)據(jù)集的大小N應(yīng)該足夠大,以捕獲底層分布的大部分復(fù)雜性。這樣,從數(shù)據(jù)集中抽樣就是從真實(shí)分布中抽樣的良好近似(代表性);
  • 與自助樣本的大小B相比,數(shù)據(jù)集的規(guī)模N應(yīng)該足夠大,這樣樣本之間就不會(huì)有太大的相關(guān)性(獨(dú)立性)。注意,接下來(lái)我可能還會(huì)提到自助樣本的這些特性(代表性和獨(dú)立性),但讀者應(yīng)該始終牢記:這只是一種近似。

舉例而言,自助樣本通常用于評(píng)估統(tǒng)計(jì)估計(jì)量的方差或置信區(qū)間。根據(jù)定義,統(tǒng)計(jì)估計(jì)量是某些觀測(cè)值的函數(shù)。因此,隨機(jī)變量的方差是根據(jù)這些觀測(cè)值計(jì)算得到的。為了評(píng)估這種估計(jì)量的方差,我們需要對(duì)從感興趣分布中抽取出來(lái)的幾個(gè)獨(dú)立樣本進(jìn)行估計(jì)。

在大多數(shù)情況下,相較于實(shí)際可用的數(shù)據(jù)量來(lái)說(shuō),考慮真正獨(dú)立的樣本所需要的數(shù)據(jù)量可能太大了。然而,我們可以使用自助法生成一些自助樣本,它們可被視為最具代表性以及最具獨(dú)立性(幾乎是獨(dú)立同分布的樣本)的樣本。這些自助樣本使我們可以通過(guò)估計(jì)每個(gè)樣本的值,近似得到估計(jì)量的方差。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

2. 提升法(Boosting)

在順序化的方法中,組合起來(lái)的不同弱模型之間不再相互獨(dú)立地?cái)M合。其思想是迭代地?cái)M合模型,使模型在給定步驟上的訓(xùn)練依賴于之前的步驟上擬合的模型。提升法(Boosting)是這些方法中最著名的一種,它生成的集成模型通常比組成該模型的弱學(xué)習(xí)器偏置更小。

Boosting和Bagging的工作思路是一樣的:我們構(gòu)建一系列模型,將它們聚合起來(lái)得到一個(gè)性能更好的強(qiáng)學(xué)習(xí)器。然而,與重點(diǎn)在于減小方差的Bagging不同,Boosting著眼于以一種適應(yīng)性很強(qiáng)的方式順序擬合多個(gè)弱學(xué)習(xí)器:序列中每個(gè)模型在擬合的過(guò)程中,會(huì)更加重視那些序列中之前的模型處理的很糟糕的觀測(cè)數(shù)據(jù)。

直觀地說(shuō),每個(gè)模型都把注意力集中在目前最難擬合的觀測(cè)數(shù)據(jù)上。這樣一來(lái),在這個(gè)過(guò)程的最后,我們就獲得了一個(gè)具有較低偏置的強(qiáng)學(xué)習(xí)器(我們會(huì)注意到,Boosting也有減小方差的效果)。和Bagging一樣,Boosting也可以用于回歸和分類問(wèn)題。由于其重點(diǎn)在于減小偏置,用于Boosting的基礎(chǔ)模型通常是那些低方差高偏置的模型。

例如,如果想要使用樹(shù)作為基礎(chǔ)模型,我們將主要選擇只有少許幾層的較淺決策樹(shù)。而選擇低方差高偏置模型作為Boosting弱學(xué)習(xí)器的另一個(gè)重要原因是:這些模型擬合的計(jì)算開(kāi)銷較低(參數(shù)化時(shí)自由度較低)。實(shí)際上,由于擬合不同模型的計(jì)算無(wú)法并行處理(與Bagging不同),順序地?cái)M合若干復(fù)雜模型會(huì)導(dǎo)致計(jì)算開(kāi)銷變得非常高。

一旦選定了弱學(xué)習(xí)器,我們?nèi)孕枰x它們的擬合方式和聚合方式。介紹兩個(gè)重要的Boosting算法:自適應(yīng)提升(adaboost)和梯度提升(gradient boosting)。

簡(jiǎn)而言之,這兩種元算法在順序化的過(guò)程中創(chuàng)建和聚合弱學(xué)習(xí)器的方式存在差異。自適應(yīng)提升算法會(huì)更新附加給每個(gè)訓(xùn)練數(shù)據(jù)集中觀測(cè)數(shù)據(jù)的權(quán)重,而梯度提升算法則會(huì)更新這些觀測(cè)數(shù)據(jù)的值。這里產(chǎn)生差異的主要原因是:兩種算法解決優(yōu)化問(wèn)題(尋找最佳模型——弱學(xué)習(xí)器的加權(quán)和)的方式不同。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

2.1. 自適應(yīng)adaboost

在自適應(yīng)adaboost中,我們將集成模型定義為L(zhǎng)個(gè)弱學(xué)習(xí)器的加權(quán)和:

其中為系數(shù),為弱學(xué)習(xí)器尋找這種最佳集成模型是一個(gè)困難的優(yōu)化問(wèn)題。因此,我們并沒(méi)打算一次性地解決該問(wèn)題(找到給出最佳整體加法模型的所有系數(shù)和弱學(xué)習(xí)器),而是使用了一種更易于處理的迭代優(yōu)化過(guò)程(即使它有可能導(dǎo)致我們得到次優(yōu)解)。另外,我們將弱學(xué)習(xí)器逐個(gè)添加到當(dāng)前的集成模型中,在每次迭代中尋找可能的最佳組合(系數(shù)、弱學(xué)習(xí)器)。換句話說(shuō),我們循環(huán)地將 定義如下:

其中,和被挑選出來(lái),使得是最適合訓(xùn)練數(shù)據(jù)的模型,因此這是對(duì) 的最佳可能改進(jìn)。我們可以進(jìn)一步將其表示為:

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

其中,是給定模型的擬合誤差,是損失/誤差函數(shù)。因此,我們并沒(méi)有在求和過(guò)程中對(duì)所有L個(gè)模型進(jìn)行「全局優(yōu)化」,而是通過(guò)「局部」優(yōu)化來(lái)近似最優(yōu)解并將弱學(xué)習(xí)器逐個(gè)添加到強(qiáng)模型中。

更特別的是,在考慮二分類問(wèn)題時(shí),我們可以將 adaboost 算法重新寫(xiě)入以下過(guò)程:首先,它將更新數(shù)據(jù)集中觀測(cè)數(shù)據(jù)的權(quán)重,訓(xùn)練一個(gè)新的弱學(xué)習(xí)器,該學(xué)習(xí)器重點(diǎn)關(guān)注當(dāng)前集成模型誤分類的觀測(cè)數(shù)據(jù)。其次,它會(huì)根據(jù)一個(gè)表示該弱模型性能的更新系數(shù),將弱學(xué)習(xí)器添加到加權(quán)和中:弱學(xué)習(xí)器的性能越好,它對(duì)強(qiáng)學(xué)習(xí)器的貢獻(xiàn)就越大。

因此,假設(shè)我們面對(duì)的是一個(gè)二分類問(wèn)題:數(shù)據(jù)集中有N個(gè)觀測(cè)數(shù)據(jù),我們想在給定一組弱模型的情況下使用adaboost算法。在算法的起始階段(序列中的第一個(gè)模型),所有的觀測(cè)數(shù)據(jù)都擁有相同的權(quán)重1/N。然后,我們將下面的步驟重復(fù)L次(作用于序列中的L個(gè)學(xué)習(xí)器):

  • 用當(dāng)前觀測(cè)數(shù)據(jù)的權(quán)重?cái)M合可能的最佳弱模型;
  • 計(jì)算更新系數(shù)的值,更新系數(shù)是弱學(xué)習(xí)器的某種標(biāo)量化評(píng)估指標(biāo),它表示相對(duì)集成模型來(lái)說(shuō),該弱學(xué)習(xí)器的分量如何;
  • 通過(guò)添加新的弱學(xué)習(xí)器與其更新系數(shù)的乘積來(lái)更新強(qiáng)學(xué)習(xí)器計(jì)算新觀測(cè)數(shù)據(jù)的權(quán)重,該權(quán)重表示我們想在下一輪迭代中關(guān)注哪些觀測(cè)數(shù)據(jù)(聚和模型預(yù)測(cè)錯(cuò)誤的觀測(cè)數(shù)據(jù)的權(quán)重增加,而正確預(yù)測(cè)的觀測(cè)數(shù)據(jù)的權(quán)重減?。?。

重復(fù)這些步驟,我們順序地構(gòu)建出L個(gè)模型,并將它們聚合成一個(gè)簡(jiǎn)單的線性組合,然后由表示每個(gè)學(xué)習(xí)器性能的系數(shù)加權(quán)。注意,初始adaboost算法有一些變體,比如LogitBoost(分類)或L2Boost(回歸),它們的差異主要取決于損失函數(shù)的選擇。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

3. 堆疊法(Stacking)

堆疊法Stacking與Bagging和Boosting主要存在兩方面的差異。首先,堆疊法通常考慮的是異質(zhì)弱學(xué)習(xí)器(不同的學(xué)習(xí)算法被組合在一起),而B(niǎo)agging和Boosting主要考慮的是同質(zhì)弱學(xué)習(xí)器。其次,stacking堆疊法學(xué)習(xí)用元模型組合基礎(chǔ)模型,而B(niǎo)agging和Boosting則根據(jù)確定性算法組合弱學(xué)習(xí)器。

正如上文已經(jīng)提到的,堆疊法的概念是學(xué)習(xí)幾個(gè)不同的弱學(xué)習(xí)器,并通過(guò)訓(xùn)練一個(gè)元模型來(lái)組合它們,然后基于這些弱模型返回的多個(gè)預(yù)測(cè)結(jié)果輸出最終的預(yù)測(cè)結(jié)果。

因此,為了構(gòu)建Stacking模型,我們需要定義兩個(gè)東西:想要擬合的L個(gè)學(xué)習(xí)器以及組合它們的元模型。例如,對(duì)于分類問(wèn)題來(lái)說(shuō),我們可以選擇KNN分類器、logistic回歸和SVM作為弱學(xué)習(xí)器,并決定學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)作為元模型。然后,神經(jīng)網(wǎng)絡(luò)將會(huì)把三個(gè)弱學(xué)習(xí)器的輸出作為輸入,并返回基于該輸入的最終預(yù)測(cè)。所以,假設(shè)我們想要擬合由L個(gè)弱學(xué)習(xí)器組成的Stacking集成模型。我們必須遵循以下步驟:

  • 將訓(xùn)練數(shù)據(jù)分為兩組;
  • 選擇 L 個(gè)弱學(xué)習(xí)器,用它們擬合第一組數(shù)據(jù);
  • 使 L 個(gè)學(xué)習(xí)器中的每個(gè)學(xué)習(xí)器對(duì)第二組數(shù)據(jù)中的觀測(cè)數(shù)據(jù)進(jìn)行預(yù)測(cè);
  • 在第二組數(shù)據(jù)上擬合元模型,使用弱學(xué)習(xí)器做出的預(yù)測(cè)作為輸入。

在前面的步驟中,我們將數(shù)據(jù)集一分為二,因?yàn)閷?duì)用于訓(xùn)練弱學(xué)習(xí)器的數(shù)據(jù)的預(yù)測(cè)與元模型的訓(xùn)練不相關(guān)。因此,將數(shù)據(jù)集分成兩部分的一個(gè)明顯缺點(diǎn)是,我們只有一半的數(shù)據(jù)用于訓(xùn)練基礎(chǔ)模型,另一半數(shù)據(jù)用于訓(xùn)練元模型。

為了克服這種限制,我們可以使用某種k-折交叉訓(xùn)練方法(類似于 k-折交叉驗(yàn)證中的做法)。這樣所有的觀測(cè)數(shù)據(jù)都可以用來(lái)訓(xùn)練元模型:對(duì)于任意的觀測(cè)數(shù)據(jù),弱學(xué)習(xí)器的預(yù)測(cè)都是通過(guò)在k-1折數(shù)據(jù)(不包含已考慮的觀測(cè)數(shù)據(jù))上訓(xùn)練這些弱學(xué)習(xí)器的實(shí)例來(lái)完成的。換句話說(shuō),它會(huì)在k-1折數(shù)據(jù)上進(jìn)行訓(xùn)練,從而對(duì)剩下的一折數(shù)據(jù)進(jìn)行預(yù)測(cè)。迭代地重復(fù)這個(gè)過(guò)程,就可以得到對(duì)任何一折觀測(cè)數(shù)據(jù)的預(yù)測(cè)結(jié)果。這樣一來(lái),我們就可以為數(shù)據(jù)集中的每個(gè)觀測(cè)數(shù)據(jù)生成相關(guān)的預(yù)測(cè),然后使用所有這些預(yù)測(cè)結(jié)果訓(xùn)練元模型。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

十折交叉驗(yàn)證

由于深度學(xué)習(xí)模型一般需要較長(zhǎng)的訓(xùn)練周期,如果硬件設(shè)備不允許建議選取留出法,如果需要追求精度可以使用交叉驗(yàn)證的方法。

十折交叉驗(yàn)證用來(lái)測(cè)試算法準(zhǔn)確性。將數(shù)據(jù)集分成十份,輪流將其中九份作為訓(xùn)練數(shù)據(jù),一份作為測(cè)試數(shù)據(jù),進(jìn)行試驗(yàn)。每次試驗(yàn)都會(huì)得出相應(yīng)的正確率(或差錯(cuò)率)。十次的結(jié)果的正確率(或差錯(cuò)率)的平均值作為對(duì)算法精度的估計(jì),一般還需要進(jìn)行多次十折交叉驗(yàn)證(例如十次十折交叉驗(yàn)證),再求其均值,作為對(duì)算法準(zhǔn)確性的估計(jì)。

下面假設(shè)構(gòu)建了十折交叉驗(yàn)證,訓(xùn)練得到十個(gè)CNN模型。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

那么在十個(gè)CNN模型可以使用如下方式進(jìn)行集成:

  • 對(duì)預(yù)測(cè)的結(jié)果的概率值進(jìn)行平均,然后解碼為具體字符;
  • 對(duì)預(yù)測(cè)的字符進(jìn)行投票,得到最終字符。
深度學(xué)習(xí)中的集成學(xué)習(xí)

此外在深度學(xué)習(xí)中本身還有一些集成學(xué)習(xí)思路的做法,值得借鑒學(xué)習(xí):

  • 丟棄法Dropout
  • 測(cè)試集數(shù)據(jù)擴(kuò)增TTA
  • Snapshot

1. 丟棄法Dropout

Dropout可以作為訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的一種技巧。在每個(gè)訓(xùn)練批次中,通過(guò)隨機(jī)讓一部分的節(jié)點(diǎn)停止工作。同時(shí)在預(yù)測(cè)的過(guò)程中讓所有的節(jié)點(diǎn)都起作用。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

Dropout經(jīng)常出現(xiàn)在在先有的CNN網(wǎng)絡(luò)中,可以有效的緩解模型過(guò)擬合的情況,也可以在預(yù)測(cè)時(shí)增加模型的精度。加入Dropout后的網(wǎng)絡(luò)結(jié)構(gòu)如下:

# 定義模型class SVHN_Model1(nn.Module): def __init__(self): super(SVHN_Model1, self).__init__() # CNN提取特征模塊 self.cnn = nn.Sequential( nn.Conv2d(3, 16, kernel_size=(3, 3), stride=(2, 2)), nn.ReLU(), nn.Dropout(0.25), nn.MaxPool2d(2), nn.Conv2d(16, 32, kernel_size=(3, 3), stride=(2, 2)), nn.ReLU(), nn.Dropout(0.25), nn.MaxPool2d(2), ) # self.fc1 = nn.Linear(32*3*7, 11) self.fc2 = nn.Linear(32*3*7, 11) self.fc3 = nn.Linear(32*3*7, 11) self.fc4 = nn.Linear(32*3*7, 11) self.fc5 = nn.Linear(32*3*7, 11) self.fc6 = nn.Linear(32*3*7, 11) def forward(self, img): feat = self.cnn(img) feat = feat.view(feat.shape[0], -1) c1 = self.fc1(feat) c2 = self.fc2(feat) c3 = self.fc3(feat) c4 = self.fc4(feat) c5 = self.fc5(feat) c6 = self.fc6(feat) return c1, c2, c3, c4, c5, c6

2. 測(cè)試集數(shù)據(jù)擴(kuò)增TTA

測(cè)試集數(shù)據(jù)擴(kuò)增(Test Time Augmentation,簡(jiǎn)稱TTA)也是常用的集成學(xué)習(xí)技巧,數(shù)據(jù)擴(kuò)增不僅可以在訓(xùn)練時(shí)候用,而且可以同樣在預(yù)測(cè)時(shí)候進(jìn)行數(shù)據(jù)擴(kuò)增,對(duì)同一個(gè)樣本預(yù)測(cè)三次,然后對(duì)三次結(jié)果進(jìn)行平均。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

def predict(test_loader, model, tta=10):   model.eval()   test_pred_tta = None   # TTA 次數(shù)   for _ in range(tta):       test_pred = []       with torch.no_grad():           for i, (input, target) in enumerate(test_loader):               c0, c1, c2, c3, c4, c5 = model(data[0])               output = np.concatenate([c0.data.numpy(), c1.data.numpy(),                  c2.data.numpy(), c3.data.numpy(),                  c4.data.numpy(), c5.data.numpy()], axis=1)               test_pred.append(output)       test_pred = np.vstack(test_pred)       if test_pred_tta is None:           test_pred_tta = test_pred       else:           test_pred_tta += test_pred   return test_pred_tta

Snapshot

本章的開(kāi)頭已經(jīng)提到,假設(shè)我們訓(xùn)練了10個(gè)CNN則可以將多個(gè)模型的預(yù)測(cè)結(jié)果進(jìn)行平均。但是加入只訓(xùn)練了一個(gè)CNN模型,如何做模型集成呢?

在論文Snapshot Ensembles中,作者提出使用cyclical learning rate進(jìn)行訓(xùn)練模型,并保存精度比較好的一些checkopint,最后將多個(gè)checkpoint進(jìn)行模型集成。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

由于在cyclical learning rate中學(xué)習(xí)率的變化有周期性變大和減少的行為,因此CNN模型很有可能在跳出局部最優(yōu)進(jìn)入另一個(gè)局部最優(yōu)。在Snapshot論文中作者通過(guò)使用表明,此種方法可以在一定程度上提高模型精度,但需要更長(zhǎng)的訓(xùn)練時(shí)間。

基礎(chǔ)通俗講解集成學(xué)習(xí)算法

寫(xiě)到最后

在不同的任務(wù)中可能會(huì)有不同的解決方案,不同思路的模型不僅可以互相借鑒,同時(shí)也可以修正最終的預(yù)測(cè)結(jié)果。

在本次賽題中,可以從以下幾個(gè)思路對(duì)預(yù)測(cè)結(jié)果進(jìn)行后處理:

  • 統(tǒng)計(jì)圖片中每個(gè)位置字符出現(xiàn)的頻率,使用規(guī)則修正結(jié)果;
  • 單獨(dú)訓(xùn)練一個(gè)字符長(zhǎng)度預(yù)測(cè)模型,用來(lái)預(yù)測(cè)圖片中字符個(gè)數(shù),并修正結(jié)果。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多