1. 程式人生 > >CapsNet日益火爆!Hinton大神橫掃AI界的「膠囊網路」如何理解?

CapsNet日益火爆!Hinton大神橫掃AI界的「膠囊網路」如何理解?

0?wx_fmt=gif&wxfrom=5&wx_lazy=1&retryload=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

來源:雷克世界

編譯:嗯~阿童木呀

概要:Geoff Hinton等人最近關於膠囊網路(Capsule networks)的論文在機器學習領域造成相當震撼的影響。

0?wx_fmt=jpeg

Geoff Hinton等人最近關於膠囊網路(Capsule networks)的論文在機器學習領域造成相當震撼的影響。它提出了理論上能更好地替代卷積神經網路的方案,是當前計算機視覺領域的最新技術。

0?wx_fmt=png

首先,我想談談神經網路那些令人困惑的術語。機器學習中的許多想法來源於符號數字化的認知概念。為了演示,我們以神經元為例。在物質世界中,這是一組細胞,以訊號作為輸入,併發出一些訊號作為輸出,只要它足夠興奮。雖然這是一個簡單直白的解釋,但這最終是對“神經網路”機器學習概念的充分體現。在這裡,神經元是一個數學單位,它接受一個輸入,並使用一系列函式給出輸入的輸出。我們學習權重來確定在訓練階段哪個特定的輸入可能比使用反向傳播的輸入更重要。我們可以堆疊這些神經元,使得一層神經元的輸出成為另一層神經元的輸入。所有型別的神經元都取自從這個基本概念,包括遞迴神經網路和卷積神經網路。

現在讓我們來描述膠囊的概念。像基本的神經元一樣,它們也代表了一個認知思想的符號數字化。大腦的高層做了更多的演繹、理解和高層次特徵的計算,大腦的特定部分在他們處理的領域或主題上有明確的含義。我們並不是將所有維度的資料都放在整個大腦中,而是“餵食(feed in)”較低級別的特徵,以供大腦的高層部分處理,從而將認知負荷從較高級別的處理中移除。如果較低級別的功能與大腦某些較高級別的部分不相關,則不應將其傳送到那裡。它的訊號至少應該有所減弱。

這些膠囊被設想為用以處理識別姿勢的問題。就是說,當一個模型原先是被訓練來對一隻狗進行識別時,但卻變得依賴於視野內該狗所在的方向。如果將這隻狗轉個方向,並試圖從不同的角度對其拍照,那麼該模型在對狗進行識別時可能會遇到麻煩。為了解決這一問題,膠囊試圖通過讓“符號數學大腦(symbolic mathematical brain)”(即網路)的更高級別部分來處理複雜特徵的識別和姿勢認證,而較低級別部分用來處理“子”特徵。一個較高級別的膠囊可以識別出一張臉部特徵,而這是基於較低級別的膠囊是以一個相一致的方向來對嘴巴和鼻子進行識別的。

卷積神經網路目前並不是這樣做的,相反,他它們依靠的是大量的資料,其中將該目標可能擁有的所有姿勢都包含在內,當然,它們也具有其他的缺點。

對於初學者來說,這是一個上下文的問題。資訊有時需要在上下文中才能有效。Geoff Hinton自己遇到過這樣一個示例:一個四面體被切成兩半之後,即使是麻省理工學院的教授也很難將其恢復成原形。其實,很難確切地去弄明白這是為什麼,但它似乎與我們的參考框架有關:我們選擇檢視目標的方式可以決定我們對其進行操作和識別的方式。而膠囊網路可以潛在地通過將該資訊嵌入特定膠囊中來解決這個問題,而該特定膠囊對所涉及的上下文進行學習,然後將該資訊饋送到網路的更高部分。

其次,卷積神經網路通過池化的方式將多個特徵檢測器合併在一起。前層神經網路作為特徵饋入到後層中。人們認為,這些早期網路充當的是特徵檢測器,因為早期網路識別的是非常基本的特徵,而後續網路可以識別耳朵、眼睛等器官特徵。通過將它們池化在一起,可以解決方差問題,即就模型而言,圖片中左手邊的耳朵可能與右手邊的耳朵不是一樣的。

儘管如此,池化的結果也是非常不穩定的,它使得資訊分佈在許多個而不是少數幾個神經元中。因此,每個神經元必須更努力地執行。如果我們能夠對神經元進行特定化以便處理特定的識別,那結果將會好很多。我們可以有一個專門用來尋找鼻子的膠囊,一個專門用來尋找嘴巴的膠囊。這樣的話,這些膠囊可以很好地對那些非常特殊的目標進行識別,因為就整個網路而言,它們沒有別的事情要做。

與之相關的是Geoff Hinton教授的理想目標,即擁有一個目標可以轉化到其中的更高的空間域。每次,不管方向如何,在這個更高的域空間內目標都被轉換成了相同的剛性形狀。達到該目標的一種方法是使用特定的膠囊以幫助將目標轉化到更高的域空間中。

為了建立一個膠囊網路,我們可以從1980年代的發明——霍夫變換(Hough Transforms)中獲得靈感。其應用的基本思想是有一個兩部分的結構,我將其稱之為斑點(speck)。一般的speck預測座標系為X的概率,另一半預測姿勢。然後將這些child_speck_s饋送到父speck中。如果獲得這些child_speck_s的足夠多的同意後,那麼父speck就會給出座標系為Y的概率,這是一個比X更復雜的目標。例如,child_speck_s可以預測嘴巴、鼻子和眼睛及其所處的方向,然後將其饋送到能夠預測到臉部及其姿勢的父speck中。

現在,讓我們用膠囊代替那些神經元。較低級別的膠囊通過識別該目標的較簡單的子部分來做一個該目標可能是什麼的“弱賭注”,然後一個更高級別的膠囊會採取這些低級別的賭注,並試圖看看它們是否同意。如果它們中有足夠多的同意,那麼這個目標就是Y,這可能是非常巧合。而這就是這些膠囊網路執行方式的本質。

而問題在於:我們該如何路由這些較低級別的膠囊,以便將它們送到正確的、更高級別膠囊中?

這就是前些天Hinton等人又推出的創新性研究。(該論文於10月26日上傳,11月7日又做了更新)

那麼這個路由演算法的執行原理是什麼呢?為了搞明白這一點,我們需要定義一些關鍵的想法。為了簡化,我們將假設一個兩層的膠囊網路。將原始特徵饋送到層LA中,並將來自層LA的輸出饋送到層LB中,其中兩個層都是由膠囊組成的。

首先,我們對來自層LA並會輸入到層LB的稱之為u的輸出矩陣進行加權,然後這些權重將被儲存為一個向量W,將這兩者相乘將得到u。

然後,路由演算法決定一個稱為耦合係數c的附加引數,這個係數將減少傳送到不正確的膠囊的資訊,這可以通過適當減少它們的權重實現。我們還通過使用特定函式來“壓縮(squash)”整個輸入,這將確保低幅值向量被壓縮到幾乎為零,而高幅值向量將得到一個只略小於1的長度。這是因為本文中的動態路由演算法使用向量的幅度來表示目標在正確輸入中出現的概率。因此,這些輸入向量不必太過於專注幅度。

我將在這裡簡單描述路由演算法。你可以在論文中看到更為具體的確切形式。需要記住的是,他們提到這個只是一種可以實現路由演算法的方法,所以隨著時間的推移,可能會有更多的猜測出現。

作為背景,b用來表示對數先驗概率,並且耦合因子c被確定為b的softmax函式。

對於層LA和層LB層中的每個膠囊,我們將先驗b設定為0。然後,對於r迭代,我們遍歷每個膠囊並將耦合因子c設定為b的softmax函式。我們通過將c與u相乘來計算s。產生的結果值將被稱為s。進入層LB的每一個輸入都用適當的函式進行“壓縮”以得到v。然後對每個膠囊,我們通過將u和v的值加到b中以對其進行調整。

下面是一個更為精確、學術更為友好的演算法顯示:

# Dynamic Routing Algorithm

for all capsules _i_ in layer A and capsules _j_ in layer B, set _b_

to 0

for _r_ iterations:

for all capsules i in layer A: _c_ is the softmax of _b_

for all capsules j in layer B: _s_ is the multiplication of _c_ &

_u_

for all capsules j in layer B: _v_ is the squashed input of _s_

fir all capsules i in layer A and capsules j in layer B: _b_ is

set to _b_ + _u_ * _v_

這篇論文包含的內容還有很多,我可能會在接下來的文章中闡述更多,主要是有關在MNIST資料集上的效能以及使用稱為CapsNet的卷積神經網路進行的特定實現。

使用Keras實現CapsNet:https://github.com/XifengGuo/CapsNet-Keras

AI先鋒

ID:EnlightAI

關注人工智慧行業發展,介紹人工智慧技術與產品