當前位置:
首頁 > 知識 > 如何看待 Hinton 那篇備受關注的Capsules論文?

如何看待 Hinton 那篇備受關注的Capsules論文?

本文原作者 SIY.Z,本文整理自作者在知乎《如何看待 Hinton 的論文 Dynamic Routing Between Capsules?》問題下的回答。AI 研習社已獲得轉載授權。

Capsule 是 Hinton 近幾年在採訪中頻繁提到的概念,在之前我寫過一個詳盡的概述:淺析 Hinton 最近提出的 Capsule 計劃,由於 Capsule 的基礎概念相關的知識非常多,這裡全部列出來恐怕不合適,如果想詳細了解 Capsule 的理念,我建議先參考這個概述。論文中很多抽象的論述都和 Hinton 之前的這些想法密切相關。

論文原文及全文翻譯見:全文翻譯 Hinton 那篇備受關注的 Capsule 論文

應該關注的地方

理念歸理念,論文歸論文,應用歸應用。對於這篇公開的論文,我認為我們應該關注這些地方:

1. 這篇論文的定位是什麼?

答:

我想論文中說的非常清楚:The aim of this paper isnotto explore this whole space but tosimply showthat one fairlystraightforwardimplementationworks welland that dynamic routing helps.

也就是這篇論文僅僅是為了實現一個簡陋的,能用的基於 capsule 的模型,原則上無論結果多麼差都可以接受。而結果還是基本令人滿意的,並且動態路由演算法似乎能提升演算法性能。作者並沒有精心設計高效可擴展的演算法,而是僅僅展示 capsule 是能用的。

Hinton 提 Capsule 已經提了相當一段時間了,但是基本沒有具體的演算法和模型實現。一個還稱得上實現的是 2011 年的論文 [1],但是顯然那個實現和 Hinton 的想法相差很遠。

所以,這次 paper 是 Hinton 他們的初步實現,改進空間很大,沒有必要大規模炒作(這樣被誤導看了論文反而覺得印象很差)。很多 Hinton 在演講中提到的成果(包括 few-shot learning 等等)論文裡面還沒有看到,也就意味著 Hinton 可能還有一些更加成熟的關於 capsule 的論文沒有發表。

2. 就理念而言,這篇論文踐行了 Hinton 的哪些理念,而哪些論文還沒有達到?而踐行這些理念使用哪些具體的數學方法?

答:這篇論文基本踐行了 Hinton 對的 Capsule 的觀念,但是某些地方沒有體現:

(1)coincidence filtering(參考 [2])。這是 Hinton 理念上的 「routing」 方案,看上去非常 robust,但是實施需要 EM 演算法和 Gaussian Mixture,相對比較複雜。而這次論文中我們可以看到它直接用非常簡單粗暴的 dynamic routing 來實現了(並且引入新的超參數),這有點偏離原來的思想。

(2)place-coding & rate-coding (參考 [2])。這需要多層 capsule 才能體現,論文中的模型實在太淺了完全不能體現。

3. 就論文而言,論文有什麼亮點,有什麼突破?將來有什麼展望?

答:亮點和突破在於更好的 robust,以及對重疊圖像 / 多物體識別的先天優勢。這個正文會細說。

4. 就應用而言,這篇論文中的 Capsules 是否有傳統的深度學習不可替代的價值?又有什麼應用場景?

答:對不起,目前看來還不明顯。不過這也不是論文的目標。

用一組 Capsules 替代網路的一層

Capsule 關鍵的一點是在於用複雜的 Capsule 替代現在神經網路中簡單的 layer。

其重要理由之一是現在 layer 中的 neuron 太過簡單,本身很難表徵概念;而 Capsule 使用向量作為輸入輸出,而向量就可以作為良好的表徵(比如 word2vec 中的向量就可以良好表徵辭彙),可以加各種特技,(具體原因,包括生理學,心理學上的原因參見 [2])。

與一般的向量表徵不同,Capsule 的輸出向量表徵了兩個部分:

其長度表徵了某個實例(物體,視覺概念或者它們的一部分)出現的概率

其方向(長度無關部分)表徵了物體的某些圖形屬性(位置,顏色,方向,形狀等等)

用 Capsules 代替 layer 存在幾個問題:

(1) 如何實現激活函數?layer 使用了非線性函數來處理標量,而 Capsule 處理的是向量,那麼又該用什麼 「激活函數」 呢?

答案是一個被稱為「squashing」的非線性函數,(s 為輸入,v 為輸出,j 為 capsule 的序號)

,其中是單位化向量,也就是縮放向量的長度為。

它畫出來如下:

長度縮放函數

這個函數的特點是:

值域在 [0,1] 之間,所以輸出向量的長度可以表徵某種概率。

函數單調增,所以 「鼓勵」 原來較長的向量,而 「壓縮」 原來較小的向量。

也就是 Capsule 的 「激活函數」 實際上是對向量長度的一種壓縮和重新分布。

(2) 如何處理輸入?layer 使用了矩陣,本質上是上層輸出的線性組合。那麼對於 Capsule 又應該怎麼做呢?

Capsule 處理輸入分為兩個階段:線性組合和 routing。

線性組合一定程度上是借用 layer 中的線性組合的概念,用在 Capsule 中的好處和作用來自於圖形學對 Hinton 的啟示(參見 [2])。

不過這個線性組合不是針對 layer(也就是只有一個 matrix),而是針對 capsules (一堆 matrices),亦即:

(其中 u 是下層的向量,由前層的標號為 i 的 capsule 產生,帶帽子的 u 是處理後的結果,送給後層的標號為 j 的 capsule)。

這等於,原來 NN 中的 「邊權」(常量)變成了矩陣。

線性組合部分示意圖

關於 routing 部分,其實是給加權求和,權重是。

routing 和 線性組合相結合

而是softmax 的結果,從而使得分布歸一化;並且由於 softmax 會使分布 「尖銳化」,從而只有少數有較大的取值,這樣就起到了 routing 的作用(只有少數的權重較大,就好像底層的某個 capsule 的輸出只貢獻給上面的某個 capsule)。

Routing 的更新:Updating by agreement

按照 Hinton 在很多視頻中的理念,「找到最好的(處理)路徑等價於(正確)處理了圖像」。這也是 Capsule 框架中引入 Routing 的原因之一。

而找到 「最好路徑」 的方法之一就是找到最符合輸出的輸入向量。符合度通過輸出向量和輸入向量(線性變換後的向量)的內積所表徵,這個符合度直接被加入到中 。

更新演算法示意圖

更新演算法

這個更新演算法很容易收斂。論文中認為 3 次足矣。routing 和其他演算法一樣也有過擬合的問題,雖然增加 routing 的迭代次數可以提高準確率,但是會增加泛化誤差,所以不宜過多迭代。

網路結構:CapsNet

網路結構在論文中稱為CapsNet。

首先,來一個標準的 CNN+ReLU。強迫症患者可能感到不是很舒服:為什麼不全部使用 Capsule,而是要來個 CNN 呢?

第一層,標準的卷積

原因其實很簡單,Capsule 的向量是用來表徵某個物體的 「實例」,並且按照假設,越高級的 capsule 能夠表徵更高級的實例。如果不通過 CNN 抽取特徵,那麼 Capsule 就直接得到圖片的內容,這並不是很理想的低級特徵。而淺層的 CNN 卻擅長抽取低級特徵,於是用 CNN 是在情理之中的。

這裡注意到 CNN 的感知野很大(9*9,現在一般 3*3),這是因為 CNN 層數很少的情況下,感知野越大,底層的 capsules 能夠感知到的內容也越多。

但是,一層 CNN 的能力不足以抽取到合適的特徵,於是這篇論文又加了一個 CNN 層(一共 32 個 CNN,文中稱為 32 個 channels,每個 CNN 有 8 個 filters),這個 CNN 的輸出構成了第一層 Capsules 的向量。

由於 CNN 共享權值的特點,這一層每個 CNN 輸出的 feature map 中的 36 個 capsules 是共享權值的(通過 CNN)。顯然所有的 Capsules 都共享權值是有問題的,這也是為什麼這層搞 32 個 CNN 的道理:不同的 CNN 輸出的 Capsules 間是獨立的。

第二層,通過卷積生成初級 Capsules

為了加深理解,我們可以對比一下 CNN 的輸出和這層輸出的 Capsules 的區別:

CNN 的輸出,和論文中這層 Capsules 的輸出的比較

我們可以看到它們的相似點在於,每個」 平面 「內,變數都是共享權值的;而在不同」 平面 「內,變數是獨立的。而不同點在於,在」 平面 「內 CNN 的單位是標量,而 Capsules 是一個 capsule 表徵的向量。

這一層的 Capsules 在論文中被稱為PrimaryCapsules,這讓我聯想到primary visual cortex(初級視皮層),因為如果說第一層卷積相當於視網膜,第二層卷積相當於初級視皮層,那麼PrimaryCapsules的向量就是初級視皮層的表徵。

第三層,也是輸出層,就是一組 10 個標準的 Capsules,每個 capsule 代表一個數字。每個 capsules 輸出向量的元素個數為 16。這組 Capsules 被稱為 DigitCaps (取名逼死強迫症)。

從 PrimaryCapsules 到 DigitCaps 使用了上文所述的dynamic routing。這也是唯一使用 dynamic routing 的地方。

從 PrimaryCapsules 到 DigitCaps

按照假定,某個 capsule 輸出向量的 (範數) 長度表示某個 capsule 表徵的內容出現的概率,所以做分類的時候取輸出向量的 L2 範數即可。

這裡注意到,最後 capsules 輸出的概率向量不是歸一的,也就是 capsules 天然有同時識別多個物體的能力。

分類任務:最後取 DigitCaps 向量的 L2 範數

優化

由於 capsules 允許多個分類同時存在,所以不能直接用傳統的交叉熵損失,一種替代方案是 SVM 中常用的margin loss:

其中 c是分類,是分類的指示函數(分類 c 存在為 1,否則為 0),為上 margin,懲罰假陰性(沒有預測到存在的分類的情況);為下 margin,懲罰假陽性(預測到不存在的分類的情況)。λ是比例係數,調整兩者比重。

總的 loss 是各個之和。

至於優化演算法,論文沒有明說,其實不難猜到就是標準的反向傳播(否則怎麼搞 CNN),估計作者覺得沒有必要寫了。論文在很多細節上讓人很難受,比 AlphaGo Zero 的文筆差多了(人家把講過 N 次的 MCTS 還是換個說法耐心地講解了一遍)。

重構與表示

Hinton 一直堅持的一個理念是,一個好的 robust 的模型,一定能夠有重構的能力(」 讓模型說話 「)。這點是有道理的,因為如果能夠重構,我們至少知道模型有了一個好的表示,並且從重構結果中我們可以看出模型存在的問題。

之前我們說過,capsule 的一個重要假設是每個 capsule 的向量可以表徵一個實例。怎麼來檢驗這個假設呢?一個方法就是重構。

重構的時候,我們單獨取出需要重構的向量,扔到後面的網路中重構。當然後面的重構網路需要訓練。

重構模型

但是有讀者可能會有疑問:如何證明重構的好是因為 Capsules 輸出了良好的表示,而不是因為後面的網路擬合的結果?我們知道哪怕前面的輸入是隨機的,由於神經網路強大的擬合能力,後面的網路也能擬合出重構結果。

一個證據是人為擾動 capsule 的輸出向量。我們可以看到,如果逐漸改變向量的一些分量,表示也很有規律地改變,這是隨機的輸入難以做到的。

通過擾動 capsule 的向量,產生不同效應的重構結果

另外,他們沒有拿 capsule 的輸出向量做個 t-SNE,這點很可惜。。。如果這樣我們就能看到 capsule 的輸出向量是如何把 MNIST 嵌入到空間中去的。

重構與無監督學習

論文中發現如果把重構誤差計入,可以顯著地提高準確率:

有重構介入時,準確率有顯著提升

(其實很搞笑的是,這種提升遠遠大於對 dynamic routing 的調整)

需要注意到,重構是無監督的方式,不需要標籤。如果重構能夠大幅提升分類效果,那麼就暗示了可以通過重構做無監督學習(重構也可能是人做無監督學習的途徑之一)。這部分 Hinton 提了很多,應該已經做出來了,不過看樣子不在這篇論文當中。

重構與可解釋性

之前我在 [2] 中簡單提及過,做 capsule 的動機之一還在於可解釋性。我們需要看到 NN 為什麼正確,為什麼錯誤。

這篇論文通過重構或多或少這一點,還是很有意思的。

比如下圖左側,都是分類正確的重構,可以看到重構除了還原本身外,還起到了去噪的效果。

右側模型誤把」5「識別成了」3「,通過重構,模型」 告訴 「我們,這是因為它認為正常的」5「的頭是往右邊伸出的,而給它的」5「是一個下面有缺口的」3「。

對正確和錯誤的分類進行重構

在識別重疊數字的時候,它顯示了更強的重構能力,並且拒絕重構不存在的對象(右側 * 號)

識別重疊數字,以及重構結果

為什麼選擇 MNIST 而不是 ImageNet

我知道,大家都會吐槽為什麼還要用 MNIST 這種用爛的數據集。

首先是,ImageNet 很難做重疊圖像的實驗(現實圖片重疊的情況下本來就很難辨認,即使實現了也很難可視化),這點手寫數字幾乎是最理想的方案。

第二點是,在此實驗的配置下,做 ImageNet 是自殺行為。因為 Capsules 假設是每個 Capsule 能夠代表一個實例,本論文實現的動態路由方案比較 naive,根本不能滿足這麼多的 Capsule 數量,何必做不符合自己假設的實驗呢?其實文章作者知道這點,還是強行試了試 cifar10,果然效果不好(和最初應用到 cifar10 的 CNN 效果差不多)。

另外一個關鍵的數據集: smallNORB

Capsule 非常重要的賣點是符合圖形學的某些現象(參見 [2]), 在 smallNORB 上達到 state-of-the-art 是非常重要的支持。

smallNORB 數據集

smallNORB 和 MNIST 一樣,構成非常簡單,所以目前的 CapsNet 架構可以訓練。但是 smallNORB 非常重要的一點是,它是 3D 的,並且明顯由各個組件構成的,這點對於 Capsules 是非常有利的(如果 Capsules 假設正確)。

我相信以後關於 Capsules 的論文中 smallNORB 可能還會出現多次。

全場最差:動態路由

個人認為動態路由是論文中做的最不好的地方,做的太簡單了,如果用論文中的動態路由方案,我想是無法做到訓練 ImageNet 的。

按照 Capsules 的假設,在當前方案下,訓練 ImageNet,估計至少要用長度 100 的向量來表徵一個物體吧(可能還是不夠)。假設我們卷積層保持 256 * 256 的長寬,256 個獨立的 Capsules 分組,那麼一層就有 16777216 個 Capsules,我們不管其他的,就看最後輸出 1000 個分類,需要 1000 個 Capsules(假設向量長度還是 100 個元素),那麼參數佔用內存(設類型為 float32)就是 16777216 * 1000 * (100*100*4)= 671088640000000 = 671.08864 TB(不計路由等部分)。實際訓練中內存還會數倍於這個數字,至少要翻一倍,到 1.7 PB 左右。如果你要單獨用 GPU 放下這一層,就需要 80000 張 Titan X Pascal,更別提整個網路的參數量。如此多的參數顯然是因為全連接的動態路由造成的。

相信路由方案一定是將來改進的重點。

[1] Hinton, G. E., Krizhevsky, A., & Wang, S. D. (2011, June). Transforming auto-encoders. InInternational Conference on Artificial Neural Networks(pp. 44-51). Springer Berlin Heidelberg.

[2]淺析 Hinton 最近提出的 Capsule 計劃

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據,教程,論文】

全文翻譯 Hinton 那篇備受關注的 Capsule 論文


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

加速深度學習的訓練和推理

TAG:AI研習社 |