在第三篇中,我講到了ArcFace,以及使用ArcFace的目的:讓相似的資料在特徵空間(Feature Space)中靠得更近。
那時候也放了比較圖,可以看到很明確的改進。

而實際上INB就是延續這個概念,並且在Shopee的競賽中藉由實驗達到了最佳效果。
Iterative Neighborhood Blending介紹
INB實際上是一個由第一名作者在這篇discussion中自創的名詞。而其中Neighborhood Blending的概念其實非常簡單。
Neighborhood Blending就是把每個 embedding( feature)跟它周圍的embedding做加權。
簡單來講,如果我們原本的embedding分布如下圖左側,INB會把每個點周圍的點拿來加權,然後得到新的embedding,進而變成右圖。

而因為每個點跟周圍的點的數值會加權得到新的數值,所以原本比較靠近的點,會變得更近,使群體的概念變得更清晰,如下圖

從公式來講,如果我們知道A跟B、C、D這三個點最靠近,而分別相似程度為0.94, 0.93, 0.52,則我們A點會被更新為

具體流程結合起來如下圖。
而就是INB,讓第一名的成績從0.776暴衝到0.793。
使用可以參考作者的code
其中要注意neighborhood_search是我們要自己寫的function,基本上跟sklearn的NearestNeighbors是類似的接口。
唯一的不同是,NearestNeighbors如果你指定要找5個最近的點,就一定會給你5個點,而在shopee的競賽中我們會設定一個距離的閾值(threshold),所以找5個最近的點,有可能只找到3個,因為後面2個沒有通過閾值。
具體怎麼挑選閾值,作者用的方法基本上就是靠CV score來挑選。具體方法可以參考part4。
INB的方法簡單,但是在這個比賽效果很明顯,藉由讓群體邊界更靠近後,clustering等方法效果都提升了,是個很簡單的improvement!
最後有興趣可以看一下第一名的完整pipeline,都是我part1~part5講過的技巧。
如果喜歡這篇文章可以幫我多拍手幾次XD,或是對於哪個類型文章有興趣都可以在留言區跟我講~ 後續會以中難度的ML/DS/AI知識為主,以及AI/HCI研究相關知識
參考資料: