漫談Capsule Network基本原理
半個(gè)多月前,Hinton的讓人期待已久的Dynamic Routing Between Capsules終于在arixv上公開,第一作者是Sara Sabour,據(jù)Hinton本人介紹,Sabour是伊朗人,本來想去華盛頓大學(xué)讀計(jì)算機(jī)視覺,但是簽證被美國拒絕了,于是Google的多倫多人工智能實(shí)驗(yàn)室挖到了她,跟隨Hinton一起做Capsule Network方面的研究。
Dynamic Routing Between CapsulesMatrix Capsules with EM Routing
首先我們談?wù)凥inton為什么要提出Capsule Network,傳統(tǒng)的圖像識(shí)別是使用CNN來做的(如下圖所示),CNN通常由卷積層和池化層共同構(gòu)成,卷積層從原始圖像中提取每個(gè)局部的特征,池化層則負(fù)責(zé)將局部特征進(jìn)行概括,最終模型通過softmax分類器輸出每個(gè)類別的概率分布。
CNN應(yīng)用到圖像識(shí)別上似乎非常合理,而且實(shí)際表現(xiàn)也非常好,但是Hinton則認(rèn)為CNN中的池化操作是一個(gè)災(zāi)難,原因就在于池化操作只能給出粗略的位置信息,允許模型對(duì)一些小的空間上的變化視而不見,并不能精準(zhǔn)地學(xué)習(xí)到不同物體的位置關(guān)聯(lián),比如一個(gè)區(qū)域內(nèi)的實(shí)體的位置、大小、方向甚至是變形度和紋理。雖然CNN可以識(shí)別一張正常的人臉,但是如果把人臉照片中的一只眼睛與嘴巴的位置對(duì)調(diào)一下,CNN還是會(huì)將其識(shí)別成人臉,這是不對(duì)的。雖然池化的本意是為了保持實(shí)體的位置、方向的不變性,但是實(shí)際中的簡單粗暴的取最大或取平均的池化操作會(huì)使得池化的效果事與愿違。
人類識(shí)別圖片是基于平移和旋轉(zhuǎn)將看到的圖片與大腦中已有的模式進(jìn)行匹配,例如,對(duì)于一個(gè)雕像,無論以什么角度取拍照,人們都可以輕松識(shí)別出它就是一個(gè)雕像,但是這個(gè)對(duì)于CNN來說是十分困難的,為了解決這個(gè)問題,即更好地表示實(shí)體的各種空間屬性信息,Hinton在這篇文章中介紹了Capsule Network的概念。
Capsule Network的每一層是由很多Capsule構(gòu)成的,一個(gè)Capsule可以輸出一個(gè)活動(dòng)向量,該向量就代表著一個(gè)實(shí)體的存在,向量的方向代表著實(shí)體的屬性信息,向量的長度代表實(shí)體存在的概率,所以,即使實(shí)體在圖片中的位置或者方向發(fā)生了改變,則僅僅導(dǎo)致該向量的方向發(fā)生變化,而向量的長度沒有發(fā)生改變,也就是實(shí)體存在的概率沒有變化。
與傳統(tǒng)的神經(jīng)元模型不同的是,傳統(tǒng)的神經(jīng)元是通過將每個(gè)標(biāo)量進(jìn)行加權(quán)求和作為輸入,然后通過一個(gè)非線性激活函數(shù)(如sigmoid,tanh等等)映射到另外一個(gè)標(biāo)量,而Capsule Network則是每一層都是由一些Capsule構(gòu)成,其具體的工作原理可以分為以下幾個(gè)階段:
(1) 較低層的Capsule產(chǎn)生的活動(dòng)向量u_i與一個(gè)權(quán)重矩陣W_ij相乘,得到了預(yù)測向量u_ij_hat,這個(gè)向量的含義就是根據(jù)低維特征預(yù)測得到高維特征的位置,舉個(gè)例子,如果要識(shí)別一輛馬車,那么某一層低維的特征是馬和車,那么根據(jù)馬就可以判斷馬車的總體位置,同樣也可以根據(jù)車來判斷馬車的位置,如果這兩個(gè)低維特征的判斷的馬車的位置完全一致的話,就可以認(rèn)為這就是一輛馬車了;
(2) 如果用u表示上一層的所有Capsule的輸出矩陣,用v表示下一層的所有Capsule的輸出矩陣,由(1)知道,上一層的每一個(gè)Capsule的輸出向量u_i經(jīng)過權(quán)重算出了預(yù)測向量u_ij_hat,那么接下來它需要把這個(gè)預(yù)測向量傳遞給下一層的每個(gè)Capsule,但不是完全對(duì)等地發(fā)給下一層的每一個(gè)Capsule,而是先要乘以耦合系數(shù)c_ij,這個(gè)耦合系數(shù)可以認(rèn)為是代表低維特征對(duì)高維特征的預(yù)測程度,至于這個(gè)耦合系數(shù)c是怎么確定的,后文會(huì)詳細(xì)介紹iterative dynamic routing過程;
(3) 將傳送到下一層的第j個(gè)Capsule的所有信號(hào)求和,即s_j=SUM(c_ij×u_ij_hat),這一點(diǎn)和神經(jīng)元模型中的w*x類似,只不過一個(gè)是標(biāo)量運(yùn)算,另一個(gè)是向量運(yùn)算;
(4) 類似于神經(jīng)元模型中的激活函數(shù)sigmoid將輸入映射到0~1的區(qū)間,這里作者采用了非線性的squashing函數(shù)來將較短的向量映射成長度接近于0的向量,將較長的向量映射成長度接近于1的向量,而方向始終保持不變,這個(gè)過程相當(dāng)于是對(duì)預(yù)測向量做了歸一化,最終得到的v_j就是下一層第j個(gè)Capsule的輸出向量。
以上就是相鄰層之間的Capsule的活動(dòng)向量的計(jì)算流程,接下來我們來看一下相鄰層的Capsule之間的耦合向量c_ij是如何確定的。
首先我們需要明白,既然是權(quán)重,那么對(duì)于上一層的Capsule i,它的所有c_ij之和必定等于1,并且c_ij的個(gè)數(shù)是等于下一層中Capsule的個(gè)數(shù)。這個(gè)c_ij是經(jīng)過iterative dynamic routing算法確定的,dynamic routing算法的核心就是要求較淺層的Capsule的活動(dòng)向量與較高層的Capsule的活動(dòng)向量保持極高的相似度。
如上圖算法圖所示,第二行中的b_ij是一個(gè)未經(jīng)歸一化的臨時(shí)累積變量,初始值為0,它的個(gè)數(shù)是由上一層和下一層的Capsule的個(gè)數(shù)決定的;每次迭代中,先將b經(jīng)過softmax歸一化得到總和為1均為正數(shù)的系數(shù)c_ij,第五行和第六行是進(jìn)行前向計(jì)算并經(jīng)過squashing函數(shù)進(jìn)行歸一化得到下一層的Capsule的輸出v_j,第七行是更新c_ij(即更新b_ij)的核心,新的b_ij等于舊的b_ij加上上一層的Capsule與下一層的Capsule的“相似度”。從圖中可以看到,這個(gè)迭代過程似乎沒有收斂條件,關(guān)于迭代次數(shù),文中并沒有給出詳細(xì)的說明,而是指出了迭代次數(shù)越多則發(fā)生過擬合的概率越大,在MNIST手寫字體識(shí)別實(shí)驗(yàn)中,迭代次數(shù)設(shè)置為3得到的性能較好。
上面講了這么多,僅僅說明了c_ij的確定算法,似乎還有一個(gè)問題沒有解決,那就是確定其他參數(shù)的值?回到老方法,文中依然采用了后向傳播算法來更新參數(shù)值,這就涉及到目標(biāo)函數(shù)的確定。以MNIST手寫數(shù)字識(shí)別為例,由于輸出的類別是10,那么可以在最后一層中設(shè)置Capsule的個(gè)數(shù)為10,對(duì)于每個(gè)Capsule的loss可以按照如下公式進(jìn)行計(jì)算,總loss就是把10個(gè)Capsule的loss求和即可。
除了介紹Capsule Network模型之外,文中還設(shè)計(jì)了一個(gè)基于卷積神經(jīng)網(wǎng)絡(luò)的Capsule Network用于MNIST手寫字識(shí)別,如下圖所示是一個(gè)簡單三層結(jié)構(gòu)的Capsule Network,一幅圖片首先經(jīng)過一層CNN(卷積核大小為9×9,包含256個(gè)feature map,stride設(shè)置為1,激活函數(shù)為ReLU)得到局部特征作為初級(jí)Capsule的輸入,初級(jí)Capsule是一個(gè)包含32個(gè)feature map的卷積層,卷積核大小為9×9,stride為2,卷積神經(jīng)元個(gè)數(shù)為8,也就是說這一層中一共有32×6×6個(gè)Capsule,并且每個(gè)Capsule的活動(dòng)向量的維度是8,每個(gè)Capsule都是處在6×6的網(wǎng)格之中,它們彼此共享著它們的權(quán)重,并且卷積中用的激活函數(shù)就是前文說的squashing函數(shù)。最后一層DigitCaps是由10個(gè)Capsule組成的,每個(gè)Capsule的活動(dòng)向量維度是16,在PrimaryCapsules與DigitCaps之間需要執(zhí)行iterative dynamic routing算法來確定耦合系數(shù)c_ij,整個(gè)過程使用的是Adam優(yōu)化算法來對(duì)參數(shù)進(jìn)行更新。
文中僅僅使用了較小的數(shù)據(jù)集MNIST作為模型性能的評(píng)估,期待Capsule Network應(yīng)用到更大規(guī)模機(jī)器學(xué)習(xí)任務(wù)上的表現(xiàn),接下來幾期將繼續(xù)關(guān)注Capsule Network的研究進(jìn)展及其在語音識(shí)別中的TensorFlow實(shí)踐。
-
Network
+關(guān)注
關(guān)注
0文章
64瀏覽量
29645 -
cnn
+關(guān)注
關(guān)注
3文章
353瀏覽量
22265
原文標(biāo)題:漫談Capsule Network基本原理
文章出處:【微信號(hào):DeepLearningDigest,微信公眾號(hào):深度學(xué)習(xí)每日摘要】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論