終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

機器之心發表於2017-10-28
Geoffrey Hinton 等人備受關注的 NIPS 2017 論文《Dynamic Routing Between Capsules》已於數小時前公開。

9 月份,Axios 的一篇報導指出,Geoffrey Hinton 呼籲研究者們對反向傳播保持懷疑態度,並準備在深度學習之上重構人工智慧的理論體系。報導指出,他和其他兩位研究者被 NIPS 2017 接收的論文《Dynamic Routing Between Capsules》正是 Hinton 對於未來人工智慧形態的新探索。

在論文未放出之前,業內已經對其有著熱烈的討論。昨天,這篇文章終於被提交到了預印版論文平臺上,我們得以一覽全貌。在本文中,機器之心對此論文做了摘要介紹。

論文:《Dynamic Routing Between Capsules》

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

論文連結:https://arxiv.org/abs/1710.09829

Capsule 是一組神經元,其活動向量(activity vector)表示特定實體型別的例項化引數,如物件或物件部分。我們使用活動向量的長度表徵實體存在的概率,向量方向表示例項化引數。同一水平的活躍 capsule 通過變換矩陣對更高階別的 capsule 的例項化引數進行預測。當多個預測一致時,更高階別的 capsule 變得活躍。我們展示了判別式訓練的多層 capsule 系統在 MNIST 資料集上達到了頂尖的效能,比識別高度重疊數字的卷積網路的效能優越很多。為了達到這些結果,我們使用迭代的路由協議機制(routing-by-agreement mechanism):較低階別的 capsule 偏向於將輸出傳送至高階別的 capsule,有了來自低階別 capsule 的預測,高階別 capsule 的活動向量具備較大的標量積。

1. 前言

人類視覺可以通過使用一個小心確定的注視點序列來保證僅有極少部分畫面需要進行高解析度處理。我們很難通過內省的思路來理解一個場景中注視點序列能夠傳遞多少資訊,我們能從單一注視點中獲取多少資訊,但在谷歌大腦 Sara Sabour、Nicholas Frosst 與 Geoffrey Hinton 提交的這篇論文中,研究人員假設單一注視點可以提供遠多於目標種類及其屬性等資訊。研究人員假設人類的多層視覺系統可以在每個注視點上建立類似於解析樹一樣的機制,在研究中,我們將忽略這些單一注視點解析樹在多個注視點中如何協調的問題。

解析樹通常通過動態分配記憶體來構建,但根據 Hinton 等人 2000 年的研究,在新的論文裡我們假設對於單一注視點而言,解析樹是由指定多層神經網路雕刻而出的,就像在巖洞的石壁上雕刻的圖畫一樣。每一層會被分割為很多神經元小組,它們被稱為膠囊(「Capsule」,Hinton et al., 2011),解析樹上的每個節點對應於一個活動的 Capsule。在迭代地進行路由選擇的過程中,每個活動 Capsule 將在上面的層中選擇一個 Capsule 作為其樹中的父單元。對於更高階的視覺系統而言,這個迭代過程將解決從部分分配到整體的問題。

在活動 Capsule 中神經元的活動表示了影像中存在的特定實體的各種性質。這些性質可以包含很多種不同的例項化引數,例如姿勢(位置,大小,方向)、變形、速度、反射率,色彩、紋理等等。其中一個非常特殊的屬性就是影像中例項化實體的存在與否。表示存在的一個簡單方法就是使用單獨的邏輯單元,讓它輸出實體存在的概率。在本論文中,研究人員探索了一個有趣的替代方法——使用例項化引數向量的總長度來表示實體的存在,並強制向量的方向來表示實體的屬性。研究人員通過應用一個非線性方法,讓向量方向不變,但大小可以縮放,以此確保了輸出的向量長度不超過 1。

Capsule 的輸出是向量,所以我們可以使用強大的動態路由機制確保輸出的資訊可以被傳送到合適的父 capsule 中(上一層)。最初,輸出可以通向所有可能的父節點,但因為耦合係數為 1,這個範圍被急劇縮小。對於每個可能的父節點來說,capsule 會通過其自身的輸出乘以權重矩陣來計算一個「預測向量」。如果這個預測向量與可能的父節點輸出存在一個大的標量積,則存在自上而下的反饋,使得該父節點的耦合係數上升,其他父節點的耦合係數下降。這增加了 capsule 對該父節點的貢獻,進而提高了 capsule 預測和該父節點輸出的的標量積。這種「路由協議」(routing-by-agreement)應該比由最大池化實現的原始形式的路由效果好得多,後者允許一層中的神經元忽視其他特徵檢測器,除了下一層的區域性最活躍的特徵檢測器。我們證明我們的動態路由機制可以有效實現分割高度重疊的物體所需的「解釋」(explaining away)。

卷積神經網路(CNN)使用學到的特徵檢測器副本(translated replicas),這使它們能夠在影像中一個位置獲得的優秀權重值知識轉化到其它位置上。這已經被證明其在影像解釋方面非常有幫助。儘管我們用向量輸出 capsules 代替 CNN 中標量輸出的特徵檢測器,用協議路由(routing-by-agreement)代替最大池化,但我們仍希望通過複製空間內學到的知識,所以我們令除了最後一層的 capsules 層級都為卷積層。

和 CNN 一樣,我們建立更高階別的 capsule 來覆蓋影像的更大區域,但是與最大池化不同,我們無法拋棄區域內實體的確切位置資訊。對於低階 capsule 而言,位置資訊由活躍的 capsule 進行「位置編碼」(place-coded)。隨著層級的上升,越來越多的位置資訊層級由 capsule 的輸出向量中的實數值部分進行「率編碼」(rate-coded)。從位置編碼到率編碼的轉變和高階別 capsule 代表具備更多自由度的更復雜實體共同表明 capsule 的維度應該隨著層級的上升而增長。

2. Capsule 如何計算輸入和輸出向量

現在有很多可能的方式能實現 Capsule 的一般性概念。本論文的目的並不是探索整個可能的空間,而是簡單地展示了一個非常直接與有效的實現方式,即動態路由選擇(dynamic routing)。

我們希望 Capsule 輸出向量的長度能表徵實體(由 Capsule 表徵)存在於當前輸入的概率。因此我們能使用非線性「壓縮」函式確保短向量的長度能夠縮短到幾乎等於零,而長向量的長度壓縮到 1 的左鄰域內。我們可以將它們放入判別式學習(discriminative learning)以充分利用非線性的特性。

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

其中 v_j 為 Capsule j 的輸出向量,s_j 為總輸入向量。

對於 Capsule 除了第一層的所有層級,Capsule s_j 的總輸入為下面 Capsule 層級中所有「預測向量」終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了的加權和,而預測向量 u_hat 可通過計算一個 Capsule 的 u_i 輸出與下面層級的權重矩陣 W_ij 的乘積而得出:

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

其中 c_ij 為耦合係數(coupling coefficients),該係數由迭代的動態路由選擇過程確定。

Capsule i 的耦合係數和上面層級所有的 Capsule 耦合係數和為 1,並且由「routing softmax」決定,該 softmax 函式中的初始 logits b_ij 為 Capsule i 應該和 Capsule j 耦合的對數先驗概率:

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

對數先驗(log priors)可以同時和其它權重有區別地進行學習。它們依賴於兩個 Capsule 的位置與型別,但不依賴於當前的輸入影像。初始化耦合係數可以通過測量前面層級中每一個 Capsule j 的當前輸入 v_j 和 Capsule i 的預測終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了間一致性(agreement),然後藉助該測量的一致性迭代地精煉更新耦合係數。

這個一致性(agreement)可以簡單地設定為標量乘積終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了。該一致性可以被視為對數似然度,並可加入初始 logit 中,b_ij 在計算所有耦合係數更新值之前已經將 Capsule i 連結到更高階的 Capsule 中。

在卷積 Capsule 層中,每一個 Capsule 單元都是一個卷積單元,因此每一個 Capsule 將輸出一個向量組而不是單個輸出向量。

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

4. CapsNet 架構

圖 1 展示了一個簡單的 CapsNet 架構。該架構只有兩個卷積層和一個全連線層。Conv1 有 256 個 9 × 9 卷積核,步幅為 1,帶有 ReLU 啟用。該層將畫素強度(pixel intensity)轉換成區域性特徵檢測器的活動,然後作為輸入傳送至主 capsule 中。

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

圖 1:一個簡單的 3 層 CapsNet。該模型的結果與深度卷積網路(如 Chang and Chen [2015])差不多。DigitCaps 層中每個 capsule 的活動向量(activity vector)的長度代表出現的每個類別的樣例,用於計算分類損失。W_ij 是 PrimaryCapsule 中每個 u_i 之間的權重矩陣,i ∈ (1, 32 × 6 × 6),v_j,j ∈ (1, 10)。

主 Capsule 是最低階別的多維實體,從逆向圖(inverse graphics)的角度來看,啟用主 capsule 對應的是逆轉渲染過程(rendering process)。這和將多個例項化部分拼合起來組成一個熟悉的整體是一種非常不同的計算型別,而後者正是 capsule 的設計初衷。

第二個層(Primary Capsules)是一個卷積 capsule 層,具有 32 個通道、卷積 8D capsule(即每個主 capsule 包括 8 個卷積單元,每個卷積單元有一個 9 × 9 核,步幅為 2)。每個主 capsule 輸出接收到所有 256×81 Conv1 單元的輸出,它們的感受野與 capsule 的中心位置重疊。PrimaryCapsules 一共有 [32, 6, 6] capsule 輸出(每個輸出都是一個 8D 向量),[6, 6] 網格中的每個 capsule 彼此共享權重。可以把 PrimaryCapsules 看作一個區塊非線性(block non-linearity)為 Eq. 1 的卷積層。最後的層(DigitCaps)的每個數字類別都有一個 16D capsule,每個 capsule 接收來自下面一層所有 capsule 的輸入。

我們只在兩個連續的 capsule 層之間執行路由選擇(如 PrimaryCapsules 和 DigitCaps)。Conv1 的輸出是 1D 的,無法對其空間進行定位。因此 Conv1 和 PrimaryCapsules 之間無法進行路由選擇。所有路由選擇 logit(b_ij)都要被初始化為 0。因此,最初 capsule 輸出(u_i)以同樣的概率(c_ij)被髮送至所有父 capsule(v_0...v_10)。我們在 TensorFlow 中進行實現(Abadi et al. [2016]),使用 Adam 優化器及其 TensorFlow 預設引數,包括指數遞減學習率,以最小化 Eq. 4 中的邊際損失。

4.1 重構損失作為正則化方法

我們使用額外的重構損失(reconstruction loss)來促進數字 capsule 對輸入數字的例項化引數進行編碼。在訓練期間,我們矇住所有向量,除了正確的數字 capsule 的活動向量。然後,使用該活動向量來重構。數字 capsule 的輸出被饋送至包含 3 個全連線層的解碼器,該解碼器對圖 2 描述的畫素強度進行建模。我們最小化邏輯單元(logistic unit)輸出和畫素強度之間的平方差的和。我們按 0.0005 的比例縮小重構損失,以使它不會主導訓練過程中的邊際損失。如圖 3 所述,僅保留重要的細節,從 CapsNet 的 16D 輸出進行重構是魯棒的。

5. MNIST 上的 Capsule

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

圖 3:進行 3 次路由迭代的 CapsNet 在 MNIST 資料集上的測試重構樣例。(l, p, r) 分別代表標籤、預測和重構目標。最右兩列是兩個失敗的重構樣例,它展示了模型如何混淆該影像中的 5 和 3。其他列來自正確的分類,展示了模型如何挑剔細節,同時使噪聲變得平滑。

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

表 1:CapsNet 分類測試準確度。其中 MNIST 均值和標準差都是根據三個試驗計算而出。

我們發現 capsule 中的一個維度(所有 16 個維度中)幾乎總是可以表徵數字的寬度。而多個維度可以表徵全域性變化的組合,還有其它一些維度可以表徵數字的區域性變化。

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

圖 4:維度擾動(dimension perturbation)。每一行展示當 DigitCaps 表徵的 16 個維度之一在區間 [−0.25, 0.25] 中以 0.05 的間隔(interval)進行變化並重構。

圖 5 中的重構表明 CapsNet 能夠將影像分割成兩個原始數字。

終於,Geoffrey Hinton那篇備受關注的Capsule論文公開了

圖 5. 一個 CapaNet 的樣本重構,其中在 MultiMNIST 測試資料上使用了 3 個路徑迭代。

兩個重構數字以綠色和紅色重疊位於圖下方。圖上方展示了輸入影像。L:(l1, l2) 表示圖中輸入的兩個數字的標籤,R:(r1, r2) 表示重構的兩個數字。最右兩列展示了兩個錯誤重構的例子,分別從標籤和預測(以 P 標記)重構。在(2,8)的例子中,模型混淆了 8 和 7,在(4,9)的例子中,模型混淆了 9 和 0。其它列都給出了正確的分類結果,表明模型能考慮所有的畫素並決定每個畫素如何分配給兩個數字,即使是在相當困難的情景下(第 1—4 列)。注意資料集生成的時候,畫素的值都簡化為 1。帶*號的兩列展示了既不是從標籤也不是從預測重構的數字的結果。這些結果表明模型不止是為影像中的所有(包括未出現的)數字尋找最佳擬合。因此,在(5,0)的例子中,它無法重構出一個 7,因為它知道 5 和 0 擬合得最好,並且模型已經考慮了所有的畫素。同樣,在(8,1)的例子中,數字 8 中的環並不會使模型指向 0,因為它已經考慮了 8。所以,如果其中一個沒有任何其它的支援線索,模型不會將一個畫素分配給兩個數字。

8. 討論

Capsule 做出了一個很強大的具有代表性的假設:在影像的每一個位置,一個 capsule 只表示實體型別的至多一個例項。這個假設受被稱為「擁擠」(crowding,Pelli et al. [2004])的知覺現象的啟發,能消除「繫結」(binding,Hinton[1981])問題,並允許一個 capsule 使用一個分佈表示(它的活動向量)在給定的位置編碼該型別的實體的例項化引數。這種分佈表示的有效性比通過在高維網格上啟用一個點(並使用正確的分佈表示)編碼例項化引數呈指數增長。然後 capsule 可以充分利用這樣的事實,即空間關係可以通過矩陣乘法建模。

Capsule 利用和視角變化一致的神經活動,而不是儘可能地消除活動中的視角變化。這給了它們超越「歸一化」方法如空間轉換器網路(spatial transformer network)的優勢(Jaderberg et al. [2015]):它們能同時處理多個不同目標(或目標部分)的多種仿射變換。

Capsule 也很擅長分割任務(這是計算機視覺中的另一個難題),因為例項化引數的向量允許它們使用路由協議機制(routing-by-agreement),正如研究者在論文中所證明的。現在,對 capsule 的研究處於和本世紀初用 RNN 研究語音識別類似的階段。有許多基本的具有代表性的理由使我們相信這是一個更好的方法,但在 capsule 能超過一種高度發展的技術之前,還需要很多的細節洞察。一個簡單的 capsule 系統已經能在分割重疊數字任務中表現出空前強大的效能,這種跡象提醒我們 capsule 是一個值得探索的方向。 

參考閱讀:

淺析 Geoffrey Hinton 最近提出的 Capsule 計劃

觀點 | Geoffrey Hinton:放棄反向傳播,我們的人工智慧需要重頭再來

被 Geoffrey Hinton 拋棄,反向傳播為何飽受質疑?(附 BP 推導)

相關文章