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;\theta)=softmax(v^T W b)作為輸出(p(y | v;θ)p(y\ |\ v;\theta)的幾何平均),則最終的預測分佈就是簡單的softmax(vTW/2 b)softmax(v^T W/2 b),i.e. 指數多個子模型的平均預測就是完整模型的預測僅僅將權重減半而已。這個結果只能用在單softmax層的模型中,如果是深層模型如MLP,那麼權重減半的方法只是幾何平均的一種近似。

2. Maxout

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

hi(x)=relu(xTW⋯i bi)=max(xTW⋯i bi,0)

h_i(x)=relu(x^T W_{\cdots i} b_i)=\max(x^T W_{\cdots i} b_i,0)

其中x∈ℝd×nx \in \mathbb{R}^{d \times n},W∈ℝd×mW \in \mathbb{R}^{d \times m},b∈ℝmb \in \mathbb{R}^{m}。nn表示輸入樣本的個數,dd表示上一層節點的個數,mm表示本層節點的個數。這裡結果只表示取出的第ii列,下標ii前的省略號表示對應第ii列中所有行。
而使用maxout啟用函式輸出本層一個節點的表示式為

hi(x)=maxj∈[1,k](xTW⋯ij bij)

h_i(x)=\max_{j\in[1,k]}(x^T W_{\cdots ij} b_{ij})

其中x∈ℝd×nx \in \mathbb{R}^{d \times n},W∈ℝd×m×kW \in \mathbb{R}^{d \times m \times k},b∈ℝm×kb \in \mathbb{R}^{m \times k},kk表示每個隱層節點對應了kk個“隱隱層”節點,這kk個“隱隱層”節點都是線性輸出的,而maxout的每個節點就從這kk個“隱隱層”節點輸出值中取最大的。因為max操作使得整個maxout網路也是一種非線性的變換。

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

    實現技巧: maxoutrelu唯一的區別是,relu使用的max(x,0)\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)\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個樣本的訓練集對數似然LL,接著在整個60000樣本的訓練集上繼續訓練直到驗證集的對數似然達到LL。0.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相同數量的濾波器(即使用比原來kk倍的濾波器,同樣也要kk倍的relu單元),但網路狀態和所需要的引數也是原來的kk倍,也是對應maxout的kk倍。

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。