[toc]
1. Maxout Networks
arXiv:1302.4389 [stat.ML]
tensorflow2代碼:https://github.com/zhangkaihua88/ML_Paper
1.1. 摘要
maxout:
- 旨在通過dropout來加快優化過程,并提高準確度(與drop共同使用);
- 模型的輸出是模型輸入的最大值
1.2. 介紹
dropout
- 可以訓練集成模型
- 共享參數并近似的對這些模型的預測進行了平均
- 一種不加區分的適用型工具,幾乎可以應用于任何模型,都可以產生一定的性能改進。
dropout與SDG
-
dropout
在更新時最有效的方式是使用更大的步長,因為這樣可以在不同的訓練子集上對不同的模型有明顯的影響來使得目標函數有持續的波動性,理想情況下整個訓練過程就類似于使用bagging來訓練集成的模型(帶有參數共享的約束)。 - SGD
更新時一般會使用更小的步長,來使得目標函數平滑的下降。
對于深度網絡模型,dropout只能作為模型平均的一種近似,顯式的設計模型來最小化這種近似誤差也可以提高dropout的性能。
1.3. 回顧droupt
在給定輸入向量后,輸出預測向量
,該構成包含了一系列的隱含層
。
Dropout訓練一組由包含和
中變量的子集組成的所有模型組成的模型。使用同一組參數
來標識一組分組
,其中
是一個二進制掩碼,用來決定模型中哪些變量參與運算。
每次在訓練集上進行訓練時,我們都按照的梯度對不同的
隨機取樣訓練不同的子模型。
可以通過和
和掩碼的按元素相乘得到不同子模型
的實例
當集合需要將所有子模型的預測平均起來進行預測時,函數形式就變得非常重要。
多個指數模型的預測平均值可以簡單的通過運行權重除以2的完整模型來得到。即當時,通過重整
的幾何平均定義的預測分布,可以很簡單的由
dropout與bagging
- 都是在不同子集上訓練出不同模型
- dropout只訓練一次,且所有模型共享參數。像是在訓練一個模型集合而不是訓練單個模型,每次的更新都必須有重大的影響,這樣才能使得該子模型能較好的擬合當前的輸入
- bagging對子模型的輸出進行算數平均,dropout是幾何平均
1.4. 模型maxout描述
- 是一個簡單的前饋框架模型
- 使用了一個新的激活函數:maxout unit
給定一個輸入(
可能是輸入
,也可能是隱含層的狀態),maxout隱含層的采用下式實現:
其中,
,
,
。
,
都是可訓練參數。
表示每個隱藏節點對應k個“隱隱層”節點,這
個“隱隱層”節點都是線性輸出。maxout的每個節點就從這k個“隱隱層”節點輸出值中取最大的。所以使得maxout為一種非線性的變換
Notes
- maxout因為有參數同時為非線性,所以既可以是網絡也可以是激活器
-
單個maxout單元可以解釋為對任意凸函數進行線性逼近。(任意的凸函數都可由分段線性函數來擬合)。它在每處都是局部線性的(k個“隱隱層”節點都是線性的,取其最大值則為局部線性,分段的個數與k值有關),而一般的激活函數都有明顯的曲率。
20200206171729.png - 如同MLP一樣,maxout網絡也可以擬合任意連續函數。只要maxout單元含有任意多個“隱隱層”節點,那么只要兩個隱層的maxout網絡就可以實現任意連續函數的近似。
- maxout網絡不僅可以學習到隱層之間的關系,還可以學習到每個隱層單元的激活函數。
- maxout放棄了傳統激活函數的設計,它產生的表示不再是稀疏的,但是它的梯度是稀疏的,且dropout可以將它稀疏化。
- maxout沒有上下界,所以讓它在某一端飽和是零概率事件。
- 如果訓練時使用dropout,則dropout操作在矩陣相乘之前,而并不對max操作的輸入執行dropout。
- 使用maxout會默認一個先驗:樣本集是凸集可分的。
1.5. Maxout是一個通用的近似器
命題1:對于任意的正整數,
,都存在兩組
維的實數參數向量
和
使得
即任意的分段連續函數都可以使用兩個凸分段線性函數的差來表示。
命題2:根據Stone-Weierstrass近似定理,令屬于緊空間(compact domain)
, 函數
是一個連續函數,一個正實數
。存在分段線性函數(PWL function)
,使得
(取決于
)
命題3:萬能近似理論:任何連續函數,在緊空間上都可以使用具有兩個maxout單元的maxout網絡近似。
證明:
- 命題2,一個分段線性函數可以盡可能近似(取決于
)一個連續函數;
- 命題1,一個分段線性函數的表示正好和一個maxout網絡完全匹配,該maxout網絡具有兩個maxout單元
和
,且k足夠大的,可以達到所需的近似程度
。
- 綜上所述,我們可以得出結論:一個具有兩個maxout單元的maxout網絡可以任意程度的逼近任何一個緊空間內的連續函數
。通常情況下,近似程度越大(即
),k越大(即
)。
1.6. maxout與relu
relu表達式
maxout表達式
唯一區別
- relu使用的max(x,0)是對隱層每一個單元執行的與0比較最大化操作
- maxout是對
個“隱隱層”單元的值執行最大化操作(k為最大池化步長,max pooling stride。一般最大池化步長與k相等,如果步長小,則會有重疊最大池化)
(一種實現方式2-4-1,maxout是對5個“隱隱層”單元的值執行最大化操作。如果將“隱隱層”單元在隱層展開,那么隱層就有20個“隱隱層”單元,maxout做的就是在這20個中每5個取一個最大值作為最后的隱層單元,最后的隱層單元仍然為4個。實現的時候,可以將隱層單元數設置為20個,權重維度(2,20)偏置維度(1,20),然后在20個中每5個取一個最大值得到4個隱層單元。)
1.7. 模型平均
- 單層softmax有對模型進行平均的能力,但是通過觀察,多層模型中使用dropout也存在這樣的模型平均,只是有擬合精度的問題。
- 訓練中使用dropout使得maxout單元有了更大的輸入附近的線性區域,因為每個子模型都要預測輸出,每個maxout單元就要學習輸出相同的預測而不管哪些輸入被丟棄。改變dropout mask將經常明顯移動有效輸入,從而決定了輸入被映射到分段線性函數的哪一段。使用dropout訓練的maxout具有一種特性,即當dropout mask改變時每個maxout單元的最大化濾波器相對很少變化。
- maxout網絡中的線性和最大化操作可以讓dropout的擬合模型平均的精度很高。而一般的激活函數幾乎處處都是彎曲的,因而dropout的擬合模型平均的精度不高。
1.8. 優化
- 訓練中使用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。
1.9. 參考資料
Paper---Maxout Networks
CSD---Maxout Networks
CSDN---論文筆記_Maxout Networks