# Weighted Channel Dropout for Regularization of Deep Convolutional Neural Network ###### tags: `paper notes` `deep learning` ## Intro ### 背景敘述 * CNN這幾年能成長得這麼快是由於它多層的非線性hidden layer結構,其中包含幾百萬的參數並能利用其學習input/output之間的關係, 不過當只有有限training data的時候(像是FGVC), 就會常常發生overfitting 導致其表現下降 * Dropout在許多解決overfitting的方法中脫穎而出 , AlexNet, VGG, Inception等都有使用 * Dropout將前一層的輸出攤平成一維vector並且將下一層的幾個neuron隨機設為0 * 在大部分case中, Dropout是被用在限制CNN中的FCL而不適合用在Conv . 其中一個主要原因是Dropout是在每個neuron上做操作, 而在Conv之中每一個channel是由多重的neurons作為基本單元所組成的, 而每一個neuron都對應一個特定樣式的input image ### WCD敘述與來源 * 本篇論文提出一個新穎的技巧去正規化一疊Conv (FCL的前一層) , 而這個conv它的channels是從下一層隨機選出的 * 這篇論文的另一個啟發是從對CNN中一疊Conv的觀察而來. <br> 所有在前一層產生的channel在下一層都得到平等的對待. 但這就衍伸出了一個問題, 也就是說這些特質可能不是那些擁有最佳特性的features. <br> 對每一個input image來說,只有少量在高層的channels被激發,同時, 其他channel的一些neurons respones都靠近0 * 因此,Instead of totally random selection, 我們根據激活的相對程度來選擇channels. 這個方法可被當成一個**去model channels之間的相互依存關係的方法** 在設計理念上很像SE-Block, 之後會談到 * 總之 此篇論文主要貢獻在於一個叫做**Weighted Chaneel Dropout(WCD)** 的方法 , 而這個方法是在CNN中正規化了Conv layer ### WCD流程: * 首先評估前一層的output channels 並且 assign一個score給每一個channel .而這個score是從Global Average Pooling算出來的 . * 接下來, 關於channel的選擇, 我們產生了一個binary mask去標出每一個channel是否應該被選擇 . 而擁有相對高score的channel會一直有很高的機率被選到. * 最後, 使用一個額外的亂數產生器來為下一層的channel做過濾 * 根據score產生mask的方法是從Weighted Random Selection和 一個有效率的演算法去濃縮而成的 (後面會提到) * 除此之外,因為WCD不依賴任何參數,因此它可以僅用很少的計算資源就插入任何一個已經在ImageNet Pretrained過的現存網路 * WCD的開發動機是去緩和 CNN在small dataset上做finetuning造成的overfitting, WCD可以幫助網路從輸入中去學習更多強力的特徵, 目前已經在VGG ResNet等等上測試過 --- ## Related Work 由於越大的模型表現越好 因此近幾年來模型越來越大 而大模型造成的問題之一就是會overfitting 為了避免這個問題 過去我們利用許多 ### regularization的方法 * **Dropout** : 隨機挑幾個neuron將其設為0 * **DropoutConnect**: 隨機挑幾個layers之間的weight將其設為0 * **Batch Normalization**: 透過標準化每一層的input來改善training * **DisturbLabel randomly**: 用一些不正確的值去取代一些label (為了regularize loss layer) * **Stochastic Depth** : 隨機跳過一些殘差網路的layer 除此之外, Park and Kwak分析過在max-pooing和conv上做Dropout的效能, 而Morerio透過加入一個time schedule可以讓他自適應(Adaptively)的增加丟掉的neuron比例 ### 以上方法中Dropout與WCD最像 但兩者依然有以下3點不同: 1. WCD is proposed to regularize the stack of convolutional layers while Dropout is usually inserted between the fully connected layers 2. WCD differs from Dropout in that it operates on the channels other than the neurons. While in the stack of convolutional layers, each channel is a basic unit 3. The neuron selection in Dropout is completely random, in contrast, WCD selects the channels according to their activation status ### WCD是甚麼? * **Dropout可被視為WCD的Special case,而且兩者可在一個網路中同時使用** * **WCD也可被視為一個尋找各個Channel之間關係的特殊方法**,這方面就和SE-Block的目標一樣 * 但是不同於SE-Block的是,WCD完全是parameter-free而且只在training的階段之中被加入,而且其不需要像SE-Blcok需要先在大型資料集re-pretraining,WCD只需要在任何已有的網路中直接插入即可,因此也很適合在小資料集中應用。 * WCD在CNN中高層的Conv layer被使用, SE-Block則是影響比較前面的Conv layer , 從這個觀點來看 , 兩者是互補的 --- ## WCD方法介紹 ### 符號介紹 在兩個連續的Conv layer中 $X = [x_1,x_2,...,x_N]$ 代表的是前一層的輸出 $\widetilde{X} = [\widetilde{X_1},\widetilde{X_2},...,\widetilde{X}_\widetilde{N}]$代表的是下一層的輸入 * $N$和$\widetilde{N}$都是channel的數量 * $X_i$和$\widetilde{X_i}$則是第$i$個channel * 在大部分的情況下 $\widetilde{X} = X$ $\widetilde{N} = N$ * $\widetilde{x_i} = x_i, i=1,2,...,N$ * WCD隨機從$X$中選擇Channel並根據每個Channel的激發狀態去$\widetilde{X}$ * 上一層和下一層也可以是Pooling layer * 在本篇論文的方法中$\widetilde{N} = N$ WCD有**Two steps**(Rating Channel and Selecting Channels) + **Three modules** (Global Average Pooling , Weighted Random Selection and Random Number Generator) ### **Step1:Rating Channel** 首先對每個channel做評價(rate), 接下來為每個Channel都assign一個分數(score), 利用這個分數來當成下一步選擇channel的標準 所謂的score是使用Global Average Pooling(GAP)來算出: $score_i = \frac{1}{W \times H} \Sigma \Sigma x_i(j,k)$ * W and H = Width and Height of all channels * 假設$score_i > 0$ (因為在現代的CNN中,$ReLU$被加在每一個Conv layer之後) ### **Step 2:Selecting Channels** 有了score之後, 使用一個二進制的遮罩(Binary mask)$mask_i$去決定是否要留下channel $x_i$ 每一個$x_i$會被留下的機率$p_i=\frac{score_i}{\Sigma^N_{j=1}score_j}$ * $mask_i$如果把$p_i$設為1 , 那這個channel將會有很高的機率被留下 * [Binary mask](https://stackoverflow.com/questions/10493411/what-is-bit-masking) --- #### **Weighted Random Selection(WRS)** 根據$score$產生$mask$的方法可看成WRS(另一篇論文的方法)的special case ![](https://i.imgur.com/YMVIF7K.jpg) * 對於每一個分數為 $score_i$的channel $x_i$都生成一個介於$(0~1)$的random number $r_i$ 並藉由$r_i$算出$key_i$ , 接下來選擇其中$M$個最大的$key$值並將其相應的$mask_i$設為1 $key_i = r_i^{\frac{1}{score_i}}$ * [WRS原論文](https://utopia.duth.gr/~pefraimi/research/data/2007EncOfAlg.pdf) #### **Random Number Generation(RNG)** * 高層Conv layer中的channels差異很大, 只有少量的channel會被assign相對很高的激發數值(score),其他channels的激發數值(score)卻都接近於0 * 因此如果完全根據score來選擇channel,那其實每次前向傳導出來都是一樣的channel去做(高者恆高,低者恆低,不會學到任何新東西),但我們必須避免這個結果 * 為了改善這個問題,使用了一個二進制的亂數產生器 $RNG$ 作為計算$mask_i$的參數,並命名為$q$ * 改善之前 如果$p_i >> p_j , \forall j \neq i$, 那其實$mask_i$幾乎就會被設為1 ,會造成這個channel從頭到尾一定會被選到 * 改善之後 即使$mask_i = 1$ , 這個channel$i$還是會有$1-q$的機率不被選到 ### **Summary** $\widetilde{X}$ is constructed as follows: ![](https://i.imgur.com/CCwtLTf.jpg) * 當$mask_i$有$p_i$的機率被設為1 , 那$RNG$就會有$q$的機率產生$RNG = 1$ * $\widetilde{x_i} = 0$表示所有在$W \times H$範圍內的神經元都會被設為0 <br> 係數$\alpha$是拿來減少test data 和 training data之間的bias ![](https://i.imgur.com/64Ks0Pe.jpg) * $\widetilde{M}$表示那群最後有被選到的channel * 分子是所有channels的$scores之總和$ * 分母是所有**被選到**的channels的$scores之總和$ * **注意WCD只在會在訓練階段被加入,在做推論的時候,所有的channels還是會被加入下一層** <br> ![](https://i.imgur.com/zd0VVZr.jpg) * $keep_{ratio}$是指有多少channel在training中作為$\widetilde{X}$被保留下來 *但是The $keep_ratioi$ set for the convenience of description in the following, which is not directly used to select channels in WCD * $wrs_{ratio} $和$q$是WCD的兩個**超參數**,通常$0<wrs_{ratio} $,$0 < q < 1$ * WCD的Special case有兩種: * 當$wrs_{ratio} = 1 , 0<q<1$的時候,$\widetilde{X}$是完全從$X$中的Channels選出來的, 這個speical case又被稱為$Channel-Wise Dropout$ , 當$W = H = 1$ , 他其實就是原本的Dropout * 當$0 < wrs_{ratio} < 1 , q = 1$的時候, $mask_i=1$的channel絕對會被保留住 * 無論把$wrs_ratio$或者是$q$被設為0都是不合理的, WCD也可看成$Channel-Wise Dropout$的通用版本 ,不過同時擁有更多的彈性 ## Application and Expermental 論文將WCD用到了VGG , ResNet , Inception上 ![](https://i.imgur.com/gVymUX3.jpg) ![](https://i.imgur.com/hbde4SW.jpg) 並使用了三種資料集 * CUB-200-2011 (Wah et al. 2011) * Stanford Cars (Krause et al. 2013) * Caltech-256 (Griffin, Holub, and Perona 2007). ![](https://i.imgur.com/E9xN8Xf.jpg) ![](https://i.imgur.com/YqpB459.jpg) ## Conclusion 本論文利用WCD來對CNN做正規化,這個方法根據channel的激發狀態來過濾channel,流程分為2個Step(Rating Chanel和Selecting Channel)還有3個Module(Global Average Pooling + WRS + RNG). 總結來說,WCD是一個可被插入模型之中的輕量Component,並擁有parameter-free和不需要在ImageNet上pretrain的特性,這些特性使它非常適合在小資料集上使用,未來WCD也可以應用在其他電腦視覺的任務上,像是Object detection