1. 程式人生 > >膠囊間的動態路由(Dynamic Routing Between Capsules)翻譯

膠囊間的動態路由(Dynamic Routing Between Capsules)翻譯

本文是對於Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton在2017年發表的論文《Dynamic Routing Between Capsules》的翻譯。

膠囊間的動態路由(Dynamic Routing Between Capsules)

摘要:膠囊(Capsule)是一組神經元,它的啟用向量(activity vector)表示特定的型別實體(如某目標或某目標的部分)的例項化引數。我們用啟用向量的長度來表徵實體存在的概率以及其例項化引數的方向。通過變換矩陣啟用同一水平的膠囊,對更高層的膠囊的例項化引數進行預測。當多個預測相統一的時候,較高層的膠囊被啟用。我們給出一個有鑑別地(discriminatively)訓練,多層膠囊系統在MNIST實現了最優效能,在識別高度重疊的數字時,其效果要明顯好於卷積神經網路。為了達到這樣的結果,我們使用了一個迭代的路由協議機制(routing-by-agreementmechanism):一個低層膠囊希望將其輸出傳送到更高層膠囊,更高層膠囊的預測來自低層膠囊,其啟用向量具有大的標量積。

1 引言

人類視覺用一個精心確定的固定點序列以保證在最高的解析度下,忽略不相關的細節,只處理視覺陣列中的小部分。對於來自固定序列的場景知識和從單一固定多得到的理解了多少,自省(Introspection)是不太好的指導,但是在本篇論文裡,我們將假設一個單一固定給我們的不僅僅是一個單一的確定的物件和其屬性。我們假設我們的多層視覺系統在每個固定上建立了一個解析樹結構,並且我們忽略了這些單一固定的解析樹是如何在多個固定之間協調的問題。

解析樹通常是在動態分配記憶體中構建的。然而,在Hinton等人[2000]之後,我們假設,對於一個單一的固定,一個解析樹是由一個固定的多層神經網路雕刻成的,就像雕刻在岩石上的雕塑一樣。每層將分成許多小的神經元組稱為“膠囊(Capsules)”(Hinton等人[2011]),解析樹的每個節點對應一個啟用膠囊。使用迭代的路由過程,每一個啟用膠囊將在它上面的層中選擇一個膠囊作為父節點(parent)。對於視覺系統的更高層,這個迭代過程將解決將部分分配給整體的問題。

一個啟用膠囊裡的神經元的活動表示呈現在影象中的特定實體的各種屬性。這些屬性可以包括例項化引數的不同型別,如姿勢(位置,大小,方向)、形變、速度、反射率、色調、紋理等等。一個非常特殊的屬性是影象中例項化實體的存在。表示存在的一個明顯的方法是用一個單獨的邏輯單元,他的輸出是實體存在的概率。在本文中,我們探討一種用例項化引數向量的總長度去表示實體的存在,並強制使用向量的方向來表示實體的屬性的有趣的迭代。我們通過應用一個非線性讓向量的方向不變,但是大小改變,從而保證了一個膠囊向量輸出的長度不能超過1。

事實上,一個膠囊體的輸出是一個向量,這使得它可以用一個強大的動態路由機制來確保膠囊的輸出傳送到上一層的父節點。最初,輸出被路由到所有可能的父節點,但是被耦合係數縮減為總數為1。對於每一個可能的父類,膠囊通過將其自身輸出乘以一個權重矩陣來計算一個“預測向量”。如果這個預測向量是一個可能的父類輸出的一個大的標量積,那麼就有一個自上而下的反饋,增加該父類的耦合係數,並減少其他父節點的耦合係數。這增加了膠囊對於父節點的貢獻,從而進一步增加了用父節點輸出和膠囊預測的標量積。這種型別的“路由協議”要比最大池化實現的最原始的路由方式更加有效,它允許一個層中的神經元忽略除了下面一層的區域性池化中最活躍的特徵檢測器外的全部。我們證明了我們的動態路由機制是一個可以用於解釋高度重疊的目標分割的有效方法。

卷積神經網路(CNNs)用於變換學習到的特徵檢測器的副本。這使得它們能夠將影象中的一個位置獲取的好的權重值的知識變換到其他位置。這在影象解釋中是非常有用的。儘管我們正在用向量-輸出膠囊取代CNNs的標量-輸出特徵檢測器,用路由協議取代最大池化,但是我們仍然希望在整個空間中複製知識。為了達到這個目標,我們讓除了膠囊最後一層外的其它層做卷積。和CNNs一樣,我們用更高層的膠囊覆蓋影象的更大區域。然而,不同於最大池化,我們不會丟棄該區域內實體的精確的位置資訊。對於低層膠囊,位置資訊是通過“位置-編碼(place-coded)”膠囊來啟用。當我們提高到更高層,越來越多的位置資訊是一個膠囊的輸出向量實際值分量中的“速度-編碼(rate-coded)”。從位置編碼到速度編碼的轉變,再加上更高層的膠囊表示隨著更高自由度的更加複雜的實體的事實,表明隨著向更高層的提升,膠囊體的維數會增加。

2 如何計算一個膠囊的向量的輸入和輸出

有很多種可能的方法來實現膠囊的一般概念,本文的目的不是探索這整個空間,而是簡單地說明一個相當簡單的實現是有效的,並且可以用動態路由來幫助。

我們用一個膠囊的輸出向量的長度表示膠囊所代表的實體在當前的輸入中存在的概率。因此,我們使用一個非線性的“擠壓(squashing)”函式來確保短向量壓縮到接近於0的長度,且長向量被壓縮到略低於1的長度,我們讓它進行識別學習來好好的利用這個非線性。

                                       (1)

其中是膠囊j的向量輸出,且是其總輸入。

除了膠囊體的第一層外的其他層,一個膠囊的總輸入是來自於低一層的膠囊所有“預測向量”的一個加權總和,且是通過用一個權重矩陣乘以一個低一層的膠囊的輸出

                (2)

其中是由迭代動態路由過程決定的耦合係數。膠囊i和高一層的所有膠囊間的耦合係數總和為1,並且是由“路由softmax”決定,該“路由softmax”初始邏輯是對數先驗概率(log prior probabilities),即膠囊i應該與膠囊j耦合

                                         (3)

同一時間的對數先驗可以作為所有其他權重來進行有區別地學習。它們取決於兩個膠囊的位置和型別,而不是取決於當前的輸入影象。然後,初始耦合係數通過測量更高一層中每個膠囊j的當前輸出和膠囊i的預測間的一致性(agreement)來重複細化(refined)。

一致性僅僅是標量積。這種一致性被認為是一個對數似然比,並在對連線膠囊i和更高層膠囊的所有耦合係數計算新值之前,這種一致性被新增到初始邏輯

在卷積膠囊層中,每個膠囊對高一層中的膠囊的每種型別輸出一個向量的區域性網格,並對於網格的每一部分和膠囊的每種型別使用不同的變換矩陣。


3 數字存在的邊緣損失

我們使用例項化向量的長度來表示一個膠囊的實體存在的可能性。當且僅當影象中有數字時,我們想要得到數字類k的頂層的膠囊來獲取一個長的例項化向量。為了允許多個數字,我們對每個數字膠囊k使用一個單獨的邊緣損失

                    (4)

其中,對於一個類k的數字表示為。對於缺少數字的類別的損失的向下加權從縮減所有數字膠囊體的活動向量的長度停止了初始的學習。我們用。總的損失簡單的認為是所有數字膠囊的損失的總和。

4 CapsNet架構

一個簡單的CapsNet架構如圖1所示。架構可以簡單的表示為僅有兩個卷積層和一個全連線層組成。Conv1有256個9×9個卷積核,步長為1和ReLU啟用。該層將畫素的強度/亮度(intensities)轉換為之後會用於作為基本膠囊primary capsules)輸入的區域性特徵探測器的啟用。

圖1一個簡單的三層CapsNet。這個模型給了深度卷積網路可比較的結果(如Changand Chen [2015]),DigitCaps層中的每個膠囊的啟用向量的長度表示每個類的例項的呈現,並且是用於計算分類損失。是PrimaryCapsule中每個間的一個權重矩陣,且

 

基本膠囊是多維實體的最低層,並且來自於一個相反的圖形視角,啟用初始膠囊體對應於反向表現過程。這是一個非常不同的計算方式,不是膠囊被設計用來擅長做的事情,將例項化的部件組合在一起以形成熟悉的整體。

第二層(PrimaryCapsules)是一個卷積的膠囊層,卷積的8維膠囊的32個通道(即每個基本膠囊包含8卷積單元,用一個9×9的核和一個2的步長)。每個初始膠囊的輸出看作是所有256×81Conv1單元,這些單元可以容納與膠囊的中心位置重疊的區域。總的PrimaryCapsules有[32×6×6]膠囊輸出(每個輸出都是8維向量),每個膠囊都在[6×6]的網格中互相共享權重。PrimaryCapsules作為卷積層用公式1表示,作為其的塊非線性。最終層(DigitCaps)有每個數字類是一個16維,這些膠囊的每一個都是從低一層的所有膠囊中接收到輸入。

我們僅僅有兩個連續的膠囊層之間的路由(即PrimaryCapsules和DigitCaps)。由於Conv1的輸出是1維,在它的空間裡沒有任何方向可以達成一致。因此,用於Conv1和PrimaryCapsules之間。所有的路由模型()初始化為到0。因此,最初的一個膠囊輸出()是傳送到所有有相等的概率()父膠囊體()。我們是在TensorFlow(Abadiet al. [2016])進行實驗,並且我們使用有著TensorFlow預設引數的Adam優化器(Kingmaand Ba [2014]),包括指數衰減的學習率,去最小化方程4中的邊緣損失的總和。

4.1 一種正則化方法——重建

我們使用額外的重建損失來鼓勵數字膠囊去編碼輸入數字的例項化引數。在訓練過程中,我們將除了正確數字膠囊的啟用向量外的所有啟用向量都遮蔽掉。然後,我們用這個啟用向量重建輸入影象。數字膠囊的輸出被送入一個由3個全連線層組成的解碼器,模擬畫素強度如圖2所示。我們最小化邏輯單元和畫素強度輸出間的平方差異的總和。我們用0.0005縮小重建損失,以至於它在訓練中不是邊緣損失的主要部分。如圖3所示,來自CapsNet的16維重建是穩定的,但是隻保留了重要細節。

圖2.重建一個來自DigitCaps層表示的數字的解碼結構。影象間的歐式距離和Sigmoid層的輸出在訓練中最小化。我們用正確的標籤在訓練中作為重建目標。


圖3.用一個有3個路由迭代的CapsNet重建樣本MNIST測試。分別表示標籤、預測和重建目標。最右邊的兩列表示兩個錯誤重建的例子,它解釋了該模型如何混淆了這個影象中的5和3。其他的列是正確的分類,並顯示模型在平滑噪聲的同時保留了許多細節。


5 MNIST上的Capsules

在28×28的MNIST(LeCun等人[1998])影象上的訓練效能表明用填充0在每個方向上提升2個畫素。沒有其他資料增加/變形使用。資料集有6萬張圖片用來訓練,1萬張圖片用來測試。

我們用一個沒有任何模型平均的單一模型。Wan等人[2013]用旋轉和縮放在全部和擴充的資料集上實現了0.21%的測試錯誤率,在沒有旋轉和縮放時的測試錯誤率是是0.39%。我們在一個先前的3層網路上實現了一個更低的錯誤率(0.25%),並且只通過加深網路來實現。表1列出了在MNIST上對於不同的CapsNet步驟的測試錯誤率,並表明了路由和重建正則化矩陣的重要性。通過在膠囊向量中強制構成編碼來增加重建正則化矩陣,從而提高了路由效能。

表1. CapsNet分類測試精確度。從三組實驗中得到MNIST平均值和標準偏差結果。


基線是一個分別有256、256、128通道的三個卷積層的標準CNN。每個的核為5x5,步長為1。最後一個卷積層後有兩個大小為328、192的全連線層。最後一個全連線層用交叉熵損失連線著dropout和一個10類的softmax層。基線也被用Adam優化器在2畫素轉移MNIST上進行訓練。基線的設計是為了在MNIST上取得最好的效能,同時保持計算成本接近CapsNet。在引數的數量上,基線有3540萬,而CapsNet有820萬,在沒有重建子網路時是680萬。

5.1一個膠囊的每個維度表示什麼

由於我們將其他數字歸零,只傳遞一個數字的編碼,一個數字膠囊的維數應該學會用例項化的類的數字的方式跨越變化的空間。這些變化包括行程厚度(strokethickness)、傾斜(skew)和寬度(width)。它們還包括數字-特性變化(digit-specificvariations),如一個為2的尾巴長度。通過使用解碼網路,我們可以看到每個維度表示的是什麼。在計算正確的數字膠囊體的啟用向量後,我們可以反饋這個啟用向量的一個受擾動的版本到解碼網路,並且看看擾動是如何影響重建的。這些擾動的例子如圖4所示。我們發現,膠囊的一維(超過16)幾乎總是表示數字的寬度。雖然有些維度表示全域性變數的組合,但是也有其它維度表示數字的一個區域性。例如,用不同的維數提升一個6的長度和迴圈的大小。

圖4. 維數擾動。每一行顯示了當在DigitCaps表示中的16維中的一個是在範圍[-0.25,0.25]間以間隔為0.05的扭曲。

5.2 仿射變換的魯棒性(robustness)

實驗結果表明,對於每個類別,每一個DigitCaps膠囊比一個傳統的卷積網路學習到一個更加魯棒的表示。因為在手寫數字中,在傾斜、旋轉、字型等等上有自然地變化,訓練的CapsNet對於訓練資料小的仿射變換是適當的魯棒的。

為了測試CapsNet對於仿射變換的魯棒性,我們訓練了一個CapsNet和一個傳統的卷積網路在填補(padded)上(有MaxPooling和DropOut),變換MNIST訓練集,其中每一個例子都是一個隨機放置在40×40畫素的黑色背景上的MNIST數字。然後,在affNIST資料集上測試這個網路,其中每個樣本是一個有著一個隨機小仿射變換MNIST數字。除了在標準MNIST中可以看到的平移和一些自然變換,我們的模型從來沒有用仿射變換訓練過。一個提早停止的訓練不夠的(under-trained)CapsNet,在MNIST測試集實現了99.23%的精確度,在affnist測試集上實現了79%的精確度。一個有著相似的引數數量的傳統卷積模型,在擴充的MNIST測試集實現了相似的精確度(99.22%),但是在affnist測試集上僅僅實現了66%的精確度。

6高度分割重疊數字

動態路由可以被看作是一種並行的注意機制,它允許在同一層的每個膠囊去關注低一層上的一些啟用膠囊並忽略其他的膠囊。這應該允許模型去識別影象中多目標,即使這些目標重疊(Hinton等人[2000]),還有其他人在類似的領域內測試了他們的網路(Goodfellow等人[2013]、Ba等人[2014]、Greff等人[2016])。路由協議應該讓它儘可能的用一個關於物件形狀的先驗幫助分割,且它應該避免在畫素領域做出更高層分割決策的需求。

6.1 MutiMNIST資料集

我們通過用相同資料集(訓練或測試)但不同的類中的數字,將一個數字重疊在另一個數字上產生了MutiMNIST訓練和測試資料集。每個數字在一個36x36的影象上產生每個方向上移4畫素。考慮一個在28×28影象中的數字是在一個20×20的盒子為邊界,兩個數字邊界的盒子平均有80%的重疊。對於MNIST資料集中的每一個數字,我們產生了1000個MultiMNIST樣本。所以訓練集的大小是6000萬,測試集大小是1000萬。

6.2 MultiMNIST結果

我們的3層CapsNet模型從亂寫的MultiMNIST訓練資料上訓練,比我們的基線卷積模型實現了更高的測試分類精確度。在高度重疊的數字對上,我們和Ba等人實現了同為5.0%的分類錯誤率,而Ba等人[2014]連續的注意模型(sequentialattention model)實現了一個更加簡單的任務,即不重疊的任務(我們的情況是兩個數字的盒子的80%的重疊,而Ba等人[2014]等人<4%)。在測試影象熵,測試集中的一對影象所組成的那些影象,我們將兩個最活躍的數字膠囊最為膠囊網路產生的分類。在重建過程中,我們一次選擇一個數字,使用選定的蘇子膠囊的啟用向量來重建選定的數字影象(由於我們用它來產生了一個合成影象,所以我們知道這個影象)。我們MNIST模型的唯一不同是我們將學習速率的衰減階段增大了10倍,因為我們的訓練集更大。

重建過程如圖5所示,CapsNet能夠將影象分割為兩個原始的數字。由於這個分割不是畫素級的,當計算所有畫素時,我們觀察到模型能夠正確的處理重疊部分(一個畫素出現在兩個數字上)。每個數字的位置和字型都在DigitCaps中進行編碼。解碼器已經學會根據編碼重新構造一個數字。事實上,它能夠不管重疊部分來重建數字,這表明每個數字膠囊可以從PrimaryCapsules層接收到字型和位置。

圖5.3個路由的一個CapsNet的樣本重構在MultiMNIST測試資料集上迭代。兩個重構的數字分別覆蓋上綠色和紅色,紅色為更低一層的影象。上面一行的影象是輸入影象。表示影象中兩個數字的標籤,表示重建後的兩個數字。最右邊的兩列顯示來自標籤和來自預測(P)重建,錯誤分類的兩個樣本。在(2,8)這個例子中,模型將8和7混淆,在(4,9)中,9和0混淆。其它列都是正確的分類,並顯示了在極其困難的場景中(1-4列),分配一個畫素給兩個數字時模型描述了所有畫素。注意,在資料集產生中,畫素值被裁減為1。兩列用(*)標記的表示的是來自於用標籤或者預測的數字的重建。這些列表明,模型不僅僅是找到對於影象中的所有數字最適合的,包括那些不存在的數字。因此,在(5,0)的情況下,它不能重建一個7,因為它知道這裡有一個5和0最合適,可以解釋所有畫素。在(8,1)的情況下,8的迴圈不能觸發0,因為它已經用8解釋。因此,如果它們中的一個沒有任何其他支援,它將不會將一個畫素分配給兩個數字。


表1強調在任務上路由膠囊的重要性。作為一個CapsNet分類精確度的基線,我們訓練一個兩個卷積層卷積網路,其上有兩個全連線層。第一層有大小為9×9、步長為1的512個卷積核。第二層有大小為5×5、步長為1的256個卷積核。每一個卷積層後,模型有一個尺寸為2×2和步長為2的池化層。第三層是一個1024維的全連線層。所有的這三層都有非線性的ReLU。10個單元組成的最後一層全連線的。我們使用TensorFlow預設Adam優化器(Kingma和Ba[2014])在最後一層的輸出上訓練一個sigmoid交叉熵損失。該模型有2456萬引數,是CapsNet的1136萬引數的兩倍。我們用一個更小的CNN(大小為5×5和步長為1的32和64卷積核和一個512維全卷積層)來開始,遞增的增加網路的寬度,直到我們在一個MultiMNIST資料的子資料集1萬張影象上達到最好的測試精確度。我們也在1萬的驗證集上搜索正確的衰減步驟。

我們同時解碼兩個最活躍的DigitCaps膠囊,並得到兩個影象。然後,通過對每個數字用非零強度分配任意畫素,我們得到每個數字的分割結果。

7 其他資料集

我們在CIFAR10上測試我們的膠囊模型,並在7個模型的全體上實現10.6%錯誤率,每個模型用3個路由進行訓練在影象的24×24的塊上迭代。每一個模型有相同的結構,作為我們在MNIST上使用的簡單模型,除了有三個彩色通道,我們使用初始膠囊的64種不同型別。我們也發現它對路由softmax幫助引入一個“以上都不是”類別,因為我們沒有期望十層膠囊的最後一層去解釋影象中的一切事物。10.6%的測試錯誤率是關於當他們第一次應用於CIFAR10(Zeiler和Fergus[2013])時,是用什麼標準卷積網路實現的。

與生成模型共享的膠囊的一個缺點是,它喜歡解釋影象中的每一個東西,所以在動態路由中,當它可以模擬混亂時比當它僅僅用於一個附加的“孤兒(orphan)”類別時更好。在CIFAR-10中,對於一個可以幫助解釋較差效能的在合理的大小的網路中的模型,背景的差異太大。

我們也測試了與我們在smallNOPB(LeCun等人[2004])上對MNIST使用的完全相同的架構,並實現了2.7%的測試錯誤率,這與最優(Ciresan等人[2011])的結果是相當的。

我們也在SVHN(Netzer等人[2011])的僅有73257張影象的小訓練集上訓練了一個更小的網路。我們減少第一層卷積層的通道數至64,初始膠囊層到16,結束層有著8維最終膠囊層的6維-膠囊,在測試集實現了4.3%。

8 討論和以前的工作

三十年來,在語音識別中最先進的方法是使用將高斯混合作為輸出分佈的隱馬爾可夫模型。這些模型很容易在小型計算機上學習,但它們具有表示的限制,這最終是致命的:他們使用其中的一種表示與使用分散式表示法的遞迴神經網路相比,是指數效率低下的。要使一個HMM能夠記住它所生成的字串的資訊量增加一倍,我們需要將隱層節點的數量平方。對於遞迴網路,我們只需要將隱層神經元的數量增加一倍。

既然卷積神經網路已經成為了目標識別的主要方法,詢問是存在指數效率低導致他們終止的問題是有意義的。一個好的候選概括新觀點的卷積網路的好的候選者是困難的。建立處理轉化的能力,但是對於仿射變換的其它維度,我們得在一個隨 維數增長而指數增長的網格內複製的特徵檢測器間選擇,或者用一個相似的指數方法增加標記訓練集的大小。膠囊(Hinton等人[2011])通過將畫素強度轉換為識別片段的例項化引數,然後將變換矩陣用於片段來預測更大片段的例項化引數,從而避免指數低效。學習編碼一個部分和一個整體間的內在空間關係的變換矩陣構成了自動泛化到新觀點的觀點不變知識。Hinton等人[2011]提出將自動編碼器轉換為產生PrimaryCapsule層的例項化引數,他們的系統要求在外部提供變換矩陣。我們提出了一個完整的系統,它也可以回答“用啟用的、較底層的膠囊預測姿勢的協議可以識別多麼更大、更復雜的視覺實體”。

膠囊有一個很強的表示假設:在影象的每一個位置,之多有一個膠囊表示的實體型別的例項。這個假設是被一種稱為“擁擠”的感知現象激勵得到的,它消除了繫結問題(Hinton[1981a]),並允許膠囊使用分散式表示(它的啟用向量)對一個給定位置的該型別實體的例項化引數進行編碼。這種分散式表示比用啟用一個高維網格上一點的編碼例項化引數的效率要高得多,並且用正確的分散式表示,之後膠囊可以充分利用矩陣乘法建模空間關係的事實。

膠囊使用隨著觀點變化而變化的神經啟用,而不是從啟用中消除觀點變化。這使得他們比“歸一化”方法,如空間變壓器網路(spatial transformer networks)(Jaderberg等人[205])更有優勢:他們可以同時處理不同目標和目標部分的多個不同的仿射變換。

膠囊也非常善於處理分割,這是視覺領域的另一個最困難的問題,因為例項化引數的向量允許他們使用路由協議,正如我們在文中說明的那樣。動態路由過程的重要性也得到了視覺皮層不變模式識別的生物學模型的支援。Hinton[1981b]提出動態連線和基於用於目標識別所產生的形狀描述的參考框架的標準識別。Olshausen等人[1993]改進了Hinton[1981b]動態連線,並給出一個有生物學意義、位置和尺度不變的目標表示的模型。

對膠囊的研究目前正處於一個和本世紀初用於語音識別的遞迴神經網路的研究相似的階段。有基礎的代表的原因讓我們相信他是一個更好的方法,但是在它超越高度發達的技術之前,它可能需要更多的小思考。事實上,一個簡單的膠囊系統已經在分割重疊數字上提供了無與倫比的效能,這是一個早期跡象,表明膠囊是一個值得探索的方向。

A 使用了多少路由迭代?

為了實驗驗證路由演算法的收斂性,我們在每個路由迭代中繪製出路由邏輯的平均變化。圖A.1顯示每次路由迭代後平均的變化。從實驗上我們觀察到,從訓練開始到5次迭代時,路由的變化可以忽略不計。路由第2次的平均變化在經過500個階段的訓練為0.007後穩定,而在路由迭代5的過程中,其模型平均變化僅為1e-5。

圖A.1:每一次路由迭代的每次路由模型()的平均變化。在對MNIST進行了500個週期的訓練後,平均變化趨於穩定,如圖所示,隨著更多的路由迭代,其對數尺度的變化幾乎是線性的。

(a)訓練過程中                                                                                                               (b)最終差異的對數指數


我們觀察到,一般來說,更多的路由迭代增加了網路容量,並傾向於過度適應訓練資料集。圖A.2展示了在Cifar10上當訓練1次迭代的路由和3次迭代的路由膠囊訓練損失的比較。由圖A.2和圖A.1的分析,我們建議對所有實驗進行3次迭代。

圖A.2:在cifar10資料集上的CapsuleNet的損失。每個訓練步驟的批處理大小為128。具有3次路由迭代的CapsuleNet,能更快地優化損失,最終收斂到更低的損失。


相關推薦

膠囊動態路由Dynamic Routing Between Capsules翻譯

本文是對於Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton在2017年發表的論文《Dynamic Routing Between Capsules》的翻譯。 膠囊間的動態路由(Dynamic Routing Between C

學習筆記《Dynamic Routing Between Capsules》-膠囊”網路之區域性空間關係

喜歡才能持久,熱愛才會盡心! 0 前言 昨天的面試官講了利用自動駕駛鐳射雷達資料探測路上行人、車輛問題的區域性空間關係的見解,提到了Vector向量多方位,多角度問題,我感覺和Capsule裡的Ve

Hinton膠囊網路論文《Dynamic Routing between Capsules》的程式碼正式開源

執行測試驗證設定是否正確,例如: python layers_test.py 快速MNIST測試結果: 從以下網址下載並提取MNIST記錄到 $DATA_DIR/:https://s

Paper review: Dynamic Routing Between Capsules

基本資訊 Dynamic Routing Between Capsules 文章題目:膠囊間的動態路由 作者: Sara Sabour, Nicholas Frosst, Geoffrey E. Hindon,其中Sara Sabour和Nicholas Frosst為Geoffrey

Boost.Interprocess使用手冊翻譯之四:在程序共享記憶體 Sharing memory between processes

共享記憶體 共享記憶體是最快速的程序間通訊機制。作業系統在幾個程序的地址空間上對映一段記憶體,然後這幾個程序可以在不需要呼叫作業系統函式的情況下在那段記憶體上進行讀/寫操作。但是,在程序讀寫共享記憶體時,我們需要一些同步機制。 考慮一下服務端程序使用網路機制在同一臺

第6章 靜態路由動態路由1_靜態路由

align 將在 跟蹤 添加 測試 字母 ppp協議 必須 缺少 1. 路由——網絡層實現的功能 1.1 路由功能 (1)網絡層的功能:給傳輸層協議提供簡單靈活的、無連接的、盡最大努力交付的數據包服務。 (2)路由器為每一個數據包單獨地選擇轉發路徑,網絡層並不提供服務質量的

動態規劃dynamic programming

program 選擇 因此 移動 開始 解決 特征 尋找 ima 1、動態規劃是通過組合字問題的解而解決整個問題的。 2、它與分治法的區別:     分治法是將問題分解為一些獨立的子問題,遞歸的求解各個子問題,然後合並子問題的解而得到源問題的解。     而動態規劃適合用於

動態規劃dynamic programming二、最優子問題與重疊子問題,以及與貪心的區別

貪心策略 找到 算法 找問題 貪心 模式 解決 策略 最優 一、動態規劃基礎   雖然我們在(一)中討論過動態規劃的裝配線問題,但是究竟什麽時候使用動態規劃?那麽我們就要清楚動態規劃方法的最優化問題中的兩個要素:最優子結構和重疊子問題。   1、最優子結構     1)如果

第6章 靜態路由動態路由4_OSPF動態路由協議

6. OSPF動態路由協議 6.1 OSPF協議(Open Shortest Path First,OSPF開放式最短路徑優先協議) (1)通過路由器之間通告鏈路的狀態來建立鏈路狀態資料庫,網路中所有的路由器具有相同的鏈路狀態資料庫,通過該資料庫構建出網路拓撲。 (2)執行OSPF協議的

【PHP學習筆記】Laravel動態路由自動路由

動態路由有利有弊, 利 方便,可不用配置路由 。。。。。。好像沒了 弊 寫了很多controller,不太方便檢視到底有多少對外暴露的介面。 不方便對不同介面設定不同規則 不方便自定義請求方式等 。。。。以及很多不方便的弊端

spring cloud zuul 實現動態路由可以收藏儲存

spring cloud zuul(實現動態路由) 路由 分為靜態路由和動態路由 下面介紹下動態的路由的實現方式:(一共2中,bus和快取的方式,下面採用的是資料庫的方式demo) pom 引入路由jar <dependency> <

C++Primer第五版 習題答案 第十二章 動態記憶體Dynamic Memory

12.1 b1包含4個元素; b2被銷燬。 12.2 strblob.h #ifndef STRBLOB_H_ #define STRBLOB_H_ #include <string> #include <initializer_list&g

動態程式設計Dynamic Programming

本文素材來自視訊,請自備梯子觀看:What Is Dynamic Programming and How To Use It Dynamic Programming:動態程式設計分為如下幾步: 將複雜問題拆分成多個較簡單的子問題 對每個子問題只計算一次,然後使用資料結構(陣列,字典等)

Android Firebase接入--Firebase 動態連結Dynamic Links

動態連結簡介生成一個根據不同的場景響應不同行為的連結。比如:你想要為app新增一個房間內邀請好友的功能,如果好友也安裝了此app,點選分享連結就進入此房間,如果好友沒有安裝此app,那就跳轉到Google Play下載頁面(或者你自定義的任何頁面),如果好友沒有安裝此app,

Windows Server2012 故障轉移叢集之動態仲裁Dynamic Quorum

本篇文章主要介紹Windows2012的故障轉移叢集一個新功能“動態仲裁”,預設該功能是開啟的; 動態仲裁能在當前群集投票出現分歧的情況下取消某些節點的投票許可權,比如偶數個節點的群集環境。仲裁見證和動態仲裁有點相似也可以解決群集投票分歧的問題,但是它不能取消節點的投票權,它能保持群集的投票個數保持奇數個數。

Python技巧:元類Metaclasses和利用Type構建的動態Dynamic Classes

`metaclass`和`type`關鍵字在Python程式碼中較少被使用(也正因如此,它們的作用也沒有很好的被理解)。在這篇文章中,我們將探究`type()`的型別(types)和跟`metaclasses`相關的`type`的用法。 這是我的型別麼?首先來看`ty

動態規劃Dynamic Programming的理解:從窮舉開始

int solve_by_brute_force(vector<int> &v, int cur, int limit, int sofar, int sum) { if (cur == limit) { // the border of recursion in

《Oracle PL/SQL開發指南》學習筆記27——動態SQLDynamic SQL章節回顧、測試

動態SQL語句是一種強大的技術,通過它可以在程式執行時寫和執行查詢,修改DDL和DML語句。 本地動態SQL(Native Dynamic SQL (NDS)) Review Section This section has described the following

.NET 資料型別之動態型別Dynamic

     在大多數情況下,dynamic 型別與 object 型別的行為是一樣的。 但是,不會用編譯器對包含 dynamic 型別表示式的操作進行解析或型別檢查。 編譯器將有關該操作資訊打包在一起,並且該資訊以後用於計算執行時操作。 在此過程中,型別 dynamic 的變數會編譯到型別 object 的變數

vue.js實現數據動態響應Vue.set的應用

屬性 點擊 屬性。 沒有 log utf-8 創建 http for 在vue裏面,我們操作最多的就是各種數據,在jquery裏面,我們習慣通過下標定向找到數據,然後重新賦值 比如var a[0]=111;(希望上家公司原諒菜鳥的我寫了不少這樣的代碼??) 下面上代碼