Maxout Networks

1. Dropout

  • dropout可以訓練集成模型,它們共享參數並近似的對這些模型的預測進行了平均。它可以被當作一種通用的方法用在任何一種MLP和CNN模型中,但是在論文中,由於dropout的模型平均過程沒有被證明,因而一個模型最好的性能的獲得,應該通過直接設計這個模型使之可以增強dropout的模型平均的能力。使用了dropout的訓練過程和一般的SGD方法完全不同。dropout在更新時使用更大的步長最有效,因爲這樣可以在不同的訓練子集上對不同的模型有明顯的影響來使得目標函數有持續的波動性,理想情況下整個訓練過程就類似於使用bagging來訓練集成的模型(帶有參數共享的約束)。而一般的SGD更新時會使用更小的步長,來使得目標函數平滑的下降。對於深度網絡模型,dropout只能作爲模型平均的一種近似,顯式的設計模型來最小化這種近似誤差也可以提高dropout的性能。
  • dropout訓練的集成模型中,所有模型都只包括部分輸入和部分隱層參數。對每一個訓練樣本,我們都會訓練一個包括不同隱層參數的子模型。dropout與bagging的相同點是不同的模型使用不同數據子集,不同點是dropout的每個模型都只訓練一次且所有模型共享參數。
  • 對於預測時如何平均所有子模型的問題,bagging一般使用的是算數平均,而對dropout產生的指數多個子模型則並非顯而易見。但是如果模型只有一層p(y | v;θ)=softmax(vTW+b) 作爲輸出(p(y | v;θ) 的幾何平均),則最終的預測分佈就是簡單的softmax(vTW/2+b) ,i.e. 指數多個子模型的平均預測就是完整模型的預測僅僅將權重減半而已。這個結果只能用在單softmax層的模型中,如果是深層模型如MLP,那麼權重減半的方法只是幾何平均的一種近似。

2. Maxout

maxout是一種前向傳播結構,但是使用了一種maxout激活函數。以MLP爲例,一般使用relu激活函數輸出本層一個節點的表達式爲

hi(x)=relu(xTWi+bi)=max(xTWi+bi,0)

其中xd×nWd×mbmn 表示輸入樣本的個數,d 表示上一層節點的個數,m 表示本層節點的個數。這裏結果只表示取出的第i 列,下標i 前的省略號表示對應第i 列中所有行。
而使用maxout激活函數輸出本層一個節點的表達式爲

hi(x)=maxj[1,k](xTWij+bij)

其中xd×nWd×m×kbm×kk 表示每個隱層節點對應了k 個“隱隱層”節點,這k 個“隱隱層”節點都是線性輸出的,而maxout的每個節點就從這k 個“隱隱層”節點輸出值中取最大的。因爲max操作使得整個maxout網絡也是一種非線性的變換。

  • 對MLP而言(下圖),2個輸入節點先構成5個“隱隱層”節點,然後在5個“隱隱層”節點中使用最大的構成了本層的一個節點,本層其他節點類似。

    實現技巧: maxoutrelu唯一的區別是,relu使用的max(x,0) 是對隱層每一個單元執行的與0比較最大化操作,而maxout是對5個“隱隱層”單元的值執行最大化操作。如果將“隱隱層”單元在隱層展開,那麼隱層就有20個“隱隱層”單元,maxout做的就是在這20箇中每5個取一個最大值作爲最後的隱層單元,最後的隱層單元仍然爲4個。這裏每5個取一個最大值也稱爲最大池化步長(max pooling stride)爲5,最大池化步長默認和“隱隱層”個數相等,如果步長更小,則可以實現重疊最大池化。
    實現的時候,可以將隱層單元數設置爲20個,權重維度(2,20)偏置維度(1,20),然後在20箇中每5個取一個最大值得到4個隱層單元。

    maxout

    maxout

  • 對於CNN而言,假設上一層有2個特徵圖,本層有4個特徵圖,那麼就是將輸入的2個特徵圖用5個濾波器卷積得到5張仿射特徵圖(affine feature maps),然後從這5張仿射特徵圖每個位置上選擇最大值(跨通道池化,pool across channels)構成一張本層的特徵圖,本層其他特徵圖類似。

    實現技巧: relu使用的max(x,0) 是對每個通道的特徵圖的每一個單元執行的與0比較最大化操作,而maxout是對5個通道的特徵圖在通道的維度上執行最大化操作。而如果把5個特徵圖在本層展開,那麼本層就有20個特徵圖,maxout做的就是在這20箇中每5個取在通道維度上的最大值作爲最後的特徵圖,最後本層特徵圖仍然爲4個。同樣最大池化步長默認爲5。
    實現的時候,可以將本層特徵圖數設置爲20個,權重維度(20,2,3,3)偏置維度(1,20,1,1),然後在20箇中每5個取一個最大特徵圖得到4個特徵圖。
    參考Example of convolutional maxout layer

注意: 對於CNN而言,在maxout輸出後如果連接一個一般的降採樣最大池化層,則可以將這個降採樣最大池化融合進跨通道池化中,即在仿射特徵圖的每個池化窗口中選擇最大值(相當於同時在通道間和空間取最大值)。這樣就可以在maxout網絡中省略顯式的降採樣最大池化層。

  • 單個maxout激活函數可以理解成一種分段線性函數來近似任意凸函數(任意的凸函數都可由分段線性函數來擬合)。它在每處都是局部線性的(k個“隱隱層”節點都是線性的,取其最大值則爲局部線性,分段的個數與k值有關),而一般的激活函數都有明顯的曲率。
  • 如同MLP一樣,maxout網絡也可以擬合任意連續函數。只要maxout單元含有任意多個“隱隱層”節點,那麼只要兩個隱層的maxout網絡就可以實現任意連續函數的近似。
  • maxout網絡不僅可以學習到隱層之間的關係,還可以學習到每個隱層單元的激活函數。
  • maxout放棄了傳統激活函數的設計,它產生的表示不再是稀疏的,但是它的梯度是稀疏的,且dropout可以將它稀疏化。
  • maxout沒有上下界,所以讓它在某一端飽和是零概率事件。
  • 如果訓練時使用dropout,則dropout操作在矩陣相乘之前,而並不對max操作的輸入執行dropout。
  • 使用maxout會默認一個先驗:樣本集是凸集可分的。

3. 測試結果

1. MNIST

  • 排列不變限制的MNIST(MNIST with permutation invariant,即像素排列順序可以改變,輸入的數據是2維的),使用兩個全連接maxout層再接上一個sorfmax層,結合dropout和權重衰減。驗證集選取訓練集中後10000個樣本。在得到最小的驗證集誤差時記錄下前50000個樣本的訓練集對數似然L ,接着在整個60000樣本的訓練集上繼續訓練直到驗證集的對數似然達到L0.94%
  • 無排列不變限制的MNIST(MNIST without permutation invariant,即像素排列順序不變,輸入的數據是3維的),使用三個卷積maxout層,之後接上空間最大池化層,最後接上一個softmax層。還可以使用擴充數據集的方法進一步提高。0.45%

2. CIFAR-10

  • 預處理:全局像素歸一化和ZCA白化
  • 過程與MNIST類似,只是將繼續訓練改爲了重新訓練,因爲繼續訓練的學習率很低訓練太久。
  • 使用三個卷積maxout層,之後接上全連接maxout層,最後接上一個softmax層。13.2%(不使用驗證集數據)11.68%(使用驗證集數據)9.35%(使用平移、水平翻轉的擴充數據集)

3. CIFAR-100

  • 超參數使用和CIFAR-10一樣
  • 41.48%(不使用驗證集數據)38.57%(使用驗證集數據)

4. SVHN

  • 驗證集爲訓練集每類選取400個樣本和額外集每類選取200個樣本,其他的爲訓練集。
  • 預處理:局部像素歸一化
  • 使用三個卷積maxout層,之後接上全連接maxout層,最後接上一個softmax層(同CIFAR-10)。2.47%

4. maxout對比relu

  • 跨通道池化可以減少網絡狀態並減少模型所需要的參數。
  • 對於maxout,性能與跨通道池化時濾波器數量有很大關係,但對relu,性能與輸出單元的數量沒有關係,也就是relu並不從跨通道池化中受益。
  • 要讓relu達到maxout的表現,需要使之具有和maxout相同數量的濾波器(即使用比原來k 倍的濾波器,同樣也要k 倍的relu單元),但網絡狀態和所需要的參數也是原來的k 倍,也是對應maxout的k 倍。

5. 模型平均

  • 單層softmax有對模型進行平均的能力,但是通過觀察,多層模型中使用dropout也存在這樣的模型平均,只是有擬合精度的問題。
  • 訓練中使用dropout使得maxout單元有了更大的輸入附近的線性區域,因爲每個子模型都要預測輸出,每個maxout單元就要學習輸出相同的預測而不管哪些輸入被丟棄。改變dropout mask將經常明顯移動有效輸入,從而決定了輸入被映射到分段線性函數的哪一段。使用dropout訓練的maxout具有一種特性,即當dropout mask改變時每個maxout單元的最大化濾波器相對很少變化。
  • maxout網絡中的線性和最大化操作可以讓dropout的擬合模型平均的精度很高。而一般的激活函數幾乎處處都是彎曲的,因而dropout的擬合模型平均的精度不高。

6. 優化

  • 訓練中使用dropout時,maxout的優化性能比relu+max pooling好
  • dropout使用更大的步長最有效,使得目標函數有持續的波動性。而一般的SGD會使用更小的步長,來使得目標函數平滑的下降。dropout快速的探索着許多不同的方向然後拒絕那些損害性能的方向,而SGD緩慢而平穩的朝向最可能的方向移動。
  • 實驗中SGD使得relu飽和在0值的時間少於5%,而dropout則超過60%。由於relu激活函數中的0值是一個常數,這就會阻止梯度在這些單元上傳播(無論正向還是反向),這也就使得這些單元很難再次激活,這會導致很多單元由激活轉變爲非激活。而maxout就不會存在這樣的問題,梯度在maxout單元上總是能夠傳播,即使maxout出現了0值,但是這些0值是參數的函數可以被改變,從而maxout單元總是激活的。單元中較高比例的且不易改變的0值會損害優化性能。
  • dropout要求梯度隨着dropout mask的改變而明顯改變,而一旦梯度幾乎不隨着dropout mask的改變而改變時,dropout就簡化成爲了SGD。relu網絡的低層部分會有梯度衰減的問題(梯度的方差在高層較大而反向傳播到低層後較小)。maxout更好的將變化的信息反向傳播到低層並幫助dropout以類似bagging的方式訓練低層參數。relu則由於飽和使得梯度損失,導致dropout在低層的訓練類似於一般的SGD。
發佈了57 篇原創文章 · 獲贊 41 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章