0
雷鋒網(wǎng) AI科技評論消息,近日,Kaggle Blog上刊登了對「Planet: Understanding the Amazon from Space」比賽冠軍的專訪,在訪問中,我們了解到了冠軍選手bestfitting的一些基礎(chǔ)信息,他在比賽中所用的一些技術(shù)細節(jié),以及給大家的建議。雷鋒網(wǎng) AI科技評論將采訪原文編譯整理如下:
在最近舉辦的「Planet: Understanding the Amazon from Space」比賽中,主辦方Planet為了更好地追蹤和了解到森林被砍伐的原因,想要讓Kaggle上的參賽選手為亞馬遜盆地中的衛(wèi)星圖像打上標簽。
主辦方提供40000多張訓(xùn)練圖像,每張圖像都涵蓋多個標簽,標簽總體分為如下幾組:
大氣情況:晴朗、局部多云、多云、起霧
常見的土地覆蓋和使用類型:雨林、農(nóng)業(yè)、河流、城鎮(zhèn)/城市、道路、耕地、裸地
罕見的土地覆蓋和使用類型:砍伐并燃燒、選擇性砍伐、種植、傳統(tǒng)采礦、手工采礦、吹毀。
近日,我們采訪到本次比賽的冠軍選手bestfitting,在訪談中,他為我們詳細講述了他是如何集成11個精細調(diào)節(jié)的卷積網(wǎng)絡(luò)以及怎樣利用標簽相關(guān)性結(jié)構(gòu)的,此外,他也談到為了避免過擬合的一些想法。
基礎(chǔ)信息
能談下你參加比賽之前的專業(yè)背景嗎?
我的專業(yè)是計算機科學(xué),有超過十年的Java編程經(jīng)驗,目前工作方向是大規(guī)模數(shù)據(jù)處理、機器學(xué)習(xí)和深度學(xué)習(xí)。
在這次比賽中,你用到了之前的哪些經(jīng)驗和專業(yè)知識呢?
今年我參加了kaggle上的不少關(guān)于深度學(xué)習(xí)的比賽,在比賽中獲得的經(jīng)驗和直覺讓我受益匪淺。
你開始在Kaggle上參加比賽是基于什么契機?
從2010年開始,我就在看很多關(guān)于機器學(xué)習(xí)、深度學(xué)習(xí)的書和論文了,但是很難將我學(xué)習(xí)到的算法應(yīng)用到那些可用的小數(shù)據(jù)集上。而與此同時,我發(fā)現(xiàn)Kaggle上有很多有意思的數(shù)據(jù)集、kernel以及不錯的討論,因此,就在去年,我迫不及待地參加了Kaggle上的“Predicting Red Hat Business Value”比賽。
參加這次比賽的原因是什么?
有兩個原因。
一是我對自然保護很感興趣,我認為要是自己的經(jīng)驗?zāi)茏尩厍蚝腿藗兊纳罡用篮?,這很酷。另外,亞馬遜雨林經(jīng)常在電影和故事中出現(xiàn),我對它很感興趣。
另外,我參加了kaggle上各種各樣關(guān)于深度學(xué)習(xí)的比賽,比賽中都用到了分割和檢測等算法,這次我希望能參加分類比賽,嘗試一些不一樣的東西。
技術(shù)討論
能簡單地介紹一下你的方案嗎?
這是一場多標簽分類比賽,并且標簽是失衡的。
比賽競爭很激烈,因為這兩年已經(jīng)有很多使用比較廣泛的圖像分類算法,并且也出現(xiàn)了很多新算法,另外,也有很多極具經(jīng)驗的計算機視覺方面的參賽選手。
我嘗試了很多種我認為可能會有用的流行分類算法,基于對標簽關(guān)系和模型能力的認真分析,我構(gòu)建了一種集成方法并贏得了比賽的第一名。
下面是模型結(jié)構(gòu):
首先,對數(shù)據(jù)集進行預(yù)處理(改變圖像大小、去霧)并用到一些標準數(shù)據(jù)增強技術(shù)。
下一步,在模型階段,我精細調(diào)節(jié)了11個卷積神經(jīng)網(wǎng)絡(luò)(CNN),得到每個CNN的類別標簽概率。比賽中我用到了一些流行的、高性能的CNN,例如ResNets、DenseNets、Inception和SimpleNet等。
然后,我通過每個CNN的嶺回歸模型來傳遞類標簽概率,這是為了利用標簽相關(guān)性來調(diào)整概率。
最后,我利用另一個嶺回歸模型將這11個CNN集成到一起。
同樣值得注意的是,這次比賽中,我沒有使用標準log函數(shù)作為損失函數(shù),而是使用了一個特殊的柔性F2損失函數(shù)(special soft F2-loss),這是為了得到更高的F2分數(shù)。
在預(yù)處理和特征工程階段,你具體做了哪些操作?
預(yù)處理和數(shù)據(jù)增強步驟如下:
首先是調(diào)整圖像大小。
另外,在訓(xùn)練集和測試集中我也做了一些數(shù)據(jù)增強,例如對圖像進行翻轉(zhuǎn)、旋轉(zhuǎn)、置換以及一些彈性變換等。
我也用到了一種去霧技術(shù),這種技術(shù)可以讓網(wǎng)絡(luò)“看到”更清晰的圖像。關(guān)于這項技術(shù),在論文Single Image Haze Removal using Dark Channel Prior中有詳細描述。
下面是在數(shù)據(jù)集中進行去霧處理的一些實例:
從下圖中可以看到,進行去霧處理后,一些標簽(例如水、裸地)的F2分數(shù)會升高,但同時另一些標簽的F2分數(shù)(例如霧天和晴天等)會降低。不過不用擔心,集成操作能為每個標簽選擇最強大的模型,總的來說去霧處理會讓整體分數(shù)得到提升。
你用了哪些監(jiān)督學(xué)習(xí)方法?
比賽模型集成了包括11種當前流行的卷積網(wǎng)絡(luò):融合了不同數(shù)量的參數(shù)、層數(shù)的ResNet和DenseNet,另外還有Inception和SimpleNet模型。在替換了最后的輸出層以滿足比賽的輸出之后,我微調(diào)了這些預(yù)訓(xùn)練過的CNN的所有層,并且沒有凍結(jié)任何層。
訓(xùn)練集包括4萬多張圖片,這個量足夠滿足我從頭開始訓(xùn)練一些CNN的架構(gòu),例如resnet_34和resnet_50。不過我發(fā)現(xiàn),對預(yù)訓(xùn)練過的網(wǎng)絡(luò)的權(quán)重進行微調(diào)會得到更好的表現(xiàn)。
為了讓F2分數(shù)更高,你有用到一些特別的技巧嗎?
主辦方會評估提交結(jié)果的F2分數(shù),這個分數(shù)結(jié)合了精確度和召回率,有點類似于F1分數(shù),但召回率的權(quán)重比精確度要高。因此,我們不僅要訓(xùn)練模型來預(yù)測標簽概率,還要選擇出最佳閾值,通過標簽的概率值來決定是否給圖片打上這個標簽。
最初,和許多其他參賽者一樣,我使用的是log損失作為損失函數(shù),但如下表所示,F(xiàn)2分數(shù)不會隨著log損失值的降低而升高。
這意味著需要找到另一種損失函數(shù),將模型的注意力更多的集中在優(yōu)化標簽的召回率上。從比賽論壇的代碼上受到啟發(fā),我寫了一個柔性F2損失函數(shù)(Soft F2-Loss function)。
這個函數(shù)確實提高了整體F2分數(shù),對農(nóng)業(yè)、多云和耕地這三個標簽的作用尤為明顯。
你對數(shù)據(jù)和模型有什么深刻見解?
我分析了標簽之間的相關(guān)性,發(fā)現(xiàn)某幾個標簽經(jīng)常共存,但其他標簽沒有這種情況。例如,晴朗、局部多云、多云和起霧這幾個標簽不會共存,但是住所和農(nóng)業(yè)標簽經(jīng)常出現(xiàn)在一起。這意味著使用這種關(guān)聯(lián)結(jié)構(gòu)可能會使模型得到改進。
舉個例子,來看一下resnet-101模型,它會預(yù)測出17個標簽中每一個出現(xiàn)的概率。為了能利用到標簽相關(guān)性,我增加了另外一個嶺正則化層,來重新校準所有模型中每一個標簽的概率。
換言之,為了預(yù)測晴朗這個標簽的最終概率(利用resnet-101模型),有一個特殊的晴朗嶺回歸模型會接收resnet-101模型對所有17個標簽的預(yù)測情況。
如何進行模型集成?
當?shù)玫剿蠳個模型的預(yù)測之后,我們有了來自于N個不同的模型對晴朗標簽的概率。我們可以利用這些概率,通過另一個嶺回歸來預(yù)測最終晴朗標簽的概率。
這種兩層嶺回歸有兩個作用:
一是它能讓我們利用不同標簽之間的關(guān)聯(lián)信息。
二是它能讓我們選擇最強的模型來預(yù)測每個標簽出現(xiàn)的概率。
你有哪些讓自己也嚇一跳的發(fā)現(xiàn)嗎?
即使我已經(jīng)預(yù)知到排行榜最后的大變動(公共排行榜和私人排行榜的分數(shù)有很大的不同),但我仍然感到驚訝。
在比賽的最后階段(離結(jié)束還有10天),我發(fā)現(xiàn)公共排行榜上分數(shù)都非常接近,但我在交叉驗證和分數(shù)上完全不能取得任何優(yōu)化和提升了,因此我告誡自己要小心,避免在可能只是噪音標簽的情況下出現(xiàn)過擬合。
為了在最后階段不出錯,我用不同的隨機種子,選擇了訓(xùn)練集中一半的圖片作為新的訓(xùn)練集,來模擬出公共和私人排行榜。
我發(fā)現(xiàn)隨著種子的改變,我模擬的公共排行榜分數(shù)和私人排行榜分數(shù)之間的差距可能會擴大到0.0025。但在公共排行榜上,第一名和第十名的差距比這一數(shù)值要小。
這意味著在比賽中可能會發(fā)生非常大的變動。
經(jīng)過仔細分析后,我發(fā)現(xiàn)這種差異出現(xiàn)在一些比較有難度的圖片上,人們也極易對圖片中的標簽產(chǎn)生混淆,比如一張圖是該被標記為霧還是多云,道路還是積水,種植或是選擇性砍伐。
正因為如此,我說服自己公眾排行榜的分數(shù)并不能完美的衡量模型能力。
這是意料之外的:因為公共測試集中包含4萬多張圖片,看起來排行榜應(yīng)該是相當穩(wěn)定的。
因此,我調(diào)整了目標,只是讓自己能保持在前10名之內(nèi),并決定在最后一周不用關(guān)心自己在公開排行榜上的確切名次。此外,我試圖找到一種最穩(wěn)定的方式來進行模型集成,我丟棄掉了任何可能導(dǎo)致過擬合的模型,最后我使用了投票制和嶺回歸。
為什么用這么多模型?
答案很簡單:多樣性。
我認為模型數(shù)量不會引發(fā)大的問題,原因如下:
首先,如果我們想要一個簡單的模型,可以只從這些模型中選擇1-2個,并且仍然可以在公共和私人排行榜上都獲得不錯的分數(shù)(排名前20)。
其次,這次比賽有17個標簽,不同模型對標簽的識別能力也不同。
另外,這個解決方案可以用來替換或簡化人工標記工作。由于計算資源相對來說比人力成本要便宜,我們可以通過使用強大的模型來預(yù)測未標記的圖像,修正被錯誤預(yù)測的圖像,然后使用擴展后的數(shù)據(jù)集不斷迭代,訓(xùn)練出更強大、更簡單的模型。
你用了什么工具?
Python 3.6、PyTorch、PyCharm
硬件設(shè)置呢?
配置4個英偉達GTX TITAN X Maxwell GPU的服務(wù)器。
經(jīng)驗之談
這次比賽你有哪些收獲?
正如上面提到的,我發(fā)現(xiàn)使用柔和F2損失函數(shù)(soft F2-loss function)、增加去霧算法、應(yīng)用兩層嶺回歸對取得高分至關(guān)重要。
另外,由于會有噪音標簽,我們必須對自己的交叉驗證方法充滿信心。
對剛剛開始進行數(shù)據(jù)科學(xué)研究的人來說,你有哪些建議?
從一些優(yōu)秀的課程中學(xué)習(xí),例如斯坦福CS229和CS231n。
從Kaggle比賽、kernel和starter script中學(xué)習(xí)。
參加kaggle比賽,在比賽中得到經(jīng)驗和收獲。
每天堅持閱讀論文,對于一些論文中的方法,可以著手實踐下。
雷鋒網(wǎng) AI科技評論編輯整理。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。