最近要提升手上模型分類的準確度,

所以在讀各種各樣的論文(#

這篇主要發想來自 Geoffrey E. Hinton 大師覺得 BP 根本太荒謬了,

人腦不會有 BP 這種架構,他想把神經網路更優化、更趨近於人腦所做的 Capsule 計畫。

(避免誤會,這篇是左岸同胞的延伸論文,並不是 Geoffrey E. Hinton 大師手筆。

CapsuleNet 架構最主要想解決的問題是:

1.傳統 CNN 需要大量資料學習

2.提升 Permutation invariance

(廢話xD 一堆論文都在做這東西)

這篇論文與 CapsuleNet 架構最大的不同就是:

把空間特徵塞進去膠囊裡面

簡單用一張圖解釋:

人腦辨識左邊是R的過程是把圖型旋轉過來,但是 CNN 是需要看過很多不同狀態的R。

像是轉了30度、60度、90度 的 R 都拿下去訓練,最後把這些結果分給 R 這個 Label,

CNN 才知道:噢?這個是R?

大師覺得要解決這種問題,就要從圖型的內部結構下手。

像是人臉的眼睛會在鼻子的上面、鼻子在嘴巴的上面、嘴巴會在下巴的上面。

只要獲得這一連串的內部對應關係,神經網路就不用每個角度再造一次車輪。

這篇怎麼做的?



Geometric Feature Aggregation

Multi-Scale Local Feature Extraction

首先用 GMM (Gaussian Mixture Model – Free Mind) + MSG (Multi-Scale Grouping)

抓相鄰點特徵。

作者說因為計算量會比較小所以用 GMM 而不是 K-Means。

這點我認為是完全唬爛,

GMM的計算量、變數量都比 K-Means 要來得大。


經過 MSG抓特徵的影響

經過 MSG 抓特徵後會有特徵太相似的困擾,

設想一個狀況,上圖是 MSG 抓兩層特徵 ( K=2 )  的狀況下的圖示。

外面那圈重疊的面積比裡面那圈大很多,對吧?

面積在這裡可以換成機率,所以對於相鄰點來說:

外面那圈的大尺度抓到的特徵有很大的機率會很像。

Multi-Scale Shuffling

洗牌!(T代表抓取的尺度,C代表通道維度)

所以我們做一個洗牌的動作(文字癌),把大小尺度的特徵混在一起增強特徵。

Spatial Relationship Aggregation

Rearrange and Squashing

其中 C(qk) 代表 xyz 軸輸入、 C(yk) 代表 MLP 過後的 高維度特徵。
C(Sk) 僅代表 C(qk) 與 C(yk)  concat 起來,也是本篇最大的改進
ui是 C(Sk) 經過全連接層做出來的東西,論文用 256個 輸出的全連接層做。
物理意義上ui代表每個不同的特徵(顏色、深度、方向…等)。
以下詳細解說膠囊如何運作:

我們要知道 CapsuleNet 架構裡面,
每個特徵點被觸發的方式是由底層的膠囊一層一層傳播上去。

至於為什麼膠囊架構會長成這樣,這篇講得很好,我就不多贅述了。
fixation point 的部分
首先從第 i 層抓一個膠囊啟動,輸出向量為 Ui。
這個 Ui 會乘上權重矩陣 變成預測的 hat Uij,
hat Uij 的物理意義是估計 Uj 這顆膠囊的輸出向量來說 Ui 輸出向量的比重。

然後乘上耦合函數 Cij 後用 squashing函數 做真實輸出 -> 這顆膠囊的真實輸出 Vj
乘上耦合函數 Cij 的物理意義是當 Ui 這顆膠囊對於 Uj 貢獻巨大時,
Cij 會趨近於一(或等於一),Uj 的參數會全部灌給 Uj 去做輸出。
很巧妙的一個設計。

CapsuleNet 系列都有一個 squashing 函式,
這邊給出的解釋是 Geoffrey E. Hinton 大師 希望膠囊的長度(本篇膠囊=ui)能夠代表機率,
長度越長的膠囊長度越要趨近於一、長度越短的膠囊長度要趨近於零。

所以這個函數會把每個向量(膠囊)長度正規化,
圖形會長這樣:

X軸代表原向量長度、Y軸代表經過函數轉換後乘上的乘積。


這邊的長度要用 Two-norm 帶入,否則會證不出來。

然後特別要注意的一點是這裡的 squashing 只會在 Vj 做一次,
第一行 squashing 的函式與 第三行的 Ui 沒有半點毛線關係。
這篇看很久都看不透,一部分是因為數學符號混用,
強烈建議這篇方程式要跟原版論文對照著看。
(嚴重懷疑變數會長這麼醜,是為了規避論文重疊性比對。)

後面的 bij 就是迭代真實輸出與估計去更新 Cij 而已。


By wuyiulin

喜歡騎單車的影像算法工程師

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *