CapsNet
Geoffrey Everest Hintonが開発
従来はスカラーを流していたものをCapsulesという「ベクトル」にした
層間のCapsulesの結合をできるようにした
データ拡張なしにMNISTのテストエラー0.25%を達成した
affNistやMultiMNISTにおいても良い精度がでた
論文
https://arxiv.org/abs/1710.09829
https://openreview.net/pdf?id=HJWLfGWRb
https://arxiv.org/pdf/1710.09829.pdf
https://arxiv.org/pdf/1712.03480.pdf
Capsuleとは
画像内のオブジェクトの情報
オブジェクトの形や位置を示す
ベクトルのようなもの
大きさや向きでオブジェクトの存在や向きを表現
ベクトルが流れるニューラルネット内のニューロン
ニューロンの集合
カプセルには仮想からの空間情報が保存される
画像特徴の場所が変化する時、認識の結果は変わらないが、空間情報が変わる
プセルのおかげ得たもの
capsule → オブジェクト
大きさ → 存在確率
向き → 特徴のプロパティ(方向やスケール、照明条件など、特徴の状態)
位置 → 位置
CNNの欠点を克服する
例えば以下の画像ではCNNはどちらも「人間」と分類する
なぜならどちらにも目や鼻があるから
しかし、CapsNetは左は人間とは答えない
https://gyazo.com/5f61b38ab2e1aa3c24ffa95522cdd42b
CNNとCapsNetの比較
https://gyazo.com/d22e89fde9d08eed710009c1b77b25ea
各ニューロンがベクトルになっている
バイアス項を用いていない
プーリング層をdynamic routingというものに置き換えている
従来の関数と違い、squash関数を入れ、データを圧縮している
Affine変換で、低いレベルのカプセル(目鼻口)と、高いレベル(顔)のカプセルを結びつけている(?)
と、書かれていることが多いが数式を見てもよくわからないmrsekut.icon
バイアス項がないのはなぜか
疑問
バイアス項がないと表現の幅が狭まりそうだがどうなのか
ベクトル*スカラーより、ベクトル*ベクトルの方が良さそうだがなぜそうしないのか
ベクトル×スカラーより、ベクトル(アダマール積)ベクトルの方が良さそうだがなぜそうしないのか
ベクトルに個別の値をかけると、ベクトルの向きや大きさも変わってしまうので、一つのベクトルには一つのスカラーをかける
weightingのところは似た者同士の場合、値が大きくなる
似た者同士とはベクトルの向きが似ている。
内積を取ると大きくなる
結びつきが強そうなcupsule間の係数cがどんどん1に、そうでない係数は0に近づく
dynamic routingとは
小カプセルの出力に重みをかけたものと親カプセルの出力の内積を取り、カプセルが揃っている親の方へ出力を受け渡すようにするもの
重みに関しては誤差逆伝播法で学習
小カプセルと親カプセルの結びつきに関しては自動的にupdateされる
routingというハイパーパラメータがある
モデル
入力層
Primary Capsule Layer
際にオブジェクトが存在している位置のカプセルが大きくなる(ちょっとイミフだが出典はGIGAZINE)
Routing Capsule Layer
復数のカプセルを組み合わせて、複雑なオブジェクトを検出する層
Routing by Agreementと呼ばれるアルゴリズムを用いる
inとoutの内積値で低次カプセルから高次カプセルへの値の受け渡しを記述
https://gyazo.com/e00ff37a69ce9d441c2871cc5d84fb80
wにはLow-Layerから入力された特徴の空間情報を保存する
カプセルの重みcは、従来のCNNの重みのイメージ
cの学習は誤差逆伝播法ではなく、DynamicRoutingの新しい手法を用いている
Convolution
Caps Net
digit caps
output
Loss
https://mosko.tokyo/post/on-capusels/#fnref:2
margin loss
Tkは正解の場合は1,不正解の場合はわからないけど多分0~0.999のなかのどれか
入力xはvノルム
出力はmargin loss
λがあるおかげで「オブジェクトがある方向に自信がある場合」の方が「オブジェクトがない方向に自信がある場合」よりもlossを小さくしようとしている
reconstruction loss
MSE
CNNとの性能の比較
http://tekenuko.hatenablog.com/entry/2017/12/10/183414
https://mosko.tokyo/post/on-capusels/#fnref:2
affNistデータセットを用いた検証の結果、CapsNetの方が変換に対してロバストである
数字が重なったデータセットMultiMNISTを用いた検証の結果、良い感じにらべるづけできた →なんで?
データ量は少なくても良い精度が出るが、計算は時間がかかる?
CIFAR10はよい精度がでなかったらしい→ 論文
疑問
gigazineの矢印の図は1ピクセルごとにあるの?
CapsNetでは画像のかさ増し時に回転させるとおかしくなるの?
実装
TensorFlow
naturomics/CapsNet-Tensorflow: A Tensorflow implementation of CapsNet(Capsules Net) in Hinton's paper Dynamic Routing Between Capsules
PyTorch
https://github.com/timomernick/pytorch-capsule
https://github.com/motokimura/CapsNet-PyTorch
https://github.com/naturomics/CapsNet-Tensorflow
https://github.com/XifengGuo/CapsNet-Keras
https://github.com/timomernick/pytorch-capsule
https://github.com/naturomics/CapsNet-Tensorflow
https://github.com/Sarasra/models/tree/master/research/capsules
https://github.com/XifengGuo/CapsNet-Keras
https://github.com/Mohit-Ak/CapsNet_notMNIST_affNIST
https://twitter.com/icoxfog417/status/959252299947192320
参考
ディープラーニングにおける「カプセルネットワーク(CapsNet)」による画像認識とは? - GIGAZINE
https://qiita.com/onlyzs/items/5096f50a21758a536d9a  
https://qiita.com/motokimura/items/cae9defed10cb5efeb62  
https://yoheikikuta.github.io/CapsNet/
http://tekenuko.hatenablog.com/entry/2017/12/10/183414
https://mosko.tokyo/post/on-capusels/
https://qiita.com/hiyoko9t/items/f426cba38b6ca1a7aa2b
https://qiita.com/MuAuan/items/ce29fdc90672dcae5060
https://gigazine.net/news/20180208-capsnet/
https://github.com/arXivTimes/arXivTimes/issues/561
https://kndrck.co/posts/capsule_networks_explained/
https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-i-intuition-b4b559d1159b
https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-ii-how-capsules-work-153b6ade9f66
https://www.youtube.com/watch?v=pPN8d0E3900
https://www.youtube.com/watch?v=6S1_WqE55UQ
https://www.youtube.com/watch?v=pPN8d0E3900
http://moreisdifferent.com/2017/09/hinton-whats-wrong-with-CNNs
https://www.youtube.com/watch?v=rTawFwUvnLE&feature=youtu.be
コレ以外の参考
勉強会時のスライド
黒いノート
参加した論文輪読会
https://izumiotsu-ai.connpass.com/event/86972/