Capsule Networks/zh
| Article | |
|---|---|
| Topic area | Deep Learning |
| Prerequisites | Convolutional Neural Network, Backpropagation |
概述
膠囊網絡(CapsNet)是一種神經網絡架構,其中稱為膠囊的神經元組共同編碼視覺實體的實例化參數,而不是發出單一的標量激活。每個膠囊輸出一個向量(或矩陣),其長度表示實體存在的概率,其方向表示姿態、形變、顏色或紋理等屬性。膠囊通過動態路由機制跨層連接,該機製取代了傳統卷積網絡中的標量加權,使高層膠囊能夠選擇性地傾聽其預測一致的低層膠囊。
膠囊網絡由 Sabour、Frosst 和 Hinton 於 2017 年提出,旨在應對卷積架構所被認知的局限:它們依賴最大池化來實現平移不變性,而這會丟棄精確的空間關係,並且容易混淆經過旋轉、鏡像或其他變換的物體。通過強制每個膠囊建模顯式的姿態,膠囊網絡旨在對視角變化具有等變性,而不僅僅是不變性,從而恢復池化層所丟棄的部分結構。
儘管膠囊網絡在生產系統中仍屬小眾架構,但它們影響了關於部分-整體層次結構、等變表示以及基於路由的注意力的研究。後續變體——EM路由、自路由、堆疊膠囊自編碼器和 GLOM——探索了替代的路由規則和訓練目標。
動機與直覺
標準卷積層通過在每個空間位置計算標量激活來檢測特徵,然後通過池化對其進行聚合。池化以換取平移容忍度為代價丟棄了特徵的精確位置。Hinton 長期以來主張這是一種浪費:大腦幾乎肯定保留了姿態信息,並依賴各部分姿態之間的一致性來識別整體,這一思想有時被概括為"等變性,而非不變性"。
膠囊試圖將實體與其姿態一併編碼。如果一張臉是整體,而眼睛、鼻子和嘴巴是部分,那麼每個部分膠囊都可以預測臉部膠囊應該位於何處——例如,給定典型的面部幾何結構,眼睛的位置可以預測臉部的位置。當多個部分膠囊預測出相同的臉部姿態時,網絡就有強有力的證據表明存在一張臉。相反,部分預測之間的分歧則表明要麼發生了誤檢,要麼這是一種非面部的特徵排列。這種重合檢測是膠囊路由背後的運作原理。
膠囊表示
主膠囊通常源自一個卷積,其輸出通道被重塑為向量。對於由 $ i $ 索引的膠囊層,每個膠囊產生一個輸出向量 $ u_i \in \mathbb{R}^{d_i} $。其長度 $ \|u_i\| $ 通過一種稱為squash 函數的非線性函數被約束在 $ [0, 1) $ 內:
$ {\displaystyle v = \frac{\|s\|^2}{1 + \|s\|^2}\, \frac{s}{\|s\|}} $
其中 $ s $ 是激活前的輸入向量,$ v $ 是經過 squash 處理後的輸出。短向量被推向零;長向量飽和到略低於單位長度。範數 $ \|v\| $ 被解釋為該膠囊所建模的實體存在的概率,而方向 $ v / \|v\| $ 則編碼其實例化參數。
高層膠囊消費來自低層膠囊的預測。每個低層膠囊 $ i $ 貢獻一個預測向量 $ \hat{u}_{j|i} = W_{ij} u_i $,其中 $ W_{ij} $ 是一個學習得到的變換矩陣,它將膠囊 $ i $ 的姿態轉換為對膠囊 $ j $ 姿態的預測。膠囊 $ j $ 的總輸入是這些預測的加權和,權重由路由決定。
按一致性的動態路由
動態路由迭代地細化連接一層中膠囊 $ i $ 與下一層中膠囊 $ j $ 的分配權重 $ c_{ij} $。初始時,對數先驗 logit $ b_{ij} $ 被設為零。路由過程重複進行少量迭代(通常為 3 次):
- 通過對目標膠囊取softmax來計算耦合係數:$ c_{ij} = \mathrm{softmax}_j(b_{ij}) $。
- 計算每個輸出膠囊的激活前值:$ s_j = \sum_i c_{ij}\,\hat{u}_{j|i} $。
- 通過 squash 得到 $ v_j = \mathrm{squash}(s_j) $。
- 按一致性更新 logit:$ b_{ij} \leftarrow b_{ij} + \hat{u}_{j|i} \cdot v_j $。
當膠囊 $ i $ 的預測與膠囊 $ j $ 的一致性輸出對齊時,點積 $ \hat{u}_{j|i} \cdot v_j $ 較大,從而增強耦合併強化一致性。預測不一致的膠囊則其耦合會衰減。路由在推理階段和訓練階段都會發生,但變換矩陣 $ W_{ij} $ 是唯一通過梯度下降訓練的參數。
損失函數
原始 CapsNet 使用邊際損失,這是一種按類別的目標,鼓勵對應的輸出膠囊在該類存在時具有較長的向量,不存在時具有較短的向量:
$ {\displaystyle L_k = T_k \max(0, m^+ - \|v_k\|)^2 + \lambda (1 - T_k)\, \max(0, \|v_k\| - m^-)^2} $
其中若類別 $ k $ 存在則 $ T_k = 1 $,$ m^+ = 0.9 $,$ m^- = 0.1 $,$ \lambda = 0.5 $ 降低缺席類別項的權重以防止過早收縮。總損失按類別求和。一個重構解碼器以激活膠囊的向量為輸入,可選地添加一個小的均方重構項,以鼓勵該膠囊保留足夠的信息來重繪輸入。
變體
已經提出了若干路由規則和架構擴展:
- EM 路由(Hinton 等人,2018)以期望最大化過程取代基於點積的一致性。姿態由一個 4x4 矩陣和一個激活 logit 表示;一致性被擬合為高斯混合,當各部分強烈聚類時這會使路由決策更加銳利。
- 自路由膠囊通過一個小型子網絡直接學習路由函數,而不是迭代至收斂,以可解釋性換取速度。
- 堆疊膠囊自編碼器顛倒了典型設置:每個膠囊預測其部分的姿態,網絡以無監督方式訓練以重構部件模板。
- GLOM(Hinton,2021)進一步推广部分-整體思想,用類 transformer 表示中的一致性島嶼取代離散膠囊。
- 卷積膠囊在空間位置上應用相同的變換矩陣,從而恢復卷積的參數共享效率。
與卷積網絡的比較
膠囊網絡在三個方面不同於標準的 CNN。第一,它們用向量姿態取代標量特徵,因此每個單元都攜帶了原本會被池化抹去的結構信息。第二,它們以按一致性路由取代池化,這是一種學習得到的、依賴於輸入的分配,而非固定的歸約。第三,它們追求等變性:當輸入被變換時,膠囊的輸出以結構化的方式變化,而不是保持不變。CNN 通過數據增強和池化來實現不變性;膠囊網絡則嘗試將等變性烘焙進架構本身。
在實踐中,在 MNIST 和 smallNORB 等小型數據集上,CapsNet 與可比的 CNN 持平或略勝一籌,並能更優雅地處理新視角。然而,在 ImageNet 等較大的數據集上,原始架構尚未彌合與深層殘差網絡或視覺 transformer之間的差距,部分原因在於動態路由難以高效地擴展和參數化。
局限與開放問題
膠囊網絡面臨若干實際障礙。路由是迭代的且不易並行化,因此與參數量相近的前饋層相比,每批次的吞吐量較差。內存開銷隨相鄰層膠囊數量的乘積而增長,因為每一對都擁有自己的變換矩陣。訓練穩定性對路由迭代次數以及 squash 非線性函數十分敏感,後者有上界,可能使梯度變得平緩。最後,朝向部分-整體層次結構的架構性歸納偏置迄今為止在小型、結構化的數據集上展現出最清晰的收益;等變性能否在現代基礎模型的規模上得到利用,仍是一個開放的研究問題。
儘管存在這些局限,其概念性貢獻——表示應當顯式地編碼姿態,以及預測之間的一致性是一種強大的學習信號——仍持續影響着等變網絡、圖神經網絡和結構化注意力的研究。
參考文獻
Cite error: <ref> tag with name "sabour2017" defined in <references> has group attribute "" which does not appear in prior text.
Cite error: <ref> tag with name "hinton2018em" defined in <references> has group attribute "" which does not appear in prior text.
Cite error: <ref> tag with name "kosiorek2019" defined in <references> has group attribute "" which does not appear in prior text.
Cite error: <ref> tag with name "hinton2021glom" defined in <references> has group attribute "" which does not appear in prior text.