1. 程式人生 > >三味Capsule:矩陣Capsule與EM路由

三味Capsule:矩陣Capsule與EM路由

作者丨蘇劍林

單位丨廣州火焰資訊科技有限公司

研究方向丨NLP,神經網路

個人主頁丨kexue.fm

事實上,在論文《Dynamic Routing Between Capsules》釋出不久後,一篇新的 Capsule 論文《Matrix Capsules with EM Routing》就已經匿名公開了(在 ICLR2018 的匿名評審中),而如今作者已經公開,他們是 Geoffrey Hinton,Sara Sabour 和 Nicholas Frosst。

不出大家意料,作者果然有 Hinton。大家都知道,像 Hinton 這些“鼻祖級”的人物,一般發表出來的結果都是比較“重磅”的。那麼,這篇新論文有什麼特色呢? 

在筆者的思考過程中,文章《Understanding Matrix capsules with EM Routing 》[1] 給了我頗多啟示,以及知乎上各位大神的相關討論也加速了我的閱讀過程,在此表示感謝。

快速預覽

640?wxfrom=5&wx_lazy=1

圖1:Capsule框架的簡明示意圖

上圖表明,Capsule 事實上描述了一個建模的框架,這個框架中的東西很多都是可以自定義的,最明顯的是聚類演算法,可以說“有多少種聚類演算法就有多少種動態路由”。

那麼這次 Hinton 修改了什麼呢?總的來說,這篇新論文有以下幾點新東西:

  • 原來用向量來表示一個 Capsule,現在用矩陣來表示

  • 聚類演算法換成了 GMM(高斯混合模型)

  • 在實驗部分,實現了 Capsule 版的卷積

一波疑問

事實上,看到筆者提出的這三點新東西,讀者應該就會有很多想法和疑問了,比如:

向量 vs 矩陣

矩陣和向量有什麼區別呢?矩陣不也可以展平為向量嗎? 

其實是有點區別的。比如一個 4×4 的矩陣,跟一個 16 維的向量,有什麼差別呢?答案是矩陣的不同位置的元素重要性不一樣,而向量的每個元素的重要性都是一樣的。

熟悉線性代數的讀者應該也可以感覺到,一個矩陣的對角線元素的地位“看起來”是比其他元素要重要一些的。

從計算的角度看,也能發現區別:要將一個 16 維的向量變換為另外一個 16 維的向量,我們需要一個 16×16 的變換矩陣;但如果將一個 4×4 的矩陣變換為另外一個 4×4 的矩陣,那麼只需要一個 4×4 的變換矩陣,引數量減少了。

從這個角度看,也許將 Capsule 從向量變為矩陣的根本目的是降低計算量。 

立方陣

以後的 Capsule 可能是“立方陣”甚至更高階張量嗎?

不大可能。因為更高階張量的乘法本質上也是二階矩陣的乘法。 

GMM vs K-Means 

GMM 聚類與你之前說的 K-Means 聚類差別大嗎? 

這個得從兩個角度看。一方面,GMM 可以看成是 K-Means 的升級版,而且它本身就是可導的,不需要之前的“軟化”技巧,如果在 K-Means 中使用歐氏距離的話,那麼 K-Means 就是 GMM 的一個極限版本。

但另一方面,K-Means 允許我們更靈活地使用其他相似的度量,而 GMM 中相當於只能用(加權的)歐氏距離,也就是把度量“寫死”了,也是個缺點。總的來說,兩者半斤八兩吧。

Capsule 版的卷積

Capsule 版的卷積是怎麼回事? 

我們所說的動態路由,事實上就只相當於深度學習中的全連線層,而深度學習中的卷積層則是區域性的全連線層。那麼很顯然,只需要弄個“區域性動態路由”,那麼就得到了 Capsule 版的卷積了。

這個東西事實上在 Hinton 上一篇論文就應該出現,因為它跟具體的路由演算法並沒有關係,但不知為何,Hinton 在這篇新論文才實現了它。 

GMM 模型簡介

既然這篇新論文用到了 GMM 來聚類,那麼只要花點功夫來學習一下 GMM 了。理解 GMM 演算法是一件非常有意思的事情,哪怕不是因為 Capsule——因為 GMM 模型能夠大大加深我們對概率模型和機器學習理論(尤其是無監督學習理論)的理解。

當然,只想理解 Capsule 核心思想的讀者,可以有選擇地跳過比較理論化的部分。

本質

事實上,在我們腦海裡最好不要將 GMM 視為一個聚類演算法,而將它看作一個真正的無監督學習演算法,它試圖學習資料的分佈。資料本身是個體,而分佈則是一個整體,從研究資料本身到研究資料分佈,是質的改變。 

GMM,全稱 Gaussian Mixed Model,即高斯混合模型;當然學界還有另一個 GMM——Generalized Method of Moments ,是用來估計引數的廣義矩估計方法,但這裡討論的是前者。

具體來說,對於已有的向量 x1,…,xn,GMM希望找到它們所滿足的分佈 p(x)。當然,不能漫無目的地找,得整一個比較簡單的形式出來。GMM 設想這批資料能分為幾部分(類別),每部分單獨研究,也就是:

640

其中 j 代表了類別,取值為 1,2,…,k,由於 p(j) 跟 x 沒關係,因此可以認為它是個常數分佈,記 p(j)=πj。然後 p(x|j) 就是這個類內的概率分佈,GMM 的特性就是用概率分佈來描述一個類

那麼它取什麼好呢?我們取最簡單的正態分佈,注意這裡 x 是個向量,因此我們要考慮多元的正態分佈,一般形式為:

640

其中 d 是向量 x 的分量個數。現在我們得到模型的基本形式:

640

求解

現在模型有了,但是未知的引數有 πj,μj,Σj,怎麼確定它們呢?

理想的方法是最大似然估計,然而它並沒有解析解,因而需要轉化為一個 EM 過程,但即使這樣,求解過程也比較難理解(涉及到行列式的求導)。

這裡給出一個比較簡單明瞭的推導,它基於這樣的一個事實——對於正態分佈來說,最大似然估計跟前兩階矩的矩估計結果是一樣的。

說白了,μj,Σj 不就是正態分佈的均值(向量)和(協)方差(矩陣)嘛,我直接根據樣本算出對應的均值和方差不就行了嗎?

沒那麼簡單,因為我們所假設的是一個正態分佈的混合模型,如果直接算它們,得到的也只是混合的均值和方差,沒法得到每一類的正態分佈 p(x|j) 的均值和方差。

不過我們可以用貝葉斯公式轉化一下,首先我們有:

640

比如對於均值向量,我們有:

640

這裡 E[] 的意思是對所有樣本求均值,那麼我們就可以得到:

640

其中 p(j|x) 的表示式在 (4) 已經給出。類似地,對於協方差矩陣,我們有:

640

然後:

640

所以:

640

理論上,我們需要求解 (6),(7),(9) 構成的一個巨大的方程組,但這樣是難以操作的,因此我們可以迭代求解,得到迭代演算法:

640

其中為了突出加權平均的特點,上述迭代過程先將 (9) 式作了恆等變換然後代入 (6),(7) 式。在上述迭代過程中,第一式稱為 E 步,後三式稱為 M 步,整個演算法就叫做 EM 演算法。

下面放一張網上搜索而來的動圖來展示 GMM 的迭代過程,可以看到 GMM 的好處是能識別出一般的二次曲面形狀的類簇,而 K-Means 只能識別出球狀的。

640

圖2:GMM 迭代過程展示

約簡

在 Capsule 中實際上使用了一種更加簡單的 GMM 形式,在前面的討論中,我們使用了一般的正態分佈,也就是 (2) 式,但這樣要算逆矩陣和矩陣的行列式,計算量頗大。

一個較為簡單的模型是假設協方差矩陣是一個對角陣 Σj=diagσjσj 是類別 j 的方差向量,其中640表示該向量的第 l 個分量。這樣相當於將 x 的各個分量解耦了,認為各個分量是獨立的,(2) 式就變為:

640

而迭代過程也有所簡化:

640

更簡單些

如果所有的640都取同一個常數 σ 呢?這就得到:

640

這樣整個分佈就更為簡單了,有意思的是,在指數的括號內出現了歐氏距離。

更極端地,我們讓 σ→0 呢?這時指數內的括號為無窮大,對於每個 xi,只有640的那個 N(xi;μj,σ) 佔主導作用,這時候根據 (4) 式,p(j|xi) 非零即 1(即使得640最小的那個 j 的 p(j|xi為 1,其餘為 0)。

這表明任意一個點只屬於距離它最近的那個聚類中心,這就跟使用歐氏距離的 K-Means 一致了,所以說,基於歐氏距離的 K-Means 可以看作是 GMM 的一個極限。

新版路由

言歸正傳,還是說回 Capsule。我們說《Matrix Capsules with EM Routing》中用 GMM 演算法完成了聚類過程,現在就來詳細看看是怎麼做的。

矩陣->向量

不得不說,新論文裡邊的符號用得一塌糊塗,也許能夠在一堆混亂的符號中看到真理才是真正的大牛吧。這裡結合網上的一些科普資料以及作者自己的閱讀,給出一些理解。 

首先,我們用一個矩陣 Pi 來表示第 l 層的 Capsule,這一層共有 n 個 Capsule,也就是 i=1,…,n;用矩陣 Mj 來表示第 l+1 層的 Capsule,這一層共有 k 個 Capsule,也就是聚為 k 類,j=1,…,k

論文中 Capsule 的矩陣是 4×4 的,稱之為 Pose 矩陣。然後呢,就可以開始 GMM 的過程了,在做 GMM 的時候,又把矩陣當成向量了,所以在 EM 路由那裡,Pi 就是向量,即 d=16 。整個過程用的是簡化版的 GMM,也就是把協方差矩陣約定為一個對角陣。 

所以根據前面的討論,可以得到新的動態路由演算法:

640

這裡記了 pij=N(xi;μj,σj),Rij=p(j|xi),符號儘量跟原論文一致,方便大家對比原論文。這裡的動態路由的思想跟《Dynamic Routing Between Capsules》的是一致的,都是將 l+1 層的 Capsule 作為 l 層 Capsule 的聚類中心,只是聚類的方法不一樣而已。

啟用值

《Dynamic Routing Between Capsules》一文中,是通過向量的模長來表示該特徵的顯著程度,那麼在這裡還可以這樣做嗎?

答案是否定的。因為我們使用了 GMM 進行聚類,GMM 是基於加權的歐氏距離(本質上還是歐氏距離),用歐氏距離進行聚類的一個特點就是聚類中心向量是類內向量的(加權)平均(從上面MjMj的迭代公式就可以看出)。

既然是平均,就不能體現“小弟越多,勢力越大”的特點,這我們在再來一頓賀歲宴 | 從K-Means到Capsule中就已經討論過了。 

既然 Capsule 的模長已經沒法衡量特徵的顯著性了,那麼就只好多加一個標量 a 來作為該 Capsule 的顯著性。所以,這篇論文中的 Capsule,實際上是“一個矩陣 + 一個標量”,這個標量被論文稱為“啟用值”,如圖:

640

圖3:這個版本的Capsule是“矩陣+標量”

作為 Capsule 的顯著程度,aj 最直接的選擇應該就是 πj,因為 l+1 層的 Capsule 就是聚類中心而 πj 就代表著這個類的概率。

然而,我們卻不能選擇 πj,原因有兩個:

1. πj 是歸一化的,而我們希望得到的只不過是特徵本身的顯著程度,而不是跟其他特徵相比後的相對顯著程度(更通俗點,我們希望做多個二分類,而不是一個多分類,所以不需要整體歸一化)。

2. πj 確實能反映該類內“小弟”的多少,但人多不一定力量大,還要團結才行。那麼這個啟用值應該怎麼取呢?論文給出的公式是:

640

我相信很多讀者看到這個公式和論文中的“推導”後,還是不知所云。事實上,這個公式有一個非常漂亮的來源——資訊熵。

現在我們用 GMM 來聚類,結果就是得到一個概率分佈 p(X|j) 來描述一個類,那麼這個類的“不確定性程度”,也就可以衡量這個類的“團結程度”了。

說更直白一點,“不確定性”越大(意味著越接近均勻分佈),說明這個類可能還處於動盪的、各自為政的年代,此時啟用值應該越小;“不確定性”越小(意味著分佈越集中),說明這個類已經團結一致步入現代化,此時啟用值應該越大。

因此可以用不確定性來描述這個啟用值,而我們知道,不確定性是用資訊熵來度量的,所以我們寫出:

640

這就是論文中的那個640,所以論文中的 cost 就是熵,多直觀清晰的含義。而且熵越小越好,這也是多自然的邏輯。

為什麼不直接積分算出正態分佈的熵,而是要這樣迂迴地算?因為直接積分算出來是理論結果,我們這裡要根據這批資料本身算出一個關於這批資料的結果。

經過化簡,結果是(原論文計算結果應該有誤):

640

因為熵越小越顯著,所以我們用 −Sj 來衡量特徵的顯著程度,但又想將它壓縮為 0~1 之間。那麼可以對它做一些簡單的尺度變換後用 sigmoid 函式啟用:

640

(15) 式和 (13) 式基本是等價的,上式相當於 −Sjπj 的加權求和,也就是綜合考慮了 −Sj(團結)和 πj(人多)。

其中 βaβu 通過反向傳播優化,而 λ 則隨著訓練過程慢慢增大(退火策略,這是論文的選擇,我認為是不必要的)。

βaβu 可能跟 j 有關,也就是可以為每個上層膠囊都分配一組訓練引數 βaβu說“可能”是因為論文根本就沒說清楚,或許讀者可以按照自己的實驗和需求調整。

有了 aj 的公式後,因為我們前面也說 ajπj 有一定共同之處,它們都是類的某種權重,於是為了使得整個路由流程更緊湊,Hinton 乾脆直接用 aj 替換掉 πj,這樣替換雖然不能完全對應上原始的 GMM 的迭代過程,但也能收斂到類似的結果。

於是現在得到更正後的動態路由:

640

這應該就是最終的新的動態路由演算法了,如果我沒理解錯的話,因為原論文實在太難看懂。

權重矩陣

最後,跟前一篇文章一樣,給每對指標 (i,j) 配上一個權重矩陣 Wij(稱為視覺不變矩陣),得到“投票矩陣”Vij=PiWij,然後再進行動態路由,得到最後的動態路由演算法:

640

結語

評價

經過這樣一番理解,應該可以感覺到這個新版的 Capsule 及其路由演算法並不複雜。

新論文的要點是使用了 GMM 來完成聚類過程,GMM 是一個基於概率模型的聚類演算法

緊抓住“概率模型”這一特性,尋找概率相關的量,就不難理解 aj 表示式的來源,這應該是理解整篇論文最困難的一點;而用矩陣代替向量,應該只是一種降低計算量和引數量的方案,並無本質變化。 

只不過新論文傳承了舊論文的晦澀難懂的表達方式,加上混亂的符號使用,使得我們的理解難度大大增加,再次詬病作者們的文筆。 

感想

到現在,終於算是把《Matrix Capsules with EM Routing》梳理清楚了,至於程式碼就不寫了,因為事實上我個人並不是特別喜歡這個新的 Capsule 和動態路由,不想再造輪子了。 

這是我的關於 Capsule 理解的第三篇文章。相對於筆者的其他文章而言,這三篇文章的篇幅算得上是“巨大”,它們承載了我對 Capsule 的思考和理解。每一篇文章的撰寫都要花上好幾天的時候,試圖儘可能理論和通俗文字相結合,儘可能把前因後果都梳理清楚。

希望這些文字能幫助讀者更快速地理解 Capsule。當然,作者水平有限,如果有什麼誤導之處,歡迎留言批評。 

當然,更希望 Capsule 的作者們能用更直觀、更具啟發性的語言來介紹他們的新理論,這就省下了我們這些科普者的不少功夫了。

畢竟 Capsule 有可能真的是深度學習的未來,怎可如此模糊呢?

相關連結

[1] Understanding Matrix capsules with EM Routing

https://jhui.github.io/2017/11/14/Matrix-Capsules-with-EM-routing-Capsule-Network/

640?

點選以下標題檢視相關內容: 

640?

640?#榜 單 公 布 #

我是彩蛋

 解鎖新功能:熱門職位推薦!

PaperWeekly小程序升級啦

今日arXiv√猜你喜歡√熱門職位

找全職找實習都不是問題

 解鎖方式 

1. 識別下方二維碼開啟小程式

2. 用PaperWeekly社群賬號進行登陸

3. 登陸後即可解鎖所有功能

 職位釋出 

請新增小助手微信(pwbot01)進行諮詢

長按識別二維碼,使用小程式

*點選閱讀原文即可註冊

640?

關於PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報道人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點選「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。

640?

▽ 點選 | 閱讀原文 | 進入作者部落格

相關推薦

關於矩陣膠囊EM路由的理解(基於Hinton的膠囊網路)

本文介紹了Hinton的第二篇膠囊網路論文“Matrix capsules with EM Routing”,其作者分別為Geoffrey E Hinton、Sara Sabour和Nicholas Frosst。我們首先討論矩陣膠囊並應用EM(期望最大化)路由

推薦系統矩陣分解鄰域的融合模型

critical with 分析 但是 rac 公式 download pearson 情況 推薦系統通常分析過去的事務以建立用戶和產品之間的聯系,這種方法叫做協同過濾。 協同過濾有兩種形式:隱語義模型(LFM),基於鄰域的模型(Neighborhood models)。

MIT 線性代數導論 第三講矩陣乘法矩陣

為了以後自己看的明白(●’◡’●),我決定對複雜的計算過程不再用Latex插入數學公式了(記得不熟的實在是太費勁了,還是手寫好~) 第三講的主要內容有兩個: 四種矩陣乘法的方式 逆矩陣的概念以及計算方式 矩陣乘法(Matrix multiplication)

Tensorflow深度學習之十九矩陣切片連結

1、TensorFlow矩陣切片操作:tf.slice函式 函式原型:slice(input_, begin, size, name=None) 引數: input:待切片的矩陣tensor。 begin:起始位置,表示從哪一個資料開始進行切片。這個起始

《神經網路的梯度推導程式碼驗證》之數學基礎篇矩陣微分求導

本內容為神經網路的梯度推導與程式碼驗證系列內容的第一章,更多相關內容請見《神經網路的梯度推導與程式碼驗證》系列介紹。  目錄 1.1 數學符號 1.2 矩陣導數的定義和佈局 1.3 矩陣求導的優勢 1.4 矩陣微分與矩陣求導 1.5 矩陣微分性質歸納 1.6 標

51單片機獨立按鍵矩陣按鍵控制數碼管

#define clas 4行 ++ 浪費 down 技術分享 sig .com 一,獨立按鍵註意一下幾點 >按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 ) >按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理 下

NETWORK筆記9預設路由浮動路由

預設路由:一種特殊的靜態路由,只有從路由表中找不到任何明確匹配的路由條目時,才會使用預設路由。(當訪問Internet時,一些網路出口只有一個,此時沒有必要配置) 浮動路由:配置一個管理距離更大的靜態路由,作為應急出發的備份路徑,在主路由有效的情況下,浮動路由不會出現在路由表中。 實驗名稱:華為路

ml課程最大熵EM演算法及應用(含程式碼實現)

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。 本文主要介紹最大熵模型與EM演算法相關內容及相關程式碼案例。 關於熵之前的文章中已經學習過,具體可以檢視:ml課程:決策樹、隨機森林、GBDT、XGBoost相關(含程式碼實現),補充一些 基本概念: 資訊量:資訊的度量,即

線性代數(十五)對偶空間矩陣的轉置

0 可能需要預習的知識 線性空間 1 線性標量值函式 (i)設X是域K上的線性空間。L是定義在X上的標量值函式:L : X->K 如果對任意x,y∈X都有:L(x+y)=L(x)+L(y) 對任意x∈X k∈K 都有:L(kx) = kL(x) 則稱L是線性標量值函

AngularJS 路由ng-route ui-router

AngularJS的ng-route模組為控制器和檢視提供了[Deep-Linking]URL。 通俗來講,ng-route模組中的$routeService監測$location.url()的變化,並將它對映到預先定義的控制器。也就是在客戶端進行URL的路由。 下面

51微控制器獨立按鍵矩陣按鍵控制數碼管

一,獨立按鍵注意一下幾點 >按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 ) >按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理 下面這段程式,就是通過一個獨立按鍵連線到p1口,控制靜態數碼管的 一段 進行亮和滅的切換。 #include &l

MIT18.06線性代數課程筆記19矩陣行列式公式代數餘子式

課程簡介 課程筆記 基於 MIT18.06線性代數課程筆記18:矩陣行列式的性質 中三個基礎性質推出的矩陣行列式公式。然後介紹了利用代數餘子式從n維到1維的遞迴計算行列式方法。 1. 2維矩陣的簡單例子 對於二維矩陣 A=[a,bc,d]

吳恩達機器學習筆記59-向量化低秩矩陣分解均值歸一化(Vectorization: Low Rank Matrix Factorization & Mean Normalization)

接受 span amp 14. 實現 新的 mean 情況 rank 一、向量化:低秩矩陣分解     之前我們介紹了協同過濾算法,本節介紹該算法的向量化實現,以及說說有關該算法可以做的其他事情。   舉例:1.當給出一件產品時,你能否找到與之相關的其它產品。2.一位用

《大型網站技術架構核心原理案例分析》-- 讀書筆記 (5) 網購秒殺系統

案例 並發 刷新 隨機 url 對策 -- 技術 動態生成 1. 秒殺活動的技術挑戰及應對策略 1.1 對現有網站業務造成沖擊 秒殺活動具有時間短,並發訪問量大的特點,必然會對現有業務造成沖擊。對策:秒殺系統獨立部署 1.2 高並發下的應用、

筆記mysql 下載安裝

blog utf8 字符 data strong def services -1 個人 1.下載: 官網下載是需要註冊的,或者你已經有了Oracle的賬號. 可以直接百度 mysql 進入官網;或者直接下面的鏈接; 附上鏈接:dev.mysql.com/downloa

TP5學習基礎二目錄結構、URL路由、數據操作

更改 數據 valid nbsp 命名 別名 ret tag ati 一.安裝1.使用git或者composer(composer update)進行實時更新,區別在於git不會清空核心框架目錄而composer會清空。2.使用官網打包好的TP壓縮包(解壓即可用)->

系統架構培訓矩陣,封裝,一個案例教你激發客戶潛藏的需求!

系統架構培訓 封裝 矩陣 高層設計 在現實設計中,通過變化分析可以激發客戶潛藏的需求?下面看一個例子。一個美國某國際電子商務公司的訂單處理系統。假設系統必須能夠處理來自不同的國家(地區)的銷售訂單。最開始要求很簡單:處理美國和加拿大的訂單。系統的需求清單如下:要為加拿大和美國構建一個銷售訂單系

[Other]面試復習筆記線程進程復習

處理機 sse 進程上下文 提高 關系 數據查詢 優點 con 計數器 基本概念1. 進程的基本概念線程(thread)是進程(processes)中某個單一順序的控制流,也被稱為輕量進程(lightweight processes)。進程是表示資源分配的基本單位,又是調

linux命令基礎shell操作符鍵盤通配符

完整 操作 執行 shel 接收 str abc test 括號 通配符 通配符是一類鍵盤字符 。 當查找文件夾時;當不知道真正字符或者不想鍵入完整名字時,常常使用通配符代替一個或多個真正字符。 * 代替0個或多個字符。 ?