1李丰、原理簡(jiǎn)介
maxout激發(fā)函數(shù),則其隱含層節(jié)點(diǎn)的輸出表達(dá)式為:
這里的W是3維的苗桂,尺寸為d*m*k药磺,其中d表示輸入層節(jié)點(diǎn)的個(gè)數(shù),m表示隱含層節(jié)點(diǎn)的個(gè)數(shù)煤伟,k表示每個(gè)隱含層節(jié)點(diǎn)對(duì)應(yīng)了k個(gè)”隱隱含層”節(jié)點(diǎn)与涡,這k個(gè)”隱隱含層”節(jié)點(diǎn)都是線性輸出的,而maxout的每個(gè)節(jié)點(diǎn)就是取這k個(gè)”隱隱含層”節(jié)點(diǎn)輸出值中最大的那個(gè)值持偏。因?yàn)榧ぐl(fā)函數(shù)中有了max操作,所以整個(gè)maxout網(wǎng)絡(luò)也是一種非線性的變換氨肌。
下圖可以幫你直觀的認(rèn)識(shí)什么是maxout激活函數(shù)(下圖中k=3):
maxout的擬合能力是非常強(qiáng)的鸿秆,它可以擬合任意的的凸函數(shù)。最直觀的解釋就是任意的凸函數(shù)都可以由分段線性函數(shù)以任意精度擬合怎囚,而maxout又是取k個(gè)隱隱含層節(jié)點(diǎn)的最大值卿叽,這些”隱隱含層"節(jié)點(diǎn)也是線性的,所以在不同的取值范圍下恳守,最大值也可以看做是分段線性的(分段的個(gè)數(shù)與k值有關(guān))考婴。論文中的圖如下(它表達(dá)的意思就是可以擬合任意凸函數(shù),當(dāng)然也包括了ReLU了):
2催烘、Maxout與Dropout
Dropout是一種網(wǎng)絡(luò)規(guī)則化技巧沥阱,其實(shí)它就是相當(dāng)于在訓(xùn)練很多個(gè)不同的網(wǎng)絡(luò)結(jié)構(gòu),盡管如此伊群,推理階段所有不同結(jié)構(gòu)的參數(shù)依然是共享的考杉,因?yàn)閷?shí)際上只有一個(gè)網(wǎng)絡(luò)存在策精。
在機(jī)器學(xué)習(xí)算法中,有一個(gè)概念叫做bagging崇棠,bagging就相當(dāng)于提供了一種投票機(jī)制咽袜,對(duì)于一個(gè)任務(wù),我們不是僅僅使用一個(gè)模型來(lái)做出決策枕稀,而是通過(guò)多個(gè)模型的平均來(lái)決定最終的決策询刹。
由于在Dropout中僅僅只有一個(gè)模型,因此無(wú)法進(jìn)行平均操作萎坷,取而代之的是將模型的權(quán)重乘以Dropout比率p凹联,這個(gè)做法在線性激活函數(shù)中表現(xiàn)尚可,但是如果是經(jīng)過(guò)非線性激活函數(shù)那就不準(zhǔn)確了食铐。而Maxout模型的仿射變換中沒(méi)有非線性激活函數(shù)匕垫,因此我們也可以在此變換中引入Dropout技巧,并且實(shí)驗(yàn)表明Maxout與Dropout的結(jié)合效果比較好虐呻。
3象泵、Maxout的tensorflow實(shí)現(xiàn)
import tensorflow as tf
x = tf.random_normal([1,3])
m = 4
k = 3
d = x.get_shape().as_list()[-1]
W = tf.Variable(tf.random_normal(shape=[d, m, k]))
b = tf.Variable(tf.random_normal(shape = [m, k]))
dot_z = tf.tensordot(x, W, axes=1) + b
z = tf.reduce_max(dot_z, axis=2)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run([x,dot_z,z]))