該如何解釋這個理論?
這其實是個好問題,網上有很多誤導人的觀點,讓我們來好好分析一下。
首先,解釋一下什麼是CNN的平移不變性。簡單來說,平移不變性(translation invariant)指的是CNN對於同一張圖及其平移後的版本,都能輸出同樣的結果。這對於圖像分類(image classification)問題來說肯定是最理想的,因為對於一個物體的平移並不應該改變它的類別。而對於其它問題,比如物體檢測(detection)、物體分割(segmentation)來說,這個性質則不應該有,原因是當輸入發生平移時,輸出也應該相應地進行平移。這種性質又稱為平移等價性(translation equivalence)。這兩個概念是比較混淆的,但確實是兩個不同的東西(敲黑板)。
那麼,平移不變性是從哪裡來的呢?一般來說,一個CNN的性質,要麼是從它本身使用的結構得到的,要麼是從它在數據集中學到的參數得到的。前者的簡單例子是加了sigmoid層的網路的輸出範圍自然變成了0到1之間,後者的例子則是CNN在ImageNet上訓練之後就有了能分類圖像的能力且特徵也具有一定的泛化性。
CNN比較常見的層有卷積層、池化層(max或者mean)、全連接層,其中池化層又包括普通池化層和用在全連接層之前的全局池化層(global pooling)。按照市面上最常見的觀點,CNN本身結構中卷積+池化就具有平移不變性。本人並不同意這個觀點,下面具體分析一下。
先來分析單層的情況。
(1) 卷積層:在信號處理中,卷積(以及相關)的性質包含了平移等價性。對於共享權值的卷積層來說,只在平移量為stride的整數倍時平移等價性才嚴格成立。而僅僅在卷積核比較均勻而且輸入也有很多均勻區域的時候纔有比較弱的平移不變性,因為此時微小的移動對於輸出改變比較少。
(2) 池化層:普通池化層中,均值池化等價於固定卷積核的卷積層,因此性質也相同;最大值池化也類似,但取最大值的操作使其相對於均值帶有更強的平移不變性。全局池化層將整個輸入變成1x1大小的輸出,忽略了特徵的位置信息,當前面的輸入具有平移等價性的時候具有比較強的平移不變性。
(3) 全連接層:全連接層這兩個性質都沒有,因為沒有在不同位置共享權值,特徵在不同位置對於輸出的貢獻變化很大。因此,從單層來看,只有全局池化有一定的平移不變性,其它都比較弱甚至沒有。
如果把這些層串起來,那麼在使用全連接層的時候整個CNN的結構一般不具有平移不變性。就算用了全局池化層,由於前面疊加的多層卷積層的累計效應,最後的平移不變性也很弱,只有當位移是整個網路的降採樣倍數的整數倍才存在,概率很低。因此,能用於分類的平移不變性主要來源於參數。因為卷積層的平移等價性,這種平移不變性主要是由最後的全連接層來學習,而對於沒有全連接層的網路更難有這種性質。
參數的學習需要數據,由於數據中平移的分佈一般都比較不均勻,引入平移的數據增強(augmentation)肯定是必要的。那有人會問,為什麼好像沒看到有這個增強方式?其實裁切(crop)就是一種平移的數據增強方式,因為不同裁切方式對應的patch之間的變換就是平移。而且這種方式相比於平移更加自然,沒有周圍的黑邊padding,因此更加常用。
總結起來,就是CNN的平移不變性主要是通過數據學習來的,結構只能帶來非常弱的平移不變性,而學習又依賴於數據增強中的裁切,裁切相當於一種更好的圖像平移。
最後再說點題外話。正是因為池化本身帶有弱的平移不變性,且會損失一些信息,在對平移需要等價性的一些任務裏(比如檢測、分割)會經常用stride為2的卷積層來替代池化層。而在很多分類任務中,為了學習到一些全局特徵,常常會在網路的最後使用全局池化或者金字塔池化的方式來消除平移的影響。
以上是我的一些想法,可能有地方想的不太正確,歡迎大家來討論。
---------------------------------分割線---------------------------------------
11.16日更新:
感謝 @yx愛自由 提供的arxiv上的新文章[1],簡單讀了一下,整體結論和我上面分析類似,這裡把裡面的實驗結果也介紹一下並進行分析。
文章實驗了三種不同的網路VGG16、ResNet50和InceptionResNetV2在不同變換下的不變性 (主要是平移),並進行了一些簡單的分析。下面的圖都來自於文章: