卷積層的dropout - dropblock
DropBlock: A regularization method for convolutional networks
dropout的不足
dropout是深度學習中避免過擬合的手段之一,經典網路結構中,dropout都被放到全連線層之後,鮮有放到卷積層之後。這是因為實驗證明卷積層後的dropout層對網路泛化能力的改進微乎其微,本文分析了其中的原因:卷積層輸出特徵圖各個元素之間存在很強的相關性,隨機把某些原始置為0,其鄰域元素帶有何其相似的資訊,dropout的功能沒法實現。基於這個分析,本文提出了針對卷積層輸出特徵的dropout改進版:dropblock,不是隨機把某些元素置零,而是隨機把某些block都置零。如下圖所示。
實現
dropblock有兩個引數:block_size和
。其中
的含義和dropout中引數一致,表示每個元素被置零的概率,被用來從特徵圖的valid區域中選擇一些需要置為0的元素(valid區域是指區域內任意點作為中心點,block_sized大小的鄰域不會超出特徵圖尺寸)。以這些選中的元素為中心,確定block_size x block_size的鄰域,這個區域內所有特徵點都要置為0。演算法偽碼如下:
scheduled dropblock
和dropout不同,實驗發現dropblock的 值如果訓練初始就設定較小的值,則會影響網路收斂。文中採用 的線性函式在訓練過程中從1開始逐步降低 的值,直至達到目標值
實驗
DropBlock for Resnet50
合適配置DropBlock,可以幫助resnet50在ImageNet上提高1~2%, resent的bottleneck模組包括skip和conv兩個分支,dropBlock不僅可以作用在conv分支,也可以作用在skip分支上。如下下圖所示
第一列base實驗,第二列是在skip分支增加dropblock模組,第三列是利用scheduled dropblcok。最優的引數是block_size=7.