1. 程式人生 > >CapsNet個人理解與總結

CapsNet個人理解與總結

前言

  CapsNet為解決CNN的缺點而生。其實回過頭來再想一下神經網路和CNN這一系列的模型,他們放佛一直在強調特徵的識別,通過什麼樣的方法能夠更準確高效的識別影象的特徵,就像CapsNet一直在強調他們的Net具有方向、大小等屬性的識別和內部聯絡的生成一樣。從這裡我感覺出一些頂級Paper的魅力和特點所在,那就是從提出的創新點出發,所有的論點圍繞創新點,所有的依據站在巨人的肩膀,解決前人沒有解決的問題。那麼這樣對於讀者來說,理解起來就不會很困難。創新點貫穿整篇文章,非常條理清晰,非常有說服力,確實值得我們去研讀,去學習。

出發點

  CNN是非常善於捕捉特徵是否存在,因為CNN的卷積結構就是為此而設計,但是在探索特徵屬性之間的關係(比如相對位置關係、相對大小關係等,特徵的方向)上,CNN力不從心

。比如在下面第一幅圖中,CNN對於兩幅圖的識別效果都是人臉,顯然這是不正確的。從人類的視覺是別來說,人臉的各個部位都是有相對大小和位置關係的,人的多層視覺系統對於某一固定點的識別過程類似於解析樹,從這一點出發,論文應用了前人提出的Capsule。







  例如,對於下面這幅圖的識別過程:



  一個簡單的CNN模型可以正確地提取鼻子,眼睛和嘴巴的特徵,但是提取出來的特徵會錯誤地啟用神經元,得出臉部檢測成功的結果。



  如果我們將每個特徵的概率標量表示替換成一個代表很多資訊的向量,如,輸出的不再是標量x,而是一個包含[可能性,方向,大小]的向量,那麼我們就可以檢測鼻子,眼睛和耳朵特徵之間的方向和大小的一致性
, 得出最後的結論。


Capsule理解

  Capsule是一組捕獲特定特徵各種引數的神經元,包括輸出特徵的可能性,文章通過應用一個非線性保證向量輸出的長度不超過1,這個非線性保持向量的方向不變。我們將膠囊的輸出向量稱為活動向量,向量的長度表示檢測特徵的概率,向量的方向方向代表其引數(屬性)。
  比如,下面的第一行表示神經元檢測數字“7”的概率。2-D Capsule通過組合2個神經元形成,該Capsule在檢測數字“7”時會輸出一個2維向量。




  第二行中,輸出的2維向量為v=(0, 0.9)和 v=(0, 0.3),大小表示為:√(0^2+0.9^2 )=0.9 和 :√(0^2+0.3^2 )=0.3;第三行中,輸出的2維向量為v=(0.2, 0.87)和 v=(0.2, 0.19),向量的大小仍為0.9和0.3。在這裡,我們隨意給的0.2代表其向右旋轉20度。當然,我們可以再新增兩個神經元來捕捉特徵的大小和筆畫的粗細程度。


Capsule與傳統neuron比較



引數更新

  Capsule裡面有兩種引數,更新演算法如下:

  • W_ij: 通過BP演算法更新。
  • c_ij :通過routing-by-agreement更新,capsule論文中的方法是該原則的其中一種實現方法。

新穎的啟用函式

  使用一個非線性”squashing” 函式來將短向量縮小到幾乎為零,而長向量縮小到略低於1的長度。

CapsNet網路結構

  CapsNet是常規卷積層與capsule版全連線層的結合體,整體架構如下:




  第一層就是普通的CNN層,起畫素級區域性特徵檢測作用。原影象是28×28大小第一層採用256個9×9的卷積核,步長為1,得到輸出矩陣大小為20×20×256。
  第二層叫做PrimaryCaps層。PrimaryCaps層的計算過程具有多種理解方式,其中之一為,8個並行的常規卷積層的疊堆。



  矩陣的shape變換過程如圖所示:



  第二層中每一步的詳解如圖所示:



  接下來,將第二層的輸出轉換成16×10維的向量組,得到第三層。在經過兩個全連線和一個Sigmoid層,得到輸出。