stochastic pool

看到很多的對CNN的改造的文章中都是對pool做東西,最近看到一個隨機池化,就好奇的去看了一下

可以參看這篇文章 Stochastic Pooling for Regularization of Deep Convolutional Neural Networks

在caffe中是支持最大池化,均值池化,隨機池化的

在使用中常見的是mean-poolingmax-pooling,下面就簡單介紹一下stochastic pooling

  stochastic pooling方法非常簡單,只需對feature map中的元素按照其概率值大小隨機選擇,即元素值大的被選中的概率也大。而不像max-pooling那樣,永遠只取那個最大值元素。

  假設feature map中的pooling區域元素值如下:

   

  3*3大小的,元素值和sum=0+1.1+2.5+0.9+2.0+1.0+0+1.5+1.0=10

  方格中的元素同時除以sum後得到的矩陣元素爲:

   

  每個元素值表示對應位置處值的概率,現在只需要按照該概率來隨機選一個,方法是:將其看作是9個變量的多項式分佈,然後對該多項式分佈採樣即可,theano中有直接的multinomial()來函數完成。當然也可以自己用01均勻分佈來採樣,將單位長度1按照那9個概率值分成9個區間(概率越大,覆蓋的區域越長,每個區間對應一個位置),然隨機生成一個數後看它落在哪個區間。

  比如如果隨機採樣後的矩陣爲:

   

  則這時候的poolng值爲1.5

  使用stochastic pooling時(即test過程),其推理過程也很簡單,對矩陣區域求加權平均即可。比如對上面的例子求值過程爲爲:

     0*0+1.1*0.11+2.5*0.25+0.9*0.09+2.0*0.2+1.0*0.1+0*0+1.5*0.15+1.0*0.1=1.625 說明此時對小矩形pooling後的結果爲1.625.

  在反向傳播求導時,只需保留前向傳播已經記錄被選中節點的位置的值,其它值都爲0,這和max-pooling的反向傳播非常類似。

      下面是原文中給出的一個整體的計算的圖


   在計算時的時候train計算主要是進行隨機採樣的方式進行計算,在test時主要是使用概率進行計算的選取哪一個,是均值池化和最大池化的一箇中間

   區域吧。

  Stochastic pooling優點:

  方法簡單;

  泛化能力更強;

  可用於卷積層(文章中是與Dropout和DropConnect對比的,說是Dropout和DropConnect不太適合於卷積層. 不過個人感覺這沒什麼可比性,因爲它們在網絡中所處理的結構不同)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章