『科學計算』Capsule_Net
Capsule概述
Capsule機理是使用一個向量代替傳統神經網絡的輸出的標量信息,
傳統的標量只能表示表示出回歸結果或者分類結果,不能表示出同類不同輸入之間的差異,也缺少泛化性:如下向左的和向右的鳥喙並不能經由同一個網絡劃為一種(對於圖像一些變換魯棒性不好)。
而Capsule使用向量L2範數表示輸出分類概率,而向量本身的各個元素對應著輸入圖像的某些特征,如下:使用第一個元素表示鳥喙的方向。
Capsule結構輸入為Capsule的輸出向量,輸出也是向量,這個結構的提出是為了取締pooling,使用近似聚類的方式取代pooling的簡單舍棄大量信息的手法。
Capsule結構分析
對於輸入的向量v,首先乘一個矩陣W,這個W是可學習的,然後使用這個轉換後的u進行下一步處理,
然後使用這些u來使用權重c計算中間結果s,s進行一個壓縮得到最後的結果,這個壓縮使得輸出向量各個元素為0-1之間的值。
這個c實際上就是比較關鍵的中間參量(dynamic routing關鍵,不是可學習量)
下面簡單介紹一下c的用法,這實際上也是網絡的精華,
初始化中間值b,個數對應輸出向量數,
循環T次,屬於超參數,
將b使用softmax映射為權重
各個向量加權平均
均值擠壓操作,使之進入其他向量的值域(就是各個元素都在01之間的空間)
更新b,這個更新會賦予與均值接近的各個點更高權重
這樣循環下來會實現數據降維(多個向量合並為一個向量),而且更夠保留各個向量的信息。
畫成流程圖,類似RNN,而且訓練過程仍然使用的反向傳播,
Reconstruction模塊
因為輸出向量是可以體現輸入特征的,所以還有復原圖像的部分,這裏會使用最大類別的輸出(可以看到只有v1乘了1,其他乘的都是0),進行圖像還原,
而分類部分的訓練就是最大化正確類別的L2範數,最小化其他輸出模長的L2範數,
實驗結果
實驗一
比起BL(CNN網絡),錯誤率更低(routing的次數,以及Loss是否加入重建損失 是兩個超參數),而且面對幹擾比傳統神經網絡性能更強勁,
實驗二
調整某個已知輸入圖像的輸出向量的某個值,觀察重建圖片的變化,以驗證輸出向量各個元素的意義,如下,效果不錯,
實驗三
輸入重疊的數字訓練,輸出重疊的數字,並可以復原(將兩個輸出向量分別送入重建模塊)
根據星標的幾組數據,可以看到,如果重建數字是錯的,那麽該錯誤向量還原的數字也是很模糊的,佐證了向量對於原始信息和分類肯定程度的雙重含義
討論
在保留分類信息的情況下,不同的輸入有著不同的輸出,可以看到輸入的差異,如下,
很明顯,池化層沒有保留這種信息,
這是李宏毅老師對其work的可能性的分析,涉及到註意力機制,不太了解,如有需要之後去補,
『科學計算』Capsule_Net