深度学习(二十三)Maxout网络学习-ICML 2013
Maxout網絡學習
原文地址:http://blog.csdn.net/hjimce/article/details/50414467
作者:hjimce
一、相關理論
? ?本篇博文主要講解2013年,ICML上的一篇文獻:《Maxout ?Networks》,這個算法我目前也很少用到,個人感覺最主要的原因應該是這個算法參數個數會成k倍增加(k是maxout的一個參數),不過沒關系,對于我們來說知識積累才是最重要的,指不定某一天我們就需要用到這個算法,技多不壓身。個人感覺Maxout網絡和Dropout有很多相似的地方。
? ? 本篇博文將從什么是maxout網絡講起,先解答maxout的源碼層實現,因為很多人最感興趣的還是算法要怎么實現,當然我也是這樣的。我看文獻,一般最在意的還是源碼的實現,有的文獻理論公式推導了十幾頁,結果5行代碼搞定,我看到想哭,這也許就是我討厭做學術研究的原因吧。知道了源碼怎么實現后,我們簡單啰嗦一下maxout相關的理論意義。
二、Maxout算法流程
1、算法概述
開始前我們先講解什么叫maxout networks,等我們明白了什么叫maxout 網絡后,再對maxout的相理論意義做出解釋。Maxout是深度學習網絡中的一層網絡,就像池化層、卷積層一樣等,我們可以把maxout 看成是網絡的激活函數層,這個后面再講解,本部分我們要先知道什么是maxout。我們假設網絡某一層的輸入特征向量為:X=(x1,x2,……xd),也就是我們輸入是d個神經元。Maxout隱藏層每個神經元的計算公式如下:
?
上面的公式就是maxout隱藏層神經元i的計算公式。其中,k就是maxout層所需要的參數了,由我們人為設定大小。就像dropout一樣,也有自己的參數p(每個神經元dropout概率),maxout的參數是k。公式中Z的計算公式為:
?
權重w是一個大小為(d,m,k)三維矩陣,b是一個大小為(m,k)的二維矩陣,這兩個就是我們需要學習的參數。如果我們設定參數k=1,那么這個時候,網絡就類似于以前我們所學普通的MLP網絡。
我們可以這么理解,本來傳統的MLP算法在第i層到第i+1層,參數只有一組,然而現在我們不怎么干了,我們在這一層同時訓練n組參數,然后選擇激活值最大的作為下一層神經元的激活值。下面還是用一個例子進行講解,比較容易搞懂。
為了簡單起見,假設我們網絡第i層有2個神經元x1、x2,第i+1層的神經元個數為1個,如下圖所示:
(1)以前MLP的方法。我們要計算第i+1層,那個神經元的激活值的時候,傳統的MLP計算公式就是:
z=W*X+b
out=f(z)
其中f就是我們所謂的激活函數,比如Sigmod、Relu、Tanh等。
(2)Maxout 的方法。如果我們設置maxout的參數k=5,maxout層就如下所示:
相當于在每個輸出神經元前面又多了一層。這一層有5個神經元,此時maxout網絡的輸出計算公式為:
z1=w1*x+b1
z2=w2*x+b2
z3=w3*x+b3
z4=w4*x+b4
z5=w5*x+b5
out=max(z1,z2,z3,z4,z5)
所以這就是為什么采用maxout的時候,參數個數成k倍增加的原因。本來我們只需要一組參數就夠了,采用maxout后,就需要有k組參數。
三、源碼實現
ok,為了學習maxout源碼的實現過程,我這邊引用keras的源碼maxout的實現,進行講解。keras的網站為:http://keras.io/? ?。項目源碼網站為:https://github.com/fchollet/keras。下面是keras關于maxout網絡層的實現函數:
[python]?view plaincopy
[python]?view plaincopy
下面在簡單啰嗦一下相關的理論,畢竟文獻的作者寫了那么多頁,我們總得看一看才行。Maxout可以看成是一個激活函數?,然而它與原來我們以前所學的激活函數又有所不同。傳統的激活函數:
比如閾值函數、S函數等。maxout激活函數,它具有如下性質:
1、maxout激活函數并不是一個固定的函數,不像Sigmod、Relu、Tanh等函數,是一個固定的函數方程
2、它是一個可學習的激活函數,因為我們W參數是學習變化的。
3、它是一個分段線性函數:
然而任何一個凸函數,都可以由線性分段函數進行逼近近似。其實我們可以把以前所學到的激活函數:relu、abs激活函數,看成是分成兩段的線性函數,如下示意圖所示:
maxout是一個函數逼近器,對于一個標準的MLP網絡來說,如果隱藏層的神經元足夠多,那么理論上我們是可以逼近任意的函數的。類似的,對于maxout 網絡也是一個函數逼近器。
定理1:對于任意的一個連續分段線性函數g(v),我們可以找到兩個凸的分段線性函數h1(v)、h2(v),使得這兩個凸函數的差值為g(v):
參考文獻:
1、《Maxout ?Networks》
2、http://www.cnblogs.com/tornadomeet/p/3428843.html
**********************作者:hjimce ? 時間:2015.12.20 ?聯系QQ:1393852684 ? 地址:http://blog.csdn.net/hjimce? ?原創文章,版權所有,轉載請保留本行信息(不允許刪除)
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的深度学习(二十三)Maxout网络学习-ICML 2013的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(二十二)Dropout浅层理解
- 下一篇: 深度学习(二十四)矩阵分解之基于k-me