Airbnb資深機(jī)器學(xué)習(xí)科學(xué)家Shijing Yao、前Airbnb數(shù)據(jù)科學(xué)負(fù)責(zé)人Qiang Zhu、Airbnb機(jī)器學(xué)習(xí)工程師Phillippe Siclait分享了在Airbnb產(chǎn)品上大規(guī)模應(yīng)用深度學(xué)習(xí)技術(shù)的經(jīng)驗(yàn)。
Airbnb在舊金山的新辦公室
世界各地的旅行者在Airbnb平臺(tái)上尋找旅途中的民宿。除了位置和價(jià)格之外,展示照片是房客搜索時(shí)做出決策的最關(guān)鍵因素之一。然而,直到最近之前,我們對(duì)這些重要的照片所知甚少。當(dāng)房客在交互界面查看展示照片時(shí),我們之前沒(méi)有辦法能夠幫助房客找到信息量最大的圖像,也無(wú)法確保照片傳達(dá)的信息是精確的,也沒(méi)法以可伸縮的方式向房主建議如何提高照片的吸引力。
多虧了計(jì)算機(jī)視覺(jué)和深度學(xué)習(xí)方面的最新進(jìn)展,我們得以利用技術(shù)手段在較大規(guī)模上解決這一問(wèn)題。我們從一個(gè)歸類(lèi)展示圖片的項(xiàng)目開(kāi)始。一方面,歸類(lèi)使得同一類(lèi)房間的照片可以分為一組。另一方面,歸類(lèi)也能幫助檢查是否基本的房間信息是正確的(驗(yàn)證房間數(shù))。我們還相信,未來(lái)有很多激動(dòng)人心的機(jī)會(huì)可以進(jìn)一步增強(qiáng)Airbnb的圖像內(nèi)容的知識(shí)。我們將在本文結(jié)尾展示一些例子。
圖像分類(lèi)
能夠正確分類(lèi)給定的展示照片的房間類(lèi)型,對(duì)優(yōu)化用戶(hù)體驗(yàn)而言是極有幫助的。從房客的角度來(lái)說(shuō),這使得Airbnb可以根據(jù)不同的房間類(lèi)型重新排序、重新布局照片,優(yōu)先展示人們最感興趣的照片。從房主的角度來(lái)說(shuō),這可以幫助Airbnb自動(dòng)審核展示照片,以確保房主遵守了Airbnb的標(biāo)準(zhǔn)。精確的照片歸類(lèi)是這些核心功能的基石。
我們打算分類(lèi)的第一批房間類(lèi)型包括臥室、浴室、起居室、廚房、游泳池、景觀。我們計(jì)劃基于產(chǎn)品團(tuán)隊(duì)的需求增加其他房間類(lèi)型。
房間類(lèi)型分類(lèi)問(wèn)題大體上和ImageNet分類(lèi)問(wèn)題差不多,只不過(guò)我們的模型的輸出是定制的房間類(lèi)型。這意味著VGG、ResNet、Inception之類(lèi)現(xiàn)成的當(dāng)前最先進(jìn)深度神經(jīng)網(wǎng)絡(luò)(DNN)模型無(wú)法直接應(yīng)用于我們的案例。網(wǎng)上有很多非常棒的帖子告訴人們?nèi)绾螒?yīng)對(duì)這一問(wèn)題?;旧希覀儜?yīng)該:1) 修改DNN的最后幾層,確保輸出維度匹配我們的需求;2) 再訓(xùn)練DNN的部分網(wǎng)絡(luò)層,直到取得滿(mǎn)意的表現(xiàn)。在一些嘗試之后,我們選擇了ResNet50,因?yàn)樗谀P捅憩F(xiàn)和計(jì)算時(shí)間方面平衡得很好。為了讓它兼容我們的案例,我們?cè)谧詈蟾郊恿藘蓚€(gè)額外的全連接層,以及softmax激活。我們也試驗(yàn)了一些訓(xùn)練選項(xiàng),詳見(jiàn)下節(jié)。
再訓(xùn)練修改過(guò)的ResNet50
修改過(guò)的ResNet50架構(gòu)架構(gòu)。基礎(chǔ)模型圖取自Kaiming He
再訓(xùn)練ResNet50可以分為三大場(chǎng)景:
固定基礎(chǔ)ResNet50模型,僅僅使用最少的數(shù)據(jù)再訓(xùn)練增加的兩層。這也經(jīng)常稱(chēng)為微調(diào)。
進(jìn)行第一個(gè)場(chǎng)景中的微調(diào),不過(guò)使用大量數(shù)據(jù)。
從頭開(kāi)始重新訓(xùn)練整個(gè)修改過(guò)的ResNet50模型。
大部分網(wǎng)上的教程使用的都是第一種方法,因?yàn)檫@很快,而且通常能夠取得不錯(cuò)的結(jié)果。我們嘗試過(guò)第一種方法,并且確實(shí)得到了一些合理的初始結(jié)果。然而,為了運(yùn)行高品質(zhì)的圖像產(chǎn)品,我們需要戲劇性地提升模型的表現(xiàn)——我們的理想是達(dá)到95%+準(zhǔn)確率,80%+召回。
為了能夠同時(shí)達(dá)到高準(zhǔn)確率和高召回,我們意識(shí)到使用大規(guī)模數(shù)據(jù)重新訓(xùn)練DNN是不可避免的。然而,我們遇到了兩大挑戰(zhàn):1) 盡管我們有很多由房主上傳的展示照片,我們沒(méi)有相應(yīng)的精確的房間類(lèi)型標(biāo)簽,實(shí)際上很多照片根本沒(méi)有標(biāo)簽;2) 再訓(xùn)練ResNet50這樣的DNN絕非易事——需要訓(xùn)練超過(guò)兩千五百萬(wàn)參數(shù),需要強(qiáng)力的GPU支持。我們將在接下來(lái)的兩小節(jié)介紹我們是如何應(yīng)對(duì)這兩項(xiàng)挑戰(zhàn)的。
監(jiān)督學(xué)習(xí)圖像說(shuō)明
許多公司利用第三方服務(wù)商取得圖像數(shù)據(jù)的高品質(zhì)標(biāo)簽。由于我們有數(shù)以百萬(wàn)計(jì)的照片需要標(biāo)注,顯然這不是最經(jīng)濟(jì)的做法。為了平衡成本和表現(xiàn),我們以一種混合的方式處理這一標(biāo)注問(wèn)題。一方面,我們請(qǐng)服務(wù)商標(biāo)注了相對(duì)而言數(shù)量較少的照片,通常以千計(jì),或以萬(wàn)計(jì)。這部分標(biāo)注過(guò)的數(shù)據(jù)將作為我們?cè)u(píng)估模型的金數(shù)據(jù)集。我們通過(guò)隨機(jī)采樣得到了這一金數(shù)據(jù)集的照片,并確保數(shù)據(jù)沒(méi)有偏差。另一方面,我們利用房主創(chuàng)建的圖像說(shuō)明作為房間類(lèi)型信息的代理,從中提取標(biāo)簽。這一想法對(duì)我們而言意義重大,因?yàn)樗沟冒嘿F的標(biāo)注任務(wù)基本上變?yōu)槊赓M(fèi)。我們只需要一種明智的方法,確保從圖像說(shuō)明中提取的房間類(lèi)型標(biāo)簽是精確可靠的。
一個(gè)很有吸引力的從圖像說(shuō)明中提取標(biāo)簽的方法是這樣的:如果我們?cè)谀硰垐D像的說(shuō)明中找到了特定的關(guān)鍵詞,那么這張圖像就會(huì)被打上該類(lèi)型的標(biāo)簽。然而,現(xiàn)實(shí)世界要比這復(fù)雜得多。如果你檢查根據(jù)這一規(guī)則得到的結(jié)果,你將大失所望。我們發(fā)現(xiàn)由大量情形圖像說(shuō)明和圖像的實(shí)際內(nèi)容相差甚遠(yuǎn)。下面是一些例子。
上圖展示了在圖像說(shuō)明中搜尋特定關(guān)鍵詞導(dǎo)致的錯(cuò)誤標(biāo)簽:(黑體為錯(cuò)誤標(biāo)簽)
廚房:通往臥室和廚房的樓梯
起居室:從起居室通往臥室的過(guò)道
浴室:主臥包含浴室和特大床
臥室:從臥室往外看的景觀
游泳池:由大量空間可以散步,游泳池旁邊的花園
景觀:從廚房看到的起居室(譯者注:viewof liing space from Kitchen的view被錯(cuò)誤提取為景觀標(biāo)簽)
為了過(guò)濾這樣的例子,我們?cè)黾恿祟~外的規(guī)則。經(jīng)過(guò)若干回合的過(guò)濾和檢查,標(biāo)簽的質(zhì)量大大改善了。下面是一個(gè)規(guī)則的例子(過(guò)濾廚房圖像)。
AND LOWER(caption) like '%kitchen%'
AND LENGTH(caption) <= 22
AND LOWER(caption) NOT LIKE '%bed%'
AND LOWER(caption) NOT LIKE '%bath%'
AND LOWER(caption) NOT LIKE '%pool%'
AND LOWER(caption) NOT LIKE '%living%'
AND LOWER(caption) NOT LIKE '%view%'
AND LOWER(caption) NOT LIKE '%door%'
AND LOWER(caption) NOT LIKE '%table%'
AND LOWER(caption) NOT LIKE '%deck%'
AND LOWER(caption) NOT LIKE '%cabinet%'
AND LOWER(caption) NOT LIKE '%entrance%'
由于這些額外的過(guò)濾,我們損失了相當(dāng)可觀的圖像數(shù)據(jù)。對(duì)于我們而言這不是很大的問(wèn)題,因?yàn)榧词菇?jīng)過(guò)了如此激進(jìn)的過(guò)濾,我們還是得到了幾百萬(wàn)照片,每種房間類(lèi)型有幾十萬(wàn)照片。不僅如此,這些照片的標(biāo)簽質(zhì)量要好很多。我們假定過(guò)濾并沒(méi)有改變數(shù)據(jù)分布,我們將在使用金數(shù)據(jù)集測(cè)試模型時(shí)驗(yàn)證這一點(diǎn)。
話(huà)是這么說(shuō),或許我們本可以使用一些NLP技術(shù)來(lái)動(dòng)態(tài)聚類(lèi)圖像說(shuō)明,而不是使用基于規(guī)則的啟發(fā)式方法。不過(guò)我們決定目前使用啟發(fā)式方法,在未來(lái)再?lài)L試NLP技術(shù)。
模型構(gòu)建、評(píng)估、部署
左:8核GPU并行訓(xùn)練;右:分布式SGD(引用自Quoc V. Le)
使用幾百萬(wàn)張圖像再訓(xùn)練像ResNet50這樣的DNN需要大量的計(jì)算資源。我們的實(shí)現(xiàn)使用了一個(gè)AWS P2.8xlarge實(shí)例(Nvidia 8核K80 GPU),訓(xùn)練的每一步傳送128張圖像至8個(gè)GPU核心。我們使用Tensorflow作為并行訓(xùn)練的后端。我們?cè)诓⑿谢P椭缶幾g了模型,否則訓(xùn)練無(wú)法進(jìn)行。為了進(jìn)一步加速訓(xùn)練,我們使用預(yù)訓(xùn)練的imagenet權(quán)重初始化模型權(quán)重(imagenet權(quán)重來(lái)自keras.applications.resnet50.ResNet50)。經(jīng)過(guò)3個(gè)epoch的訓(xùn)練(花了6小時(shí))之后,我們得到了最佳模型。在此之后模型開(kāi)始過(guò)擬合,驗(yàn)證集上的表現(xiàn)停止提升。
我們?cè)谏a(chǎn)環(huán)境部署的是多個(gè)二元分類(lèi)模型(對(duì)應(yīng)于不同的房間類(lèi)型),而不是覆蓋所有房間類(lèi)型的多類(lèi)模型。這并不理想,不過(guò)由于我們的模型服務(wù)基本上是離線(xiàn)的,因此多模型調(diào)用導(dǎo)致的額外延遲對(duì)我們的影響并不大。我們很快將在生產(chǎn)環(huán)境部署多類(lèi)模型。
我們基于準(zhǔn)確率和召回評(píng)估模型。我們也同時(shí)監(jiān)控F1評(píng)分和精確度之類(lèi)的測(cè)度。下面我們將要重述這些測(cè)度的定義。簡(jiǎn)單概括一下,準(zhǔn)確率描述了我們對(duì)陽(yáng)性預(yù)測(cè)的精確度的自信程度,而召回描述了陽(yáng)性預(yù)測(cè)在所有實(shí)際陽(yáng)性值上的覆蓋率。準(zhǔn)確率和召回通常彼此沖突。在我們的場(chǎng)景中,我們給準(zhǔn)確率定了一個(gè)很高的標(biāo)準(zhǔn)(95%),因?yàn)楫?dāng)我們聲稱(chēng)照片屬于特定房間類(lèi)型時(shí),我們應(yīng)該對(duì)此高度自信。
TP 真陽(yáng)性;TN 真陰性;FP 假陽(yáng)性;FN 假陰性
混淆矩陣是計(jì)算這些測(cè)度的關(guān)鍵。我們模型的原始輸出是每個(gè)圖像0到1之間的概率。為了計(jì)算混淆矩陣,我們需要首先設(shè)定一個(gè)特定的閾值,將預(yù)測(cè)的概率轉(zhuǎn)換為0和1. 接著,以召回為x軸,以準(zhǔn)確率為y軸,可以生成準(zhǔn)確率-召回(P-R)曲線(xiàn)。原則上,P-R曲線(xiàn)的AUC(曲線(xiàn)下面積)越接近1,模型就越精確。
為了評(píng)估模型,我們使用了之間提到的金數(shù)據(jù)集,其中的標(biāo)準(zhǔn)答案標(biāo)簽由人類(lèi)提供。有趣的是,我們發(fā)現(xiàn)不同房間類(lèi)型的精確程度不同。臥室模型和浴室模型是最精確的房間類(lèi)型,而其他模型就不那么精確了。為了節(jié)省篇幅,我們將僅僅展示臥室和起居室的P-R曲線(xiàn)。虛線(xiàn)的十字交匯點(diǎn)代表給定特定閾值后的最終表現(xiàn)。我們?cè)趫D形中加上了測(cè)度總結(jié)。
臥室的P-R曲線(xiàn)
起居室的P-R曲線(xiàn)
兩點(diǎn)重要的觀察:
臥室模型的總體表現(xiàn)要比起居室模型好很多??赡艿慕忉尀椋?) 臥室比起居室更容易分類(lèi),因?yàn)榕P室的布局相對(duì)標(biāo)準(zhǔn),而起居室的變化較多。2) 從臥室照片中提取的標(biāo)簽質(zhì)量高于從起居室照片中提取的標(biāo)簽,因?yàn)槠鹁邮遗紶栆舶垙d甚至廚房。
對(duì)每種房間類(lèi)型而言,完全再訓(xùn)練的模型(紅色曲線(xiàn))表現(xiàn)優(yōu)于部分再訓(xùn)練的模型(藍(lán)色曲線(xiàn))。同時(shí),相比臥室模型,起居室模型上兩者之間的差距更大。這暗示了再訓(xùn)練完整的ResNet50模型在不同房間類(lèi)型上的影響不同。
我們交付的6個(gè)模型,準(zhǔn)確率一般高于95%,召回一般高于50%。通過(guò)設(shè)定不同的閾值,可以折衷準(zhǔn)確率和召回。模型支撐了Airbnb的多個(gè)產(chǎn)品團(tuán)隊(duì)的不同產(chǎn)品。
用戶(hù)比較了我們的結(jié)果和知名的第三方圖像識(shí)別API。據(jù)報(bào)告我們的內(nèi)部模型總體而言超越了第三方的通用模型。這暗示了利用你自己的數(shù)據(jù)的優(yōu)勢(shì),你有機(jī)會(huì)在你感興趣的特定任務(wù)上超過(guò)業(yè)界的當(dāng)前最先進(jìn)模型的表現(xiàn)。
我們想要展示一些具體的例子,作為本小節(jié)的結(jié)束。
分類(lèi)之外
在進(jìn)行這個(gè)項(xiàng)目的時(shí)候,我們也嘗試了房間類(lèi)型分類(lèi)以外的一些有趣的想法。我們想在這里展示兩個(gè)例子,讓讀者大致了解這些問(wèn)題多么讓人激動(dòng)。
無(wú)監(jiān)督場(chǎng)景分類(lèi)
當(dāng)我們首次嘗試使用預(yù)訓(xùn)練的ResNet50模型分類(lèi)房間類(lèi)型時(shí),我們生成了圖像嵌入(2048x1向量)以展示題圖。為了解釋這些嵌入的含義,我們使用PCA技術(shù)將這些長(zhǎng)向量投影至二維平面。出乎我們的意料,投影數(shù)據(jù)自然而然地聚類(lèi)為兩組:其中一個(gè)聚類(lèi)幾乎全是室內(nèi)場(chǎng)景,另一個(gè)聚類(lèi)則幾乎全是室外場(chǎng)景。這意味著,在沒(méi)有進(jìn)行任何再訓(xùn)練的情況下,僅僅通過(guò)圖像嵌入的主成分,我們就能判定室內(nèi)場(chǎng)景和室外場(chǎng)景。這一發(fā)現(xiàn)開(kāi)啟了通向某個(gè)非常有趣的領(lǐng)域——遷移學(xué)習(xí)(嵌入)與非監(jiān)督學(xué)習(xí)——的大門(mén)。
目標(biāo)檢測(cè)
我們嘗試追尋的另一個(gè)領(lǐng)域是目標(biāo)檢測(cè)。在Open Images Dataset上預(yù)訓(xùn)練的Faster R-CNN模型已經(jīng)能提供酷炫的結(jié)果。如你在下面的例子中所見(jiàn),模型已經(jīng)能夠檢測(cè)出窗、門(mén)、飯桌及其位置。我們使用Tensorflow目標(biāo)檢測(cè)API對(duì)展示照片做了一些快速評(píng)估。大量家用設(shè)施可以通過(guò)現(xiàn)成的模型檢測(cè)到。未來(lái)我們計(jì)劃使用Airbnb定制的設(shè)施標(biāo)簽再訓(xùn)練Faster R-CNN模型。由于開(kāi)源數(shù)據(jù)中沒(méi)有包含部分Airbnb定制標(biāo)簽,我們想要?jiǎng)?chuàng)建自行創(chuàng)建標(biāo)簽。有了這些算法檢測(cè)到的設(shè)施,我們能夠驗(yàn)證房主發(fā)布房源的質(zhì)量,讓有特定設(shè)施需要的房客更容易找到心儀的房屋。這將把Airbnb的照片智能的前沿推進(jìn)至下一等級(jí)。
成功檢測(cè)出窗、門(mén)、飯桌
結(jié)論
讓我們總結(jié)一些可能對(duì)其他深度學(xué)習(xí)開(kāi)發(fā)者有幫助的關(guān)鍵點(diǎn):
深度學(xué)習(xí)不過(guò)是一種特定的監(jiān)督學(xué)習(xí)方法。因此再怎么強(qiáng)調(diào)數(shù)據(jù)的高質(zhì)量標(biāo)簽的重要性也不為過(guò)。由于深度學(xué)習(xí)通常需要大量訓(xùn)練數(shù)據(jù)以達(dá)到當(dāng)前最先進(jìn)的表現(xiàn),找到標(biāo)注的有效方式非常關(guān)鍵。幸運(yùn)的是,我們找到了一個(gè)經(jīng)濟(jì)、可伸縮、可靠的混合方法。
從頭訓(xùn)練像ResNet50這樣的DNN可能需要費(fèi)很大的力氣。嘗試從簡(jiǎn)單快速的方式開(kāi)始——使用小數(shù)據(jù)集訓(xùn)練頂上幾層。如果你確實(shí)有一個(gè)大型的可訓(xùn)練數(shù)據(jù)集,從頭再訓(xùn)練DNN可能提供當(dāng)前最先進(jìn)的表現(xiàn)。
如果可以的話(huà),并行化訓(xùn)練。在我們的案例中,我們通過(guò)使用8核GPU獲得了大約6倍(擬線(xiàn)性)速度提升。這使構(gòu)建一個(gè)復(fù)雜的DNN模型在算力上變得可行,迭代超參數(shù)和模型結(jié)構(gòu)也容易許多。
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5463瀏覽量
120888 -
Airbnb
+關(guān)注
關(guān)注
0文章
14瀏覽量
5358
原文標(biāo)題:歸類(lèi)照片:Airbnb是如何應(yīng)用大規(guī)模深度學(xué)習(xí)模型的
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論