[Paper Weekly]Dynamic Routing Between Capsules

深度學(xué)習(xí)領(lǐng)域的god father,Hilton大神終于發(fā)表了他關(guān)于capsule研究的最新成果《Dynamic Routing Between Capsules》。之前就曾經(jīng)聽過許多關(guān)于capsule的相關(guān)消息,我已經(jīng)是被吊足了胃口,這幾天今天終于有機(jī)會(huì)可以一睹capsule到底是何方神圣。

其實(shí),在讀這篇論文的過程中,可能是缺少一些前置知識(shí),雖然能把握論文在講什么,但我一直覺得自己沒透徹,所以比一般論文花了更久的時(shí)間(頭懸梁錐刺股),直到現(xiàn)在我依然覺得自己的理解有問題,所以這是一篇帶著很多問題的論文筆記。

什么是capsule

capsule到底是是什么呢?我們知道在一般的深度網(wǎng)絡(luò)中的某一個(gè)layer的輸入和輸出,都是通過某種數(shù)值(標(biāo)量)來表示。譬如在人臉這個(gè)概念,對(duì)于深度網(wǎng)絡(luò)來說,可能人臉對(duì)應(yīng)某個(gè)featuremap上的一個(gè)數(shù)值a表示其存在性,但是人臉還有一些別的屬性(方臉還是圓臉),但由于獨(dú)立性,這些特征往往沒有辦法通過一個(gè)數(shù)值表示。
那么我們可不可以加入一個(gè)值(假想的filter)來專門表示方圓臉,我們把這個(gè)值叫做b,然后我們又加入了一些值來表示眼睛的大小、皮膚的好壞等等,于是我們得到了一組有序數(shù)值(a,b,c,d,...)來表示人臉這個(gè)實(shí)體,這組有序數(shù)值其實(shí)就是一個(gè)向量(vector),所以我們干脆就用一個(gè)向量來表示人臉好了,而這些vector就是capsule的輸入和輸出。在capsule中特征不再是一個(gè)個(gè)數(shù)值,而是一個(gè)個(gè)向量。
這篇論文中,使用vector的長(zhǎng)度來表示實(shí)體的存在,vector的方向表示實(shí)體的特性。

怎么處理capsule

我們現(xiàn)在已經(jīng)得到了capsule的概念了,我們使用向量來替代了標(biāo)量。但是向量在處理上不能使用標(biāo)量的方法,譬如,一般的激活函數(shù)沒有辦法處理向量,由輸入向量到輸出向量也不能使用簡(jiǎn)單的加權(quán)。本篇文章提出了使用動(dòng)態(tài)路由(dynamic routing)的方式處理向量。
首先,針對(duì)激活函數(shù),本文提出了一種非線性squashing函數(shù):



其中,vj為輸出,sj為輸入,j為capsule的編號(hào)。
這個(gè)公式很類似于傳統(tǒng)的具有擠壓性質(zhì)的激活函數(shù):

  • 其輸出的向量的長(zhǎng)度被限制在了[0,1)。
  • 對(duì)于輸出向量長(zhǎng)度擠壓,即長(zhǎng)度較小時(shí)遞增較快,長(zhǎng)度較長(zhǎng)時(shí)遞增較慢。

在有了激活函數(shù)之后,我們需要解決vector to vector的方法問題,本文使用了變換矩陣加上加權(quán)路由的方式。
首先,使用變換矩陣將前層capsule的向量映射到后層capsule的空間上:


其中j為對(duì)應(yīng)后層capsule的編號(hào),i為前層capsule的編號(hào)。
在得到映射后,通過路徑耦合系數(shù)的加權(quán)來得到輸入到后層的向量:

其中,耦合系數(shù)cij就是bij的softmax:

bij通過貢獻(xiàn)度(點(diǎn)積)更新,即路徑對(duì)最終結(jié)果所起作用:

(這么看上去,這不就是個(gè)attention機(jī)制么囧)

routing的具體流程如下:

關(guān)于損失函數(shù),由于存在多標(biāo)簽,即存在多種實(shí)體,所以文中采用的是separate margin loss:

以上就是capsule層實(shí)現(xiàn)的細(xì)節(jié)。

CapsNet的結(jié)構(gòu)

本文介紹了一個(gè)使用capsule的網(wǎng)絡(luò):CapsNet。


在第一個(gè)capsule之前,存在整兩個(gè)卷積層來抽取特征。對(duì)為什么使用傳統(tǒng)卷積大概的解釋就是,正如前面所說的capsule中的vector是要包含“實(shí)體”的屬性信息,而如果直接使用像素點(diǎn)作為輸入,包含的屬性信息過少。況且,卷積也可以說是一種特例的capsule,即一維向量,我們可以認(rèn)為淺層實(shí)體的屬性太少,只需要一維就可以表達(dá)。
第二個(gè)卷積的輸出為32組8維vector的capsule,可以認(rèn)為是傳統(tǒng)卷積具有832個(gè)filter,然后將這些filter分為8組。這個(gè)capsule層被稱為PrimaryCaps,其中包含了36乘32個(gè)8維的vector,對(duì)于每一個(gè)66的平面上的vector,它們是共享權(quán)值的。
在PrimaryCaps之后,就是表示數(shù)字實(shí)體的capsule層,每一個(gè)capsule為一個(gè)16維的vector,其長(zhǎng)度表示了該數(shù)字實(shí)體是否存在。
由于長(zhǎng)度沒有歸一化,所以對(duì)多個(gè)實(shí)體的判斷是可以共存的。

以上就是這篇論文是怎樣去應(yīng)用capsule這個(gè)想法的,目前筆記的施工還有一些沒完成,但是基本的原理已經(jīng)講完了。總的來說,這篇論文的基本主旨是實(shí)現(xiàn)capsule的嘗試,還是存在很多問題,看的時(shí)候我也是一臉懵逼,譬如說為什么要用CNN,為什么要用類似全連接的方式,屬性為什么是完全分離的,為什么低級(jí)實(shí)體的屬性可以在不考慮其它低級(jí)實(shí)體的情況下直接向高級(jí)實(shí)體的屬性映射...雖然存在著種種問題,但是這篇文章還是做出了初步的成果(重疊數(shù)字等),說明capsule是可用的,為我們挖了一個(gè)新的大坑。期待后續(xù)更深入的研究。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容