丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能 正文
發(fā)私信給汪思穎
發(fā)送

0

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

本文作者: 汪思穎 2017-08-10 09:33
導(dǎo)語:Kaggle 是全世界首屈一指的數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)開發(fā)者社區(qū)和競賽平臺,來看看 Kaggle 亞馬遜雨林比賽金牌團(tuán)隊的經(jīng)驗分享吧。

雷鋒網(wǎng)  AI 研習(xí)社按: Kaggle 是全世界首屈一指的數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)開發(fā)者社區(qū)和競賽平臺,來看看 Kaggle 亞馬遜雨林比賽金牌團(tuán)隊的經(jīng)驗分享吧。

日前,雷鋒網(wǎng) AI 研習(xí)社組織的學(xué)術(shù)青年分享會中,中山大學(xué)CIS實驗室的研二學(xué)生劉思聰為我們帶來了一場精彩的分享。他所在的隊伍在 Kaggle 上的亞馬遜比賽中獲得了金牌,在這次的分享上,他為我們詳述了比賽過程中所獲得的經(jīng)驗以及圖像比賽中的一些通用套路。

下面是他的分享內(nèi)容,雷鋒網(wǎng) AI 研習(xí)社做了不改變原意的編輯整理:

大家好,我叫劉思聰,來自中山大學(xué)CIS實驗室。我們前段時間參加了Kaggle上面一個亞馬遜雨林的衛(wèi)星圖像比賽,取得了不錯的成績,然后也得到了一些經(jīng)驗,今天就給大家分享一些我們總結(jié)的圖像比賽經(jīng)常用到的套路。

我會對比賽做一個簡單的介紹,講一些通用的方法,比如模型的構(gòu)建、分析、改善,以及比賽中我們的一些數(shù)據(jù)增強(qiáng)案例。另外,K折交叉驗證在Kaggle比賽中,不管是圖像比賽還是文本比賽都是比較常用的一個方法,我會講一下為什么我們要做K折交叉驗證以及我們在劃分K折的時候有哪些要注意的點(diǎn)。然后我會講在Kaggle比賽中模型集成上涉及到的技巧,最后會介紹一下我們隊伍的基本情況。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

先大致的說一下這個比賽,很多人看到名字后會誤以為這是亞馬遜公司辦的比賽,其實這兩者完全沒有關(guān)系。它之所以被叫亞馬遜是因為它的衛(wèi)星圖像來自亞馬遜雨林,我們要做的任務(wù)是在給出的一些衛(wèi)星圖片上打上標(biāo)簽分類,一共有17個不同的標(biāo)簽。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

我們?nèi)〉玫某煽內(nèi)鏟PT所示。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

另外還有我們的結(jié)果分析圖。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

接下來講怎么構(gòu)建單模型。

這是分享最重點(diǎn)的一部分,涉及到究竟是使用框架提供的預(yù)訓(xùn)練模型還是自己隨機(jī)初始化模型去搭建一個模型,另外還涉及到如果要用預(yù)訓(xùn)練模型,有哪些可以用。在明白這個之后我就會大致介紹一下怎么去訓(xùn)練一個Baseline模型,進(jìn)行結(jié)果分析與改進(jìn)。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

首先講一下是用預(yù)訓(xùn)練模型還是使用隨機(jī)初始化參數(shù)模型,這個選擇對于不同比賽來說是不同的。預(yù)訓(xùn)練模型的好處是,我們可以利用ImageNet上預(yù)訓(xùn)練的參數(shù),ImageNet是一個非常大的數(shù)據(jù)集,可以在上面訓(xùn)練,讓模型得到比較好的提升。但是如果我們使用預(yù)訓(xùn)練模型,也就意味著大體的模型框架都是保持和它預(yù)訓(xùn)練時候設(shè)置的一樣,那樣能做的調(diào)整就比較少。如果我們使用隨機(jī)初始化參數(shù),對于模型,好處是幾乎可以說想怎么搭就怎么搭,壞處就是我們沒辦法用到ImageNet上預(yù)訓(xùn)練的參數(shù)。

我們在比賽開始的時候就做了一些實驗,自己搭建了一些隨機(jī)初始化參數(shù)模型和預(yù)訓(xùn)練模型,發(fā)現(xiàn)我們?nèi)蝿?wù)中隨機(jī)初始化參數(shù)模型的收斂速度等都遠(yuǎn)遠(yuǎn)比不上預(yù)訓(xùn)練模型,所以我們后面的比賽就幾乎一直在用預(yù)訓(xùn)練模型,至少在單模型階段是這樣的。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

確定了要使用預(yù)訓(xùn)練模型之后,會考慮具體選擇哪種。其實幾乎所有不同的框架都有提供自己的預(yù)訓(xùn)練模型,除了有一些共通的之外,還有一些不同的,有一些預(yù)訓(xùn)練模型只有某個框架有,有一些預(yù)訓(xùn)練模型大家可能都有比較分析,我們最后選擇了一個PyTorch的框架。我們選擇PyTorch的原因是因為首先它的代碼比較輕量級,然后提供的預(yù)訓(xùn)練模型的種類比較多,我們用它寫起來也很方便,很快就可以構(gòu)建模型,大家基本上一學(xué)就會,它涵蓋了絕大多數(shù)模型。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

在選擇了工具還有可以用的模型之后,就可以開始動手去訓(xùn)練一個模型。一般來說,我們最開始有做一個Baseline,這個是很正常的套路,一般只有訓(xùn)練一個模型,才可以對這個模型有大概的感覺。比如可以訓(xùn)練ResNet18,這比較簡單。然后我們稍微劃分一下訓(xùn)練集,比如說80%訓(xùn)練,20%驗證,再比如用Adam做優(yōu)化,調(diào)整一下學(xué)習(xí)率,試了這幾個之后就大概可以去調(diào)整訓(xùn)練出比較好的模型。

一開始我們也不知道哪個范圍的學(xué)習(xí)率是比較合適,我們用0.0001這個數(shù)值是比較好的,模型收斂比較快,也比較穩(wěn)定,一般學(xué)習(xí)率過大的話訓(xùn)練會抖動,然后過小的話收斂比較慢,這個過程中我們也用到隊員開發(fā)的一個工具Hyperboard,可以實時記錄訓(xùn)練過程中那些訓(xùn)練曲線的變化,然后接口也比較簡單,在這樣一輪訓(xùn)練下來之后,我們一般就可以得到反饋,然后去做結(jié)果分析,分析完之后我們才能考慮下一步要怎么去改進(jìn)訓(xùn)練或者是數(shù)據(jù)。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

我們當(dāng)時在比較小的模型上觀察到結(jié)果是這樣的,模型一開始收斂的挺快,然后它開始過擬合,訓(xùn)練集上Loss下降,驗證集Loss反增。我們當(dāng)時分析了一下,覺得官方提供的訓(xùn)練數(shù)據(jù)集只有4萬個樣本,相對這個任務(wù)來說是比較小的,比較容易發(fā)生過擬合,然后我們就用人類的先驗來對它做一個數(shù)據(jù)增強(qiáng),這樣可以把原來的樣本用一些手段把他們變的更多,然后有了這些經(jīng)過數(shù)據(jù)增強(qiáng)的樣本,有更多的數(shù)據(jù)的話,訓(xùn)練出來模型就比較難過擬合。用數(shù)據(jù)增強(qiáng)解決過擬合的問題后,我們就開始可以對模型進(jìn)行調(diào)整。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

解決了數(shù)據(jù)不足之后我們就可以考慮使用更大模型了。最簡單的提升模型方法是使用參數(shù)規(guī)模更大的預(yù)訓(xùn)練模型,另外一種就是對模型進(jìn)行一些改動,用預(yù)訓(xùn)練模型很難對卷積層去做一些改動。

我們大部分的改動都是在卷積層之后的全連接層進(jìn)行的,我們后面也可以改動卷積層最后的Global Pooling層的輸出大小,還可以把兩個小的模型的輸出特征拼在一起,然后再進(jìn)行分配,拼成一個大模型。然后還可以增加Batchnorm、dropout、L2等,但在比賽中沒有觀察到這些參數(shù)有非常大的影響,所以我們后面并沒有對這些做仔細(xì)的調(diào)整。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

確定了大體的框架還有使用的模型,接下來就是比較枯燥的調(diào)參階段,在這里非常重要的一個參數(shù)是初始學(xué)習(xí)率,剛才講到我們選擇大概0.0001這樣一個基準(zhǔn)的學(xué)習(xí)率,只是大概確定的一個范圍,我們可以再做一些仔細(xì)調(diào)整。調(diào)整這個初始學(xué)習(xí)率,對最后的收斂也是有影響的。

還有就是Batch size的選擇,盡量把GPU占滿,一般來說是32-128之間,有時會做一些微調(diào)。一般來說,在訓(xùn)練的過程中,下降到一定程度之后可能就完全收斂了,或者是開始出現(xiàn)過擬合,這時候經(jīng)常會做的一個操作就是把整體的學(xué)習(xí)率降低,這樣訓(xùn)練往往會提升整理的效果。在調(diào)參的過程中,也要不斷對參數(shù)跑出來的結(jié)果做記錄,去做分析和驗證,看哪些參數(shù)會比較好。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

我們幾乎把十幾個模型都跑了一遍,有的跑了好幾遍,我們發(fā)現(xiàn)ResNet效果是最好的,DenseNet效果緊隨其后。VGG,Inception v3效果差一點(diǎn)。最差的是AlexNet和SqueezeNet,因為前者確實比較老而且效果也不佳,后者做的是一些壓縮工作,整體上參數(shù)不會很多,所以效果比較差一些。Inception v4和Inception Res v2效果非常糟糕,我們后來沒有使用。另外有些模型雖然總體比較差,但他們之間具有多樣性,Ensemble到一起可以提升性能。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

接下來講一下數(shù)據(jù)增強(qiáng)。

我會為大家介紹一下有哪些數(shù)據(jù)增強(qiáng)的方法,有一個就是調(diào)整亮度、飽和度、對比度。這些調(diào)整之后,我們可以認(rèn)為它是一個新的樣本。然后另外來說我們要通過人類的先驗,我們可以看到,把一張河流的圖調(diào)亮一點(diǎn),它還是一條河流,但我們可以得到一個亮度和原來不同的樣本。

然后此外還常用的有隨機(jī)裁剪一幅圖,可以把裁剪之后的圖作為輸入,但是在這個比賽中我們并沒有用到這種技術(shù),因為我們考慮到有一些圖片,如果去做一些隨機(jī)裁剪,可能會把圖里面的一些特征剪掉。

然后還有隨機(jī)縮放,水平/垂直翻轉(zhuǎn),旋轉(zhuǎn),把圖片變得模糊,加高斯噪聲等,這些都是很常見的方法,不過并不是每一種都適合。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

對于任何任務(wù)來說,我們都應(yīng)該根據(jù)實際情況來選擇一個好的數(shù)據(jù)增強(qiáng)。好的數(shù)據(jù)增強(qiáng)應(yīng)該是這樣:增強(qiáng)過的圖片應(yīng)該盡量接近原分布。對于這個比賽,我們主要使用的就是翻轉(zhuǎn)和旋轉(zhuǎn)這兩個手段,比如左右翻轉(zhuǎn)。旋轉(zhuǎn)的話我們把圖像進(jìn)行90度、180度、270度這樣去轉(zhuǎn)。翻轉(zhuǎn)和旋轉(zhuǎn)配合,我們可以獲得八種角度的一張圖,并且圖像的標(biāo)簽不會發(fā)生變化。

這樣的話我們就有了更多的訓(xùn)練樣本,相當(dāng)于把這個數(shù)據(jù)集擴(kuò)充了八倍,這個方法是適用于這個比賽的數(shù)據(jù)增強(qiáng),但是它并不適用于所有比賽。得根據(jù)實際情況去理解,就整體來說就是不要偏離原來分布太多,然后做完數(shù)據(jù)增強(qiáng)之后最好還是原來的level。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

然后還有一個經(jīng)常要用到的數(shù)據(jù)增強(qiáng)。這個增強(qiáng)不是為了在訓(xùn)練時防止過擬合,我們在測試的時候其實也可以用數(shù)據(jù)增強(qiáng)。在測試的時候我們也會對一張圖的八個方向的樣本進(jìn)行預(yù)測,我們可以得到八個結(jié)果,然后利用這八個結(jié)果再去進(jìn)行投票,或者是加權(quán)平均或直接平均,獲得的這個結(jié)果一般都會比原來單個方向的穩(wěn)定得多,這可以帶來很明顯的提升。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

接下來要講的就是K折交叉驗證。

首先說下我們為什么要做K折交叉驗證。最直觀的一個目的是要盡可能的用到全部的訓(xùn)練數(shù)據(jù),因為我們在訓(xùn)練的時候,經(jīng)常要劃分80%的數(shù)據(jù)做訓(xùn)練集,20%的數(shù)據(jù)做測試集,確保當(dāng)前的模型泛化性能是沒有問題的。但是這樣一來的話,我們就沒辦法拿驗證集上的這部分?jǐn)?shù)據(jù)來訓(xùn)練。

在K折交叉驗證中,我們可以先把原來的數(shù)據(jù)化成K折,這兒有一個例子,把它化成5份,然后每次用其中四份來做訓(xùn)練集,把剩下一份做驗證集,這樣分別進(jìn)行五遍,我們就可以在原來整個數(shù)據(jù)上一起訓(xùn)練一遍,然后獲得了五個模型,然后再把它們的結(jié)果做一個平均,那這個平均結(jié)果其實就是在整個訓(xùn)練集上都訓(xùn)練過的結(jié)果。我們將訓(xùn)練結(jié)果拼接在一起,也可以為后面的集成提供out-of-fold數(shù)據(jù)。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

然后另外一個重點(diǎn)就是劃分K折究竟要注意什么。主要是有這幾點(diǎn):一是隊伍內(nèi)部共享同一個劃分;二是單模型階段和模型集成階段盡量使用同一個劃分;三是訓(xùn)練集和驗證集的劃分要與訓(xùn)練集和測試集劃分方式一致;四是折數(shù)劃得越多,計算力消耗越大,需要看計算資源是否足夠;五是數(shù)據(jù)量足夠多時,可以不用使用K折劃分。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

最后的重頭戲是模型集成。

模型集成在一般比賽中都會用到,它是很重要的一個環(huán)節(jié)。在圖像比賽中的地位相對來說沒有那些文本比賽那么重要,因為圖像比賽中,我們主要用的都是卷積神經(jīng)網(wǎng)絡(luò)之類,這些模型之間并不會有特別大的不同。

Ensemble的提升主要還是要訓(xùn)練一些比較好的單模型,這樣才能使最后的去集成比較好,然后在一些像文本的比賽的話,可能有的要用深度學(xué)習(xí)的方法,有的要用傳統(tǒng)學(xué)習(xí)方法,有的需要手工加入一些特征,這些特征多樣性很大,一般在比賽的模型集成階段就可以帶來很大的提升。

我們在比賽中不同階段用了不同的模型集成手段,比如平均Bagging,Bagging Ensemble Selection,還有Attention Stacking,Attention Stacking是我們自己加入的一個東西,效果還不錯。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

接下來講一下模型集成階段的單樣本輸入,如PPT所示,對于某一個樣本來說,每個模型都可以預(yù)測17個類的結(jié)果,如果我們有五個模型,那我們就可以獲得五份這樣的結(jié)果,我們把他們拼到一起可以得到一個概率曲線。然后最簡單粗暴的做法就是直接把結(jié)果取一個平均,當(dāng)成最后的結(jié)果。這是我們在早期的方法,所有模型有相同的權(quán)重,將概率矩陣沿模型數(shù)維度進(jìn)行平均。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

等到中期,我們用了一個稍微好一點(diǎn)的Bagging Ensemble Selection方法。它的好處是每個模型有不同的權(quán)重,在Selection過程中,有的模型可能被選到多次,有的模型也可能一次也沒被選到,按照被選中次數(shù)為權(quán)重,概率矩陣沿模型維度進(jìn)行加權(quán)平均。比如說我們最開始選擇最好的三個模型,然后把12345都分別加進(jìn)來,看哪個效果最好。這種方法也比較簡單粗暴,這個過程中不涉及交叉驗證。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

到了后期我們采用Stacking,它的性能更強(qiáng)一點(diǎn)。每一個模型的每一個類都有自己的權(quán)重,這其實是比較好理解的,比如說某個模型在氣象類上表現(xiàn)的比較好,但他在其他類上表現(xiàn)比較差,那樣的話,他在氣象類上應(yīng)該有一個更高的權(quán)重,在其他類上的權(quán)重比較低。我們利用模型在不同類上的不同表現(xiàn)性能來做一個集成。

一般來說,在Stacking階段,常用的一個做法就是,把每一個類都單獨(dú)訓(xùn)練一個分類器,然后以它在之前所有模型的輸入作為輸入,然后去預(yù)測一個結(jié)果。我們有17個類,就訓(xùn)練17個單分類器,然后去預(yù)測出17個結(jié)果。在這里最簡單的是直接過一個線性回歸,但是我們發(fā)現(xiàn)在當(dāng)時的驗證集上容易過擬合。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

然后我們自己設(shè)置了一種比較簡單的機(jī)制,即Attention Stacking。對于每一個類,我們?nèi)W(xué)一個和單模型數(shù)目一樣多的參數(shù),然后對它做Softmax,這樣就使得這些參數(shù)加權(quán)為1,加權(quán)為1的話就是一個天然的權(quán)重,可以把原來的五個類按照這個權(quán)重直接加權(quán)平均。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

后來我們還用Logistic Regression、Ridge Regression做stacking,我們發(fā)現(xiàn)Attention Stacking在驗證集上效果比較好,但因為時間有限,并沒有做足夠量的對比實驗。最后還是要提到,不管這些模型集成怎么做,在這種圖像比賽中都要有比較好的單模型,而且得具有多樣性,這樣Ensemble才有意義。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

比賽的套路講得差不多了,最后介紹一下我們這個隊伍的基本組成。我們隊伍有6個人,都是中山大學(xué)潘嶸老師CIS實驗室的研究生。這個比賽一共有三個月,因為之前在忙一些其他的項目,最后剩下大概20天左右才有時間全力參賽,然后我們大概用了5到6個Titan X跑了十多天,最后跑了64個模型。比賽本身的細(xì)節(jié)大家可以看我知乎專欄。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

最后是問答環(huán)節(jié)。

Q:你們數(shù)據(jù)記錄工具是什么?

A:我們使用的數(shù)據(jù)記錄工具,比如記錄曲線用的是Hyperboard,然后其他的一些統(tǒng)計數(shù)據(jù)只是簡單地用excel表來記錄。

Q:數(shù)據(jù)增強(qiáng)階段為什么不是隨機(jī)角度,而是用了四個固定角度?

A:這個是有對比的,我們之前做過一些隨機(jī)角度的,但是發(fā)現(xiàn)它相比用四個固定角度,帶來的提升并不高,而且會消耗更多的計算資源。

Q:Ensemble Selection用了多少個模型?

A:Ensemble Selection用了挺長一段時間,從十幾個模型到六十幾個模型我們都有試著用,但是后來發(fā)現(xiàn)這種方法沒有劃分驗證集,想得到驗證集我們只能去用Stacking。

視頻鏈接:http://mp.weixin.qq.com/s/O7U7-jvwIRG5-taNa5e2xA

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

干貨:圖像比賽的通用套路有哪些?Kaggle比賽金牌團(tuán)隊為你解答

分享:
相關(guān)文章

編輯

關(guān)注AI學(xué)術(shù),例如論文
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說