capsule network--《Dynamic Routing Between Capsules》
Hinton大神前一段時間推出的capsule network--《Dynamic Routing Between Capsules》可謂是火了朋友圈,吸引了無數科研人員的眼球。現實生活中,無論你持什么樣的觀點,總有人站在“對立面”,比如知乎中不乏“高人”跳出來“怒噴”這篇論文。那些怒噴的回答我讀了讀,覺得噴人的答主們格局小了點。《Dynamic Routing Between Capsules》這篇論文雖有不足,但該論文的亮點不是更值得我們關注嗎?吹毛求疵的“暴擊”除了抓眼球、或者通過貶低別人以體現自己的優越的事,還是要少做。多關注別人的有點,學習之,這才是生存之道。
廢話半天,回到正題,本文的目的並非給出capsule network的詳解(因為capsule network的相關博客已經滿天飛了),還是像往常一樣,我們簡單的分析這篇論文的Motivation,了解其思想,並思考一下有哪些應用場景。
為啥要用Capsule network? 它比CNN有哪些優勢?
(Hinto論文里提到,capsule network更像是大腦工作的方式,當人們處理某個視覺信息時,大腦有個“routing”的機制,尋找大腦中最好的“capsule”來處理該視覺信息)
用下面圖片中的例子說明,左邊是一個房子,右邊是一個帆船。假設我們用大量“房子”的圖片訓練CNN,然后用右邊的“帆船”去測試CNN,CNN會錯誤地認為右邊的圖片也是“房子”。
為什么CNN會出現這個問題?CNN忽略了“結構信息”。這是因為不同的feature map分別捕捉了“三角形”和“四邊形”的圖形信息。對於測試樣本“帆船”,CNN的“三角形”和“四邊形”的feature map都會被激活,即該圖片中包含了三角形和四邊形,就認為這是一個房子。所以說,CNN僅僅考慮了“有沒有”的問題,沒有考慮feature map的結構關系。這個結構關系包括位置,角度等等。

Capsule network是如何解決這個問題的呢?
Capsule layer的定義是a nested set of neural layers,即他是多層神經網絡的一個集合,而非一個個孤零零的feature map。Capsule layer的輸出也跟feature map的max-pooling輸出不同,capsule layer的輸出是一個向量,這個向量包含了位置,大小,角度等信息,這是feature map僅能輸出一個值所不具備的。

結合房子和帆船的例子,模型中間Primary capsules,我們可以理解為某個capsule表征“房子”,某個capsule表征“帆船”。假設一個“帆船”測試樣本輸入到網絡中,那么Primary capsules中對應“帆船”的capsule會被激活,而對應“房子”的capsule會被抑制,整個模型也就避免了將“帆船”錯誤地識別為“房子”。某種程度上說,Capsule layer提升了整個模型的表達能力,它比feature maps提取了更多的細節信息。
Capsule Network既然有這樣的優勢,那么潛在的應用有哪些呢?
因為capsule network能夠建模更細節的信息,capsule network可以用來做人臉識別,物體檢測等任務,泛華能力可能比CNN要強。
當然,圖片信息推理(如:圖片中最大物體的右邊是什么?),圖片描述生成(看圖說話)等任務中,可能也會比較有用。
另外一方面,文本挖掘上,目前文本的結構信息僅局限在n-gram語言模型下,capsule network能否對n-gram之外的結構關系進行建模,從而提升文本挖掘任務上的表現,也不一定。
總之,capsule network已然成為一個“大坑”,相信會有很多人前來“灌水”。
我們在做文章的時候也該想一想,別為了灌水,損害了自己的“科研品味”。
最后,簡單介紹一下論文中的幾個重要概念,並介紹一下該論文的優勢與劣勢。
squash: 將向量長度限制在[0,1]之間,大家可以想想為啥。
routing by agreement:每個capsule可以認為是feature map的升級版,它記錄了物體在圖像中的位置、角度等信息,routing by agreement就是找到對應的capsule,並激活。
Prons:
效果好
更少的訓練數據
routing by agreement能夠處理更復雜的場景
通過實驗分析,可解釋性更強(將激活向量畫出來,可以看到有些表示了粗細,有些表示平滑程度)

Cons:
在CIFAR數據上效果不是最好
沒有在image-net大規模數據上測試
訓練比較慢(routing by agreeement部分)