「Dynamic Routing Between Capsules」是由Hinton等聯合發表在NIPS會議上。提出了一個新的神經網絡---膠囊網絡與囊間的動態路由算法。
上篇文章中提到了動態路由算法,由於沒太理解,因此找了原論文並且結合參考文獻的4篇博文進行解讀,才對膠囊網絡與動態路由算法的過程有了一點認識。本篇文章的所有圖片來源都是來自4篇博文,並且參考了其中部分知識。對膠囊網絡有興趣的同學可以閱讀下,非常有幫助。
本篇文章約3.2k字,預計閱讀12分鐘。
本篇論文是由Sara Sabour、Nicholas Frosst與Geoffrey E. Hinton聯合發表。對於膠囊網絡(Capsules Net)的提出者之一Geoffrey E. Hinton(「傑弗裡·埃弗裡斯特·辛頓」),我們應該了解下:
❝他是「反向傳播算法」、「對比散度算法」和「波爾茲曼機」的發明人之一,也是深度學習的積極推動者,被譽為「「深度學習之父」」。因在深度學習方面的貢獻與約書亞·本希奧和楊立昆一同被授予了2018年的圖靈獎。 維基百科
❞2. 背景2.1 CNN的特性與缺陷卷積神經網絡(CNN)在圖像分類上取得了非常顯著的效果。它有幾個非常重要的特性:
「平移不變性(translation invariance )」:簡單來說不管圖片的內容如何進行平移,CNN還能輸出與之前一樣的結果。為什麼具有平移不變性?這個性質由全局共享權值和Pooling共同得到的;「平移等變性(translation equivariance)」:對於一個函數,如果你對其輸入施加的變換也會同樣反應在輸出上,那麼這個函數就對該變換具有等變性。這由局部連接和權值共享決定;例:
❝如果輸出是給出圖片中貓的位置,那麼將圖片中的貓從左邊移到右邊,這種平移也會反應在輸出上,我們輸出的位置也是從左邊到右邊,那麼我們則可以說CNN有等變性;如果我們只是輸出圖片中是否有貓,那麼我們無論把貓怎麼移動,我們的輸出都保持」有貓」的判定,因此體現了CNN的不變性。---引自http://www.lunarnai.cn/2018/03/23/CNN_euivariant_invariant/
❞「不具備特性」:
「旋轉不變性」:做過簡單的圖像分類就應該知道,當我們為了增強模型性能,總是會做圖像增強的工作,其中就包括旋轉,這就是為了克服CNN不具備旋轉不變性的缺陷;根據以上信息我們可以得出「結論」:CNN擅長檢測特徵,但在探索特徵之間的「空間關係」(大小,方向)「方面效果不佳」。例如,對於以下扭曲的人臉圖,CNN可能會認為這是一張正常的人臉。
2.2 最大池化(Max Pooling)的缺陷作者認為Max Pooling在每一層僅保留最活躍的特徵,而忽略了其他的特徵,即損失了有價值的東西。
❝This type of 「routing-by-agreement」 should be far more effective than the very primitive form of routing implemented by max-pooling, which allows neurons in one layer to ignore all but the most active feature detector in a local pool in the layer below.
❞3. 膠囊網絡簡單的CNN模型可以正確提取鼻子,眼睛和嘴巴的特徵,但會錯誤地激活神經元以進行面部檢測。如果沒有意識到「空間方向和大小」上的不匹配,則面部檢測的激活將太高【簡單來說,並不是存在眼睛、鼻子、嘴巴就一定是一張臉,還有考慮各個部位的方向問題、大小問題等】。
但是,如果每個神經元都包含特徵的概率和其他屬性。例如,它輸出一個包含[可能性,方向,大小]的「向量」。有了這些空間信息,就可以檢測到鼻子,眼睛和耳朵的特徵在方向和大小上的不一致,從而為面部檢測輸出低得多的激活力。
「因此用向量來代替單個神經元標量」,即文章提到的「膠囊」(Capsule),形成了膠囊網絡。
3.1 膠囊以下通過原文的描述對膠囊下一些定義:
1、一個膠囊是一組神經元(「輸入」),即神經元「向量」(activity vector),表示特定類型的實體(例如對象或對象部分)的實例化參數(例如可能性、方向等)。
❝A capsule is a group of neurons whose activity vector represents the instantiation parameters of a specific type of entity such as an object or an object part.
❞2、「使用膠囊的長度(模)來表示實體(例如上述的眼睛、鼻子等)存在的概率」,並使用其方向(orientation)來表示除了長度以外的其他實例化參數,例如位置、角度、大小等。
❝We use the length of the activity vector to represent the probability that the entity exists and its orientation to represent the instantiation parameters.
❞❝In this paper we explore an interesting alternative which is to use the overall length of the vector of instantiation parameters to represent the existence of the entity and to force the orientation of the vector to represent the properties of the entity.
❞3、膠囊的「向量輸出」的長度(模長)不能超過1,可以通過應用一個「非線性函數」使其在方向不變的基礎上,縮小其大小。
❝cannot exceed 1 by applying a non-linearity that leaves the orientation of the vector unchanged but scales down its magnitude.
❞接下來我們主要介紹膠囊之間的傳播與訓練過程。
3.1.1 問題定義膠囊網絡總的計算過程如下所示(圖來自[4]):
我們假設低層次的膠囊(輸入)是探測眼睛、嘴巴、鼻子,整個膠囊網絡的目的(輸出)是探測人臉。為了與普通神經網絡相比,完全可以將膠囊網絡的計算看成前向傳播的過程。
3.1.2 低層膠囊輸入輸入為較為低層次的膠囊(Primary Capsule)
應用一個轉換矩陣(transformation matrix)
「為什麼稱
因為轉換矩陣例如對於鼻子來說,臉以鼻子為中心,它的大小是鼻子的10倍,它在空間中的方向與鼻子的方向相對應,因為它們都在同一個平面上,因此得到的向量是對人臉的預測;其他兩個向量同理,如下圖所示:
對於權重矩陣
3.1.4 預測向量加權求和然後我們需要將所有得到的預測向量進行加權求和:
其中
3.1.5 膠囊輸出之前我們提到想要一個膠囊的向量的模來表示由膠囊所代表的實體存在的概率。因此作者在論文中提出使用非線性函數「「squashing」」來替代傳統的神經網絡的激活函數Relu,這是為了確保短向量可以被壓縮至接近0的長度,長向量壓縮至接近1的長度,「並且保持向量的方向不變」。因此最終膠囊的向量輸出:
對上述式子進行分析:
當
3.1.6 與普通神經網絡進行比較上述膠囊網絡與傳統的神經網絡比較圖片來自[4],了解神經網絡結構的同學也可以對膠囊網絡有更深入的認識,具體的介紹可以看[4]。
兩者的計算過程如下所示:
3.2 Dynamic Routing算法對於上述的學習參數
首先得到所有的「預測向量」
對於所有的輸入膠囊
計算向量
【注】:由於第一次迭代
最後一步的向量通過非線性函數squash,這確保了向量的方向保持不變,但它的長度被強制不超過1。這一步輸出最終的向量
這一步是權重發生更新的地方,也是整個動態路由算法的「關鍵」。這一步通過膠囊
經過上述動態路由算法的解析,我們發現動態路由不能完全替代反向傳播。轉換矩陣
4. 總結通過論文與參考文獻中的博客的敘述,對上篇文章中使用的動態路由算法有了更清晰的認識。
參考文獻[1] https://jhui.github.io/2017/11/03/Dynamic-Routing-Between-Capsules/
[2] https://medium.com/ai³-theory-practice-business/understanding-hintons-capsule-networks-part-i-intuition-b4b559d1159b
[3] https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-ii-how-capsules-work-153b6ade9f66
[4] https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-iii-dynamic-routing-between-capsules-349f6d30418