關於膠囊之間的動態路由的理解(基於Hinton的膠囊網路)
本文介紹了由Sara Sabour,Nicholas Frosst和Geoffrey Hinton所著的論文“膠囊之間的動態路由”。在這篇文章中,我們將描述膠囊的基本概念,並應用膠囊網路(capsnet)檢測MNIST資料集中的數字。在本文最後的第三部分中,我們對其做一個具體的實現。程式碼實現來源於xifengguo,基於Tensorflow的Keras。
CNN所面臨的挑戰
在深度學習中,一個神經元的啟用水平通常被解釋為檢測到特定特徵的可能性。
如果我們將畢加索的肖像畫“Portrait of woman in d`hermine pass”輸入到一個CNN分類器,那麼此分類器有多大機率將其識別 為一個真正的人臉?
CNN擅長檢測特徵,但對於特徵(透視、大小、方向)之間的空間關係檢測效果較差。例如,下面的圖片可能會欺騙一個簡單的 CNN模型,使其認為這是一個很好的素描的人的臉。
一個簡單的CNN模型可以正確地提取鼻子、眼睛和嘴巴的特徵,但在進行面部檢測時會錯誤地啟用神經元。由於沒有實現空間方向和大小的匹配,人臉檢測的啟用值會變得過高。
現在,我們假設每個神經元包含特徵的可能性和屬性。例如,它輸出一個包含(可能性,方向,大小)的向量。利用這種空間資訊,我們可以檢測出鼻子、眼睛和耳朵等特徵在方向和大小上的一致性,從而輸出一個低得多的面部檢測啟用值。
論文中並沒有使用術語Neurons,而是使用了Capsules來表明膠囊輸出一個向量,而不是一個單一的標量值。
同變性
從概念上講,CNN模型使用多個神經元和層來捕獲不同的特徵變數:
一個膠囊網路共享相同的膠囊來檢測一個簡單網路中的多個變體。
同變性是可以相互變換的物件的檢測。直觀地說,一個膠囊檢測到臉右旋轉20°(或左旋轉20°),並不是通過匹配一個右旋轉20°的變體來識別到臉部。通過迫使模型在膠囊中學習特徵變數,我們可以用較少的訓練資料更有效地推斷可能的變體。
MNIST資料集包含55000個訓練資料,即每位數5500個樣本。然而,小孩子們不太可能閱讀大量的樣本來學習數字識別。我們現有的深度學習模型包括CNN在利用資料時顯得效率低下。
With feature property as part of the information extracted by capsules, we may generalize the model better without an over extensive amount of labeled data.
膠囊(Capsule)
A capsule is a group of neurons that not only capture the likelihood but also the parameters of the specific feature.
例如,下面的第一行表示由神經元檢測到數字“7”的概率。一個二維膠囊由2個神經元組成。這個膠囊輸出一個二維向量來檢測數字“7”。對於第一張影象的第二排,它輸出向量。向量的大小對應檢測到“7”的概率。每一行的第二個影象看起來更像是“1”而不是“7”。因此,其相應的可能性為“7”的概率更小(更小的標量值或向量大小但方向相同)。
在第三行中,我們將影象旋轉20°。該膠囊將產生相同大小但不同方向的向量。這裡,向量的角度代表“7”的旋轉角度。我們可以想象,完全可以在一個膠囊中再增加2個神經元來捕捉大小和寬度。
We call the output vector of a capsule as the activity vector with magnitude represents the probability of detecting a feature and its orientation represents its parameters (properties).
動態路由
動態路由將膠囊分組形成父膠囊,並計算膠囊的輸出。
直覺
我們收集了3個不同大小和方向的相似草圖,並以畫素為單位測量了嘴巴和眼睛的水平寬度。其中
假設,對於我們得到一個來自嘴巴和眼睛的投票:
我們看到和非常相似。當我們用其他的草圖重複此操作時,得到了同樣的發現。因此,嘴巴膠囊和眼睛膠囊可能與父膠囊緊密相關,寬度約為200畫素。從經驗來看,人臉是嘴巴的2倍寬(),一隻眼睛的3倍寬()。所以我們檢測到的父膠囊是一個人臉膠囊。當然,我們可以通過新增更多的屬性,如高度或顏色,使其更準確。在動態路由中,我們用一個變換矩陣去轉換輸入膠囊的向量,構成一個投票,並用相似的投票分組。這些選票最終成為父膠囊的輸出向量。那麼我們怎麼得到呢?只需在深度學習方法中進行:通過成本函式反向傳播。
計算膠囊輸出
對於一個膠囊來說,輸入和輸出都是向量。
我們將變換矩陣與前一層膠囊的輸出相乘。例如,對於一個矩陣,將 轉換為,維度從k變為p,。然後根據權重計算加權和。
為耦合係數,通過迭代的動態路由(將在下面討論)過程計算得到,並且規定和為1,從概念上講, 衡量膠囊有多大可能啟用膠囊。
對於的啟用函式,我們採用squashing而不是ReLU,所以膠囊的最終輸出向量的長度在0到1之間。該函式將小向量壓縮為零,大向量壓縮為單位向量。
迭代的動態路由
在膠囊中,我們通過迭代的動態路由計算中間值