膠囊網路結構Capsule初探

作為神經網路的大牛Geoffrey Hinton在17年十月提出了一種新的網路結構,他稱之為Capsule,這個詞的中文意思是膠囊。在本周,Capsule的代碼在github上開源,瞬間成為爆款。 Capsule式的網路結構,和卷積神經網路一樣,最初是用來處理視覺問題的,但是也可以應用到其他領域。這篇小文不涉及Capsule神經網路的數學細節,而是關注Capsule網路是如何克服CNN存在的問題的。閱讀之前,對於卷積神經網路不熟悉的可以先看看你所不能不知道的CNN。

谷歌公司的Geoffrey Hinton大神

用Hinton大神的話來說,計算機圖形學做的是渲染,而計算視覺想做的就是渲染的逆過程。渲染是將三維的圖像投影到二維,在數學上意味著給原圖乘以一個固定的矩陣。而計算機視覺做的,則是Inverse Graphics,也就是從二維的圖像推測出本身的三維結構。為了比較膠囊網路和CNN之間的區別,讓我們先看看CNN想做什麼,有什麼不足。

1) CNN那裡做的不夠好

有一些事情,對小孩子來說很容易,但若是卷積神經網路,則很難,例如認清楚下面兩章圖上的貓是同一隻。然而若是神經網路無法做到這一點,機器視覺的模型,不管處理怎樣的任務,都註定會不夠穩鍵(robust)。解決圖像遷移後的一致識別,是Capsule神經網路出現的第一個目的。

不止是左右的平移,CNN對於旋轉,加上邊框也會難以覺察出其一致性,CNN會認為下圖的三個R是兩個不同的字母,而這是由網路結構所帶來的,這也造成了CNN所需的訓練集要很大,而數據增強技術雖然有用,但提升有限。

一張臉上不應該只是由兩隻眼睛一張嘴巴一對鼻子構成的,組成整體的部分之間的相互關係對於識別圖形,也很重要。下面的這張圖會被CNN看成是一張臉,這是因為CNN識別臉的時候,是識別臉的幾個組成部分,下圖中的確有兩個眼睛,有鼻子,有嘴,雖然其位置不對,這對於CNN來說就夠了,CNN是不會注意子結構之間關係的。

同樣的道理,CNN的網路難以區分左圖和右圖,他們是由相同的形狀(橢圓形)組成的,其信息都儲存在子結構之間的關係中。卷積核之間的獨立即使的訓練簡單,又丟失了全局的關聯信息。

人類在識別圖像的時候,是遵照樹形的方式,由上而下展開式的,而CNN則是通過一層層的過濾,將信息一步步由下而上的進行抽象。這是Hinton認為的人與CNN神經網路的最大區別。

總結下這一小節,卷積神經網路的問題是其神經員之間都是平等的,沒有內部的組織結構,這導致無法保證在不同位置,不同角度下對同一個物品做出相同的識別,也無法提取不同卷積核得出的子結構之間的相互關係。CNN中採用的分塊和共享權重,其目標都是希望能夠使神經網路學到的特徵提取之術能夠在圖形出現微小變化時能夠應對,而不是針對圖形的變化,對應神經網路進行相應的改變,而這正是capsule神經網路所要做的。

2)脆弱與反脆弱

用英文來說,為了提升模型的可擴展性,CNN追求的是Invariance,而膠囊網路追求的是Equivariance。熟悉塔勒布的童鞋會想起他的命運,脆弱的反義詞不是穩健,而是反脆弱。這正是膠囊神經網路強大的地方,追求的是在不同視角下對同一個物品的相同感知(標籤),而通過對各個視角下都有標記的數據死記硬背做到對相似物品圖像的識別。

回到上文提到的字母R的例子,下圖的兩個字母左邊的那個不是R,但人類大腦在做出這一判斷的時候,不需要一個老師指出這一事實,人會在自己的大腦中對左邊的圖像進行翻轉,使得半圓處於圖形的上方,之後再識別出圖形,如果能夠讓神經網路也能做類似的事,那就不需要太多的標註數據了。

正是由於膠囊網路可以對圖形進行翻轉,這使得其不需要那麼多的標註數據,下圖對比了CNN和膠囊神經網路在識別人臉上的區別。CNN中需要有一層去應對不同翻轉角度的臉,而膠囊網路則可以用一個膠囊去完成這個任務

具體看看膠囊神經網路想做什麼,假設我們訓練一個識別數字2的網路,我們首先做的是在每一層訓練一些膠囊(即一組相對獨立的神經元),每一個膠囊只負責圖形中的一個子結構,例如圖中的三個膠囊,分別識別橫線,豎線和銳角,每個膠囊給出圖形中每個位置出現自己負責識別的特徵的概率(intensity),之後再通過一個編碼器,綜合每一個膠囊給出的在各個位置的強度信息,最終得到經過重構後的圖像。

例如我們關注的是識別數字7,那麼下圖中的第一行是傳統的神經元,會給出對應圖形是不是7的概率,但這個神經網路卻無法識別第三行的數字。一個包含兩個神經元的膠囊可以一個識別圖形的翻轉情況,一個識別具體的形狀。不管圖形是第二行那樣豎直站立的,還是像第三行那樣歪倒的,膠囊網路都可以正確的識別。

由於每個膠囊給出的是輸出是一組向量,不是如同傳統的人工神經元是一個單獨的數值(權重),為了解決這組向量向那一個更高層的神經元傳輸的問題,就需要Dynamic Routing的機制,而這是膠囊神經網路的一大創新點,也是理解中的難點。Dynamic routing使得膠囊神經網路可以識別圖形中的多個圖形,這一點也是CNN所不能的。由於講解Dynamic routing需要很多數學細節,這裡就不再細說。可以理解成一種實時的投票,決定不同膠囊網路之間提取的特徵哪一個更顯著,更有益於上一層網路的重構。

3)冗餘對抗複雜

下面的圖展示了膠囊神經網路在MINST數據集下的表現,這裡可以看出膠囊神經網路的另一個好處,即可解釋性強,你可以看出每個膠囊想做什麼。不過即使你知道了每個膠囊識別的是那些子結構,你也很難想像出是怎樣通過這些結構的組合識別出數字的。我猜那是你理解的數字識別的規則,根本不需要這麼多的子結構,但這只不過是你對當前情況的解釋,真實的大腦,如同膠囊神經網路,所做的都是利用冗餘來對抗複雜,讓模型模仿人類大腦用冗餘帶動生產的能力, 來對抗複雜的問題。引申來說,說深度學習缺少解釋性,部分的原因是我們對解釋性的理解太淺了,人們天生不習慣複雜的解釋,但要應對複雜,就必須有冗餘。

此圖來自Hinton關於Capsule的論文,圖中的第一列是網路的輸入數據,第二列是網路根據原圖重構的圖形,網路的目標是讓這兩幅圖的差距儘可能小,第三列給出了這兩幅圖之間的差別,之後的列是網路中每一個膠囊所識別的子結構,可以看到,這些子結構之間很多是相似的,也就是網路有冗餘。

冗餘帶來的好處,從下圖可以看出,這裡展示了如果對於每一個膠囊給出的intensity值加上或減去兩個標準差後,網路重構出來的圖像會是怎樣,可以看出,圖形基本還是能識別成原始的2的,這說明網路具有魯棒性,不會像CNN一樣,僅僅因為一兩個像素點的改變,就將圖形識別錯誤。

類似CNN的深層網路,膠囊網路也可以有層次結構,如下圖所示,紅色的是底層的膠囊結構,綠色的是高層的膠囊結構,綠色的膠囊無法知道圖形中具體的形狀是什麼在哪裡,這使得綠色的膠囊結構通過訓練所學到的只是圖形中子結構之間的相互關係,這就實現了CNN所不能的,也就是將圖像在其頭腦中進行翻轉伸張平移等視角變換,但同時保持其特徵的一致性。

下面展示了膠囊神經網路在3D圖像中的表現,這裡的目標是看看膠囊神經網路能否正確的的從下圖中左邊的一列,將圖形做選擇,得出右圖的圖形。我們看到,膠囊網路翻轉生成的圖像效果不錯。這說明神經網路學到了每個圖形中子結構之間應該怎樣連接。而在第二幅圖中,展示了說學到的連接也可以應用在沒有出現在訓練集的測試數據上,哪怕訓練數據是汽車,測試數據是飛機,這展示了膠囊網路優良的可擴展性。

任何結構的神經網路需要提高其模型的可擴展性,都需要做正則化。CNN的標準做法是隨機的扔掉一些神經元,即dropout,而膠囊神經網路則是通過重構的方式,在識別某一個圖形的標籤時,將網路中與這個圖形無關的部分都關閉,而使剩下的網路試圖儘可能準確的重構這個圖形,從而提高模型的泛化能力,這裡借鑒了自編碼器的思路,結合膠囊網路子結構之間的獨立性,這使得模型的泛化能力很強。而這也可以看成是通過冗餘來應對複雜,明明識別6和9的網路可以很類似,但因為有了分工,弄混的概率也少了。

4)小結

膠囊網路可以算是一種革命性的網路架構,神經元的輸出從一個標量變成了一組向量,這如同讓網路流動起來了。每一個識別子結構的膠囊,使原始圖形中隱藏的信息在bits數變小的情況下實現了高度的保真,而這個保真,又是從複雜結構里直接進化得到的。通過重構原圖,模型做到了在視角變換後,通過網路結構的改變,給出相同的認知(重構),這使的膠囊網路具有了反脆弱的性質。另外需要指出的是,CNN和膠囊神經網路並不是互斥的,網路的底層也可以是卷積式的,畢竟膠囊網路善於的是在已抽象信息中用更少的比特做到高保真的重述。

這裡給出了用來識別MInst數字集的CapsNet網路結構圖,底層是卷積層,而用來最終做預測的也是熟悉的Sigmoid全連接層,改變是只是中間那些層,由卷積網路變成了膠囊網路。

更多閱讀

白話遷移學習

對抗神經網路初探

參考資料

cs.toronto.edu/~fritz/a

cseweb.ucsd.edu/~gary/c

arxiv-vanity.com/papers

jhui.github.io/2017/11/


推薦閱讀:

TAG:深度學習DeepLearning | 神經網路 |