Dynamic Routing Between Capsules | moskomule log

Dynamic Routing Between Capsules

はじめに

ディープラーニングの帝王1Geoffrey Hinton先生が20年来温め続けてきたというCapsules Network(CapsNet)を実装し成果を出して論文を出しました(Dynamic Routing Between Capsules).この記事ではこのCapsNetについて簡単にまとめます.

Hinton先生の業績は並べても感嘆するばかりで仕方ないのですが,帝王でおはしますと同時に認知心理学者でもあります.このCapsules Networkも脳のコラム構造を真似ることでCNNよりも人間の認知機能に近い認識器をつくることが目標です.

本論文の要点は以下の通りです.

  • 今まで重みと入力の内積というスカラーの塊であった層を,Capsulesという「ベクトルの塊」とすることで「姿勢」などの情報を扱えるようにした.
  • 層間のCapsulesの結合(routing)を学習できるようにした.
  • 実際にCapsulesを用いた3層のネットワーク(CapsNet)を構築した.
  • CapsNetはデータ拡張なしにMNISTのテストエラー0.25%を達成した.
  • 文字が重なったMNISTに対してもAttentionを用いた複雑なネットワークと同等以上の性能を発揮した.

CNNの問題点

さて,Hinton先生は度々(AlexNet登場以前から!)畳み込みニューラルネットワーク(CNN)の問題点を指摘しており,Capsulesはその解決策のひとつでもあります.

各所で”What is wrong with Convolutional Neural Nets”という題の講演を行っているようです.(受講者のノートまとめ).


LeNetにはじまるCNNでは,ゆがみや並行移動に対する不変性を得るためにpooling(sub-sampling)が行われます.これは却って,位置に関する重要な情報を取り去って特徴を学習していることに他なりません.

従ってCNNでは,以下の図のように位置関係を無視して「目」や「口」といった個々の特徴のみで画像を認識することとなり,左図のようなそれぞれの要素がばらばらのものも右図のような顔であるものも同じように認識してしまいます.

一方で人間などの認知では目鼻と顔の階層関係から顔であることを認識しているので,両者を区別することができます.言及はされていませんがイラストや顔文字,さらに一部が隠れた顔をも顔と認識できるのもこのお陰でしょう.

CNNは位置を無視してしまうので左の画像も右の画像も同じ特徴を持った「人」であると認識してしまう.

またCNNでは同じものに対しても,僅かな差異を学習するために大量のデータとデータ拡張を必要とします.

以下に「傾いた人の顔」を示しましたが,CNNでこれを「人」と認識するためには,そのような多くのデータによる学習が不可欠です.更に,これによって認識できるようになって右の画像が「人」であることは分かっても,「傾いた人の顔」であるかどうかは分かりません.

一方で人間などの認知ではたとえ「傾いた人の顔」を見たことがなくても,例えば鼻の傾きから座標を割り出して画像が「人の顔」であり更に「傾いている」ことが分かります.

CNNでは右の画像が「人」であることを学習するのに多くのデータとデータ拡張を要するが,それでも「傾いた人の顔」であることは分からない.

“But my CAPSULES can do”

一方のCapsNetでは位置や姿勢などの情報をcapsuleというベクトルの形で保持し,capsule同士が階層的な「構文木」をなすように結合の仕方(routing)を学習します.Capsulesは脳にあるコラム構造に影響を受けているようです.

Capsules

各capsuleには階層によって異なりますが「目」や「顔」などが対応します2.capsuleはベクトルで,長さがそのcapsuleに対応するものが存在する確率であり,各要素が位置や姿勢を表します.

$l+1$層目のcapsule $j$は$l$層目のcapsulesの出力に,以下で説明するroutingを施した入力$s_j$を受けます.これはそのままでは上記の条件を満たさないので以下のsquashing(押し潰し)によって,$[0,1)$に閉じ込めます.

\[v_j=\frac{|s_j|^2}{1+|s_j|^2}\frac{s_j}{|s_j}\]

$l,l+1$層での記号の関係.

routing

「目」のcapsuleと「顔」のcapsuleとは結びつくべきですが,「花」のcapsuleとは結びつくことはありません.これを学習するのがroutingであり,ここでは特に本論文で提案されているdynamic routingを扱います.このほかにEMアルゴリズムを用いた手法も何者かによって提案されています

$l+1$層目のcapsule $j$が$l$層目のcapsules $i$の出力を受けます.先ほどのroutingされた$j$への入力$s_j$は以下によって計算されます.capsule $i$の出力を$u_i(=v_i)$とします.

\[s_j=\sum_i c_{ij}\hat{u}_{j|i}~~(\hat{u}_{j|i}=W_{ij}u_i)\]

ただし$c_{ij}$は$b_{ij}\leftarrow b_{ij}+\hat{u}_{j|i}\cdot v_j$と逐次的に更新される$b_{ij}$によって

\[c_{ij}=\mathrm{softmax}(b_{ij})=\frac{\exp(b_{ij})}{\sum_k\exp(b_{ik})}\]

と表される係数です.$\hat{u}_{j|i}\cdot v_j$はagreement(一致)と呼ばれる量で$i,j$の接続の強さを表します.

ここで入力として顔写真,$i$として「目」「鼻」,$j$として「顔」「花」を考えてみましょう.入力画像の中に顔があるとき,目があれば顔があり,また鼻があれば顔がありますが,花はありません.そのため適当な重みによって,鼻があるもとでの顔$\hat{u}_{\text{顔}|\text{鼻}}$や,目があるもとでの顔$\hat{u}_{\text{顔}|\text{目}}$と$v_{\text{顔}}$は近くなり,一方で$v_{\text{花}}$とは遠くなるようにすることができるでしょう.またその時$|v_{\text{顔}}|$は1に近く,$|v_{\text{花}}|$は0に近いことが求められます.従って,この時,$c_{\text{鼻顔}}$や$c_{\text{目顔}}$は大きく$c_{\text{鼻花}}$や$$c_{\text{目花}}$$は小さくなることが期待できます.

こうして$i\times j$通りの組み合わせから重要な組み合わせを見つけていくのでdynamic routingなのではないかと忖度しています.

以下にroutingのアルゴリズムを載せました.

routingのアルゴリズム.

CapsNet

アーキテクチャ

CapsNetのアーキテクチャは1層目が普通の畳み込み層(256チャネル,$9\times9$カーネル,ストライド1)で,ReLuを施します.2層目は畳み込みcapsule(32グループ,各8チャネル,$9\times9$カーネル,ストライド2)を施します.MNISTの場合ここまでの出力は$(8\times 32)\times6\times6$となりますが,各capsuleは$32\times6\times6$個の8次元ベクトルとなります.この各capsuleが$256\times9\times9$のカーネルをすべて見ています.

3層目は全結合のcapsule層で先の8次元capsule $u_i~(i=1,\ldots,32\times6\times6)$から,MNISTの場合10個16次元capsule $v_j~(j=1,\ldots,10)$に接続します.どのクラスに分類されるかは$|v_j|$を比較します.

CapsNetのアーキテクチャ.1層目は普通の畳み込み層,2層目は畳み込みcapsule層,3層目は全結合capsule層.

学習方法

分類に対する損失函数は最終層の各capsulesについてとります.これはラベルクラス$k$に対しては

\[L_k=\max(0, m^{+}-|v_k|)^2\]

ラベルのないクラス$-k$に対しては

\[L_{-k}=\lambda\max(0,|v_{-k}|-m^{-})^2\]

によって与えられます.$(m^{+},m^{-})=(0.9,0.1),~\lambda=0.5$が提案値で,これを誤差逆伝播によって伝播させて学習を行います.論文ではAdam Optimizerが用いられています.

また,学習の正規化のために画像の再構成を行い,その再構成損失$R$を上の分類損失に加えます.画像の再構成はラベルが$k$であるときに最終層のcapsule $v_k$を3層の全結合のネットワーク($16\to512$,$512\to1024$,$1024\to784$)によって行います.ただしこの$784$はMNISTの画像サイズ$28\times28$です.

以上から,損失は充分に小さい$\alpha$によって

\[L_k+\sum_{-k}L_{-k}+\alpha R\]

と与えられます.$\alpha$は論文中では0.0005が用いられています.

結果

結果の一部をあげます.

MNIST/multi-MNIST

MNISTではデータ拡張やアンサンブルを用いずにエラー率0.25%を達成しました.また重なりのあるmulti-MNISTでも高い性能を発揮しています.またMNISTにAffine変換を施したものに対しても認識を行うことができます.

MNISTによる結果.

multi-MNISTの入力と再構成の結果.

その他

CIFAR10やsmallNORBなどでの結果も報告しているのですが,データ拡張やアンサンブルを用いており,気になりました.

まとめと感想

簡単にCapsNetについてまとめました.

脳のコラム構造に示唆を受けたcapsulesを導入することで,単純な構造にも関わらず,従来の畳み込みニューラルネットワークと比較できる性能を発揮しています.

一方で,かつてのCNNのAutoEncoderような部分など,改善できそうな箇所多くあります.またCIFAR10などにはデータ拡張やアンサンブルを用いるなど,データによっては期待される機能が発揮できないように思えるところもあります.更にcapsuleが「構文木」を構築するという仮説は検証されていないなど,不思議な点も多いです.今後,帝王に恐れずどんどん反駁や,改善手法が出てくることを期待します.

参考

上記の他に以下を参考にしました.


  1. 文献によって異なりますが,「Hinton,Bengio,LeCun」の三聖とするもの,Andrew Ngを足して四天王とするもの,女帝FeiFei Liを加えたものが見られますが常に筆頭はHinton先生です. [return]
  2. 厳密に対応しているかは分かりませんが,対応していることが期待されます. [return]
comments powered by Disqus