【膠囊網絡-CapsNet】膠囊網絡-CapsNet原理

動機

CNN缺陷:

  • 無法從新的視角去理解對象。
    • 例如下圖中,當圖片角度發生變化,就會無法識別。CNN通過數據增強,即會將圖片進行翻轉,旋轉等操作。會造成數據量變得非常大,降低訓練速度。
  • 難以識別精確空間關係。
    • 比方說右圖中儘管嘴巴的相對位置發生了改變,CNN仍會將其識別成人臉。

在這裏插入圖片描述

  • 最大池化。減少通過網絡的數據的空間大小,從而增加了上層網絡神經元的“視野”。
    • 丟失了大量信息,因爲只有值最大的神經元會被傳遞到下一層,導致層與層之間信息丟失。

結論:

  1. 正確地分類和辨識對象,要對 對象部件間的分層位姿關係建模。
  2. 取代最大池化的新方法。既能保證數據空間減小,又儘量保證重要信息傳遞。

爲什麼膠囊網絡就能學習到位姿信息?

在這裏插入圖片描述

將同一三維物體從兩個不同視角的渲染出圖像,作爲膠囊網絡的輸入和輸出,目標是圖像重構。作者想要證明膠囊網絡在處理位置、方向、尺度等方面的優勢。

什麼是膠囊網絡

將神經元替換爲膠囊就是膠囊網絡。

高層膠囊和低層膠囊之間權重通過dynamic routing獲得。

膠囊是一組神經元,它會學習檢測給定區域圖像的特定目標,它輸出一個向量,向量的長度代表目標存在的概率估計,用向量的方向表示實體的屬性。如果對象有輕微的變化(例如移位、旋轉、改變大小等),那麼膠囊將輸出相同長度但方向略有不同的向量,因此,膠囊是等變化的(Equivariance)。

在這裏插入圖片描述

CNN訓練神經元來檢測不同的pattern,即使是同一pattern的不同角度。使得卷積核個數和層數越來越多。

而膠囊網絡希望通過一個膠囊能夠識別同一類pattern。通過膠囊輸出向量的長度代表目標存在的概率估計,向量的方向表示實體的屬性

動態路由:通過實現分割高度重疊對象,作者證明動態路由機制是一個有效的方式。

膠囊計算方式

作者用膠囊輸出向量的模長來表示一個膠囊所表徵的實體在輸入中出現的概率。因此作者採用一個非線性函數對向量進行“壓縮”,短向量被壓縮到幾乎爲零,長向量也被壓縮到1以下長度。判別學習中充分利用這個非線性函數。
(1)Vj=sj21+s2sjsj V_j = \frac{||s_j||^2}{1+||s||^2} \frac{s_j}{||s_j||} \tag{1}
其中vj是膠囊j的輸出向量,sj是它的全部輸入。

除了第一層膠囊,膠囊sj的全部輸入是對預測向量uj|i的加權求和。這些預測向量都是由低一層的膠囊產生,通過膠囊的輸出ui 和一個權重矩陣Wij相乘得來,通過矩陣乘法對視角的影響進行建模。
sj=iciju^jiu^ji=Wijui s_j = \sum_i c_{ij} \hat{u}_{j|i} \\ \hat{u}_{j|i} = W_{ij} u_i
其中cijc_{ij}是由迭代的動態路徑過程決定的耦合係數,即權重。

膠囊i和其上一層中所有膠囊的耦合係數的和爲1,並由“routing softmax”決定。這個“routing softmax”的初始邏輯值bij 是膠囊i耦合於膠囊j的對數先驗概率。
cij=exp(bij)kexp(bik) c_{ij} = \frac{exp(b_{ij})}{\sum_k exp(b_{ik})}
這個對數先驗可以和其他權重一起被判別學習。他們由兩個膠囊的位置和類型決定,而不是當前的輸入圖像決定。耦合係數會從初始值開始迭代,通過測量每個高一層膠囊j的當前輸出vi和低一層膠囊i的預測值ui|j之間的一致性。

所述一致性是簡單的點積aij=vju^jia_{ij} = v_j ·\hat u_{j|i}。這個一致性可被看做最大似然值,並在計算出所有將膠囊i連接到更高層膠囊得到的新耦合值前,加到初始邏輯值bij=bij+vju^jib_{ij} = b_{ij} + v_j ·\hat u_{j|i}上。

在這裏插入圖片描述
在這裏插入圖片描述

Dynamic Routing

路由計算的僞碼如下圖,其中T是超參數。在這裏插入圖片描述
在這裏插入圖片描述

損失函數

margin loss

作者用膠囊向量的模長來表徵的pattern的概率。對每一個表徵數字k的膠囊分別給出單獨的邊緣損失函數(margin loss):
Lc=Tcmax(0,m+v)2+λ(1Tc)max(0,vcm)2 L_c = T_c max(0, m^+ - ||v||)^2 + \lambda (1-T_c) max(0, ||v_c|| - m ^-)^2
其中Lc表示類別c的損失,Tc=1當且僅當圖片中有屬於類別C的數字,m+=0.9,m-=0.1。是爲了減小某類的數字沒有出現時的損失,防止剛開始學習就把所有數字膠囊的激活向量模長都壓縮了。作者推薦選用 λ = 0.5。總損失就是簡單地把每個數字膠囊的損失加起來的總和。

reconstruction loss,

通過將capsnet在digitcaps輸出的10個capsule中,不是target的capsule的向量值都設爲0,然後將這160維的值作爲一個MLP的輸入,最後得到一個784維向量,與原始輸入圖片的784維向量求歐氏距離,作爲reconstruction loss。

CapsNet 結構

在這裏插入圖片描述

圖1:一個簡單的3層CapsNet。這個模型的結果能和深層卷積網絡(比如. Batch-normalized maxout network in network,2015)的結果媲美。DigitCaps層每個膠囊的激活向量模長給出了每個類的實例是否存在,並且用來計算分類損失。 是PrimaryCapsules中連接每個 ui, i ∈ (1, 32 × 6 × 6) 和每個vj , j ∈ (1, 10)的權重矩陣。

圖2:從DigitCaps層來重構數字的解碼結構。

用掩蔽的方法只把正確的數字膠囊的激活向量保留下來。然後用這個激活向量來做重構。

訓練過程中極小化圖像和Sigmoid層的輸出之間的歐氏距離。訓練中作者們用真實的標籤作爲重構的目標。

實驗

MINIST數據集。

在這裏插入圖片描述

從結果可知使用CapsNet和重構任務效果取得最好。
同時,在affnsit數據集上做測試。即測試集和訓練集分佈存在差異,在此測試集上,CapsNet效果下降到79%,而CNN下降到66%。

從結果上也說明,CapsNet更加魯棒。

膠囊可視化

在這裏插入圖片描述

如何分析viv^i每一個維度代表一類特徵,論文將viv^i通過重構網絡,並每一次將v的一個維度依次增加0.05,查看其變化,通過圖像觀察其代表什麼樣的特徵。

貌似也可以用來生成圖像。

重構能力

在這裏插入圖片描述

訓練集和測試集都是重疊的數字,將重疊的數字分別重構。

例如第一幅圖,是2和7的重疊圖案,而L表示標籤是2和7,R表示重構輸入2和7對應的膠囊的向量,重構出的圖在下面。

discuss

  • Invariance VS Equivariance
    在這裏插入圖片描述

reference

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章