卷積神經網路取得了很大的成功,也很受歡迎。但是,它也不是適合所有的任務,架構上的一些缺陷,導致它並不能很好的完成一些任務。
CNNs提取影像中的特徵並透過特徵學習識別物體。網路底層學習一般性特徵,比如輪廓,隨著層數的加深,提取的特徵更加複雜,比如像眼睛、鼻子或者整張臉。然後,網路用它學習到的所有特徵作出最後的預測。這裡存在一個缺陷,在CNN中沒有可用的空間資訊,而用於連線的池化層,效率實際上也非常低。
Reddit上有 Geoffrey Hitton關於pooling的看法。
在CNN中應用pooling是一個很大的錯誤,它工作得很好的事實是一場災難。
最大池化
在最大池化過程中,很多重要的資訊都損失了,因為只有最活躍的神經元會被選擇傳遞到下一層,而這也是層之間有價值的空間資訊丟失的原因。為了解決這個問題,Hinton提出使用一個叫做“routing-by-agreement”的過程。這意味著,較為底層的特徵(手、眼睛、嘴巴等)將只被傳送到與之匹配的高層。如果,底層特徵包含的是類似於眼睛或者嘴巴的特徵,它將傳遞到“面部”的高層,如果底層特徵包含的是類似手指、手掌等特徵,它將傳遞到“手”的高層。
這個完整的解決方案將空間資訊編碼為特徵,同時使用動態路由(dynamic routing)。這由Geoffrey Hinton在NIPS2017提出,稱為膠囊網路(Capsule Networks)。
膠囊
當我們透過計算機圖形渲染來構建物件時,我們需要指定並提供一些幾何資訊,比如告訴計算機在何處繪製物件,該物件的比例,角度以及其他空間資訊。而這些資訊全部表示出來,是螢幕上的一個物件。但是,如果我們只是透過觀察照片中的物體來提取資訊呢?這就是膠囊網路(Capsule Network)的核心思想——逆渲染(inverse rendering)。
讓我們一起來理解Capsules以及它是怎麼解決提供空間資訊的問題的。
當看到CNN是背後的邏輯時,我們開始注意到它的架構缺陷。看下圖:
這看起來並不是一張十分正確的人臉圖,雖然圖中包含了人臉的每一個組成部分。人類可以很容易分辨出這不是一張正確的人臉,但是CNNs卻很難判斷這不是一張真實的人臉,因為它僅僅看影像中的這些特徵,而沒有注意這些特徵的姿態資訊。
CNN如何分類這張影像
膠囊網路(capsule networks)解決這個問題的方法是,實現對空間資訊進行編碼同時也計算物體的存在機率。這可以用向量來表示,向量的模表示特徵存在的機率,向量的方向表示特徵的姿態資訊。
Capsule 的工作原理歸納成一句話就是,所有膠囊檢測中的特徵的狀態的重要資訊,都將以向量的形式被膠囊封裝。
這裡可以參照論文中關於膠囊網路的定義,論文地址:https://arxiv.org/pdf/1710.09829.pdf
在計算機圖形應用程式中,比如設計或者渲染,物件通常是透過引數設定來呈現的。而在膠囊網路中,恰恰相反,網路是要學習如何反向渲染影像——透過觀察影像,然後嘗試預測影像的例項引數。
膠囊網路透過重現它檢測到的物件,然後將重現結果與訓練資料中的標記示例進行比較來學習如何預測。透過反覆的學習,它將可以實現較為準確的例項引數預測。
論文 Dynamic Routing Between Capsules 中建議使用兩個損失函式。主要是為了實現capsules之間的等效性。這意味著,在影像中移動特徵會改變Capsule向量,但是不影響特徵存在的機率。底層Capsules提取特徵之後,就傳遞到匹配的更高層的Capsules。
膠囊網路分類人臉
膠囊內的操作
在傳統神經網路裡,一個神經元一般會進行如下的標量操作:
輸入標量的標量加權;
對加權後的標量求和;
對和進行非線性變換生成新標量。
而在膠囊網路裡面,這些操作有有一些的改變:
1、輸入向量與權重矩陣的矩陣乘法。這編碼了影像中低階特徵和高階特徵之間非常重要的空間關係。
2、加權輸入向量。這些權重決定當前膠囊將其輸出傳送到哪個更高階的膠囊。這是透過動態路由(dynamic routing)的過程完成的。
3、對加權後的向量求和。 (這一點沒什麼差別)
4、非線性化使用squash函式。該函式將向量進行壓縮使得它的最大長度為1,最小長度為0,同時保持其方向不變。
膠囊之間的動態路由
在路由(routing)過程中,下層膠囊將輸入向量傳送到上層膠囊。對於可以路由到的每個更高層的膠囊,下層膠囊透過將自己的輸出乘上權重矩陣來計算預測向量。如果預測向量與上層膠囊的輸出具有較大的標量積,則存在自頂向下的反饋,具有增加上層膠囊耦合係數,減小其他膠囊耦合係數的效果。
MNIST膠囊網路的架構
CapNet 架構
編碼器
編碼器用於獲取影像輸入,並學習如何將影像表示為16維向量,包含渲染影像所需要的所有資訊。
1、Conv Layer——提取用於後續膠囊分析的特徵。論文中包含大小為9*9*1的256個卷積核。
2、PrimaryCaps——這是下級膠囊層,包含32個不同的膠囊,每個膠囊將第8個9*9*256的卷積核用於之前卷積層的輸出,並輸出4D向量。
3、DigitCaps——上級膠囊層,使用動態路由的主要膠囊層,該層輸出16D向量,包含重建物件所需要的例項化引數。
解碼器
解碼器架構
為什麼要使用膠囊網路
雖然,CapsNet在簡單的資料集MNIST上表現出了很好的效能,但是在更復雜的資料集如ImageNet、CIFAR-10上,卻沒有這種表現。這是因為在影像中發現的資訊過多會使膠囊脫落。
膠囊網路仍然處於研究和開發階段,並且不夠可靠,現在還沒有很成熟的任務。但是,這個概念是合理的,這個領域將會取得更多的進展,使膠囊網路標準化,以更好的完成任務。
原文連結:
https://towardsdatascience.com/capsule-networks-the-new-deep-learning-network-bd917e6818e8