Hinton 最近提出的 Capsule 計畫

2021-08-30 19:19:22 字數 3472 閱讀 3824

目前的神經網路中,每一層的神經元都做的是類似的事情,比如乙個卷積層內的每個神經元都做的是一樣的卷積操作。而hinton堅信,不同的神經元完全可以關注不同的實體或者屬性,比如在一開始就有不同的神經元關注不同的類別(而不是到最後才有歸一化分類)。具體來說,有的神經元關注位置、有的關注尺寸、有的關注方向。這類似人類大腦中語言、視覺都有分別的區域負責,而不是分散在整個大腦中。

為了避免網路結構的雜亂無章,hinton提出把關注同乙個類別或者同乙個屬性的神經元打包集合在一起,好像膠囊一樣。在神經網路工作時,這些膠囊間的通路形成稀疏啟用的樹狀結構(整個樹中只有部分路徑上的膠囊被啟用),從而形成了他的capsule理論。capsule也就具有更好的解釋性。值得一提的是,同在谷歌大腦(但不在同乙個辦公室)的jeff dean也認為稀疏啟用的神經網路是未來的重要發展方向,不知道他能不能也提出一些不同的實現方法來。

capsule這樣的網路結構在符合人們「一次認知多個屬性」的直觀感受的同時,也會帶來另乙個直觀的問題,那就是不同的膠囊應該如何訓練、又如何讓網路自己決定膠囊間的啟用關係。hinton這篇**解決的重點問題就是不同膠囊間連線權重(路由)的學習。

首先,每個層中的神經元分組形成不同的膠囊,每個膠囊有乙個「活動向量」activity vector,它是這個膠囊對於它關注的類別或者屬性的表徵。樹結構中的每個節點就對應著乙個活動的膠囊。通過乙個迭代路由的過程,每個活動的膠囊都會從高一層網路中的膠囊中選擇乙個,讓它成為自己的母節點。對於高階的視覺系統來說,這樣的迭代過程就很有潛力解決乙個物體的部分如何層層組合成整體的問題。

對於實體在網路中的表徵,眾多屬性中有乙個屬性比較特殊,那就是它出現的概率(網路檢測到某一類物體出現的置信度)。一般典型的方式是用乙個單獨的、輸出0到1之間的回歸單元來表示,0就是沒出現,1就是出現了。在這篇**中,hinton想用活動向量同時表示乙個實體是否出現以及這個實體的屬性。他的做法是用向量不同維度上的值分別表示不同的屬性,然後用整個向量的模表示這個實體出現的概率。為了保證向量的長度,也就是實體出現的概率不超過1,向量會通過乙個非線性計算進行標準化,這樣實體的不同屬性也就實際上體現為了這個向量在高維空間中的方向。

採用這樣的活動向量有乙個很大的好處,就是可以幫助低層級的膠囊選擇自己連線到哪個高層級的膠囊。具體做法是,一開始低層級的膠囊會給所有高層級的膠囊提供輸入;然後這個低層級的膠囊會把自己的輸出和乙個權重矩陣相乘,得到乙個**向量。如果**向量和某個高層級膠囊的輸出向量的標量積更大,就可以形成從上而下的反饋,提高這兩個膠囊間的耦合係數,降低低層級膠囊和其它高層級膠囊間的耦合係數。進行幾次迭代後,貢獻更大的低層級膠囊和接收它的貢獻的高層級膠囊之間的連線就會佔越來越重要的位置。

在**作者們看來,這種「一致性路由」(routing-by-agreement)的方法要比之前最大池化之類只保留了唯一乙個最活躍的特徵的路由方法有效得多。

作者們構建了乙個簡單的capsnet。除最後一層外,網路的各層都是卷積層,但它們現在都是「膠囊」的層,其中用向量輸出代替了cnn的標量特徵輸出、用一致性路由代替了最大池化。與cnn類似,更高層的網路觀察了影象中更大的範圍,不過由於不再是最大池化,所以位置資訊一直都得到了保留。對於較低的層,空間位置的判斷也只需要看是哪些膠囊被啟用了。

這個網路中最底層的多維度膠囊結構就展現出了不同的特性,它們起到的作用就像傳統計算機圖形渲染中的不同元素一樣,每乙個膠囊關注自己的一部分特徵。這和目前的計算機視覺任務中,把影象中不同空間位置的元素組合起來形成整體理解(或者說影象中的每個區域都會首先啟用整個網路然後再進行組合)具有截然不同的計算特性。在底層的膠囊之後連線了primarycaps層和digitcaps層。

由於膠囊具有新的特性,所以文中的實驗結果也並不只是跑跑benchmark而已,還有很多對膠囊帶來的新特性的分析。

數字識別

首先在mnist資料集上,經過三次路由迭代學習、層數也不算多的capsnet就得到了優秀的錯誤率。

同時,作者們依據capsnet中的表徵對「網路認為自己識別到」的影象進行重構,表明在正確識別的樣本中(豎線左側),capsnet可以正確識別到影象中的細節,同時降低雜訊。

健壯性

由於網路結構中digitcaps部分能夠分別學到書寫中旋轉、粗細、風格等變化,所以對小變化的健壯性更好。在用乙個隨機抹黑過數字的mnist資料集訓練capsnet後,作者們用它來識別affnist資料集。這個資料集中的樣本都是經過小幅度變化後的mnist樣本,變化後的樣本如下圖。這個capsnet直接拿來識別affnist的正確率有79%;同步訓練的、引數數目類似的cnn只有66%。

分割高度重合的數字

作者們把mnist資料集中的數字兩兩疊在一起建立了multimnist資料集,兩個數字的邊框範圍平均有80%是重合的。capsnet的識別結果高於cnn基準自不必提,但作者們接下來做的圖形分析中清晰地展現出了膠囊的妙處。

如圖,作者們把兩個啟用程度最高的膠囊對應的數字作為識別結果,據此對識別到的影象元素進行了重構。對於下圖中識別正確的樣本(l指真實標籤,r指啟用程度最高的兩個膠囊對應的標籤),可以看到由於不同的膠囊各自工作,在乙個識別結果中用到的特徵並不會影響到另乙個識別結果,不受重疊的影響(或者說重疊部分的特徵可以復用)。

另一方面,每個膠囊還是需要足夠多的周邊資訊支援,而不是一味地認為重疊部分的特徵就需要復用。下圖左圖是選了乙個高啟用程度的膠囊和乙個低啟用程度膠囊的結果(*r表示其中乙個數字既不是真實標籤也不是識別結果,l仍然為真實標籤)。可以看到,在(5,0)圖中,關注「7」的膠囊並沒有找到足夠多的「7」的特徵,所以啟用很弱;(1,8)圖中也是因為沒有「0」的支援特徵,所以重疊的部分也沒有在「0」的膠囊中用第二次。

在**最後,作者們對膠囊的表現進行了討論。他們認為,由於膠囊具有分別處理不同屬性的能力,相比於cnn可以提高對影象變換的健壯性,在影象分割中也會有出色的表現。膠囊基於的「影象中同一位置至多只有某個類別的乙個實體」的假設也使得膠囊得以使用活動向量這樣的分離式表徵方式來記錄某個類別例項的各方面屬性,還可以通過矩陣乘法建模的方式更好地利用空間資訊。不過膠囊的研究也才剛剛開始,他們覺得現在的膠囊至於影象識別,就像二十一世紀初的rnn之於語音識別 —— 研究現在只是剛剛起步,日後定會大放異彩。

**全文參見:

ubuntu交換caps和ctrl的方法

1 ubuntu交換caps和ctrl的方法 對於一些使用者 如emacs黨 來說,ctrl鍵是乙個經常需要使用的鍵,但是由於其位於鍵盤的兩個角落,使用起來不是十分順手。大小寫鎖定鍵caps lock在實際使用中並不是十分常用,大小寫切換的功能可以通過配合shift鍵完成,下面給出將caps loc...

聰明的提出程式設計問題

1.說明你打算做什麼,而不是你做了什麼。這讓幫助你的人知道你是否走錯了路。2.明確指出錯誤的地方。它是在程式啟動時發生,還是你做了某些動作之後?3.將完整的錯誤資訊和你的 複製貼上到 或等這些 讓你很容易在網上與他人共享大量的 而不丟失任何文字格式。然後你可以將貼出的 的url 放在電子郵件或論壇貼...

bug是怎麼提出的?

最近幾天沒搞什麼開發,一直都在修改bug,前些日子接手這個專案的時候,這個專案的第五期已經做的差不多了,從三年前的第一期到半年前的第四期,這個專案已經用這麼久了,每一期的都是在原有的基礎上進行修改或者是新增新的功能,第五期也就主要是新增些新的功能以及對以前功能的改進 接手時這個專案都換了新員工,測試...