こんにちは、たくやです。
今回は69歳のグーグル研究員、ジェフ・ヒントンが40年の歳月をかけて熟考して発表した新技術、カプセルネットワークをご紹介します。 今回も例によってわかりにくい数式や専門用語をできるだけ使わずに感覚的に解説していきます。 元論文 「Dynamic Routing Between Capsules」
この、カプセルネットワークは今、これまで機械学習で不動の地位を築いていたニューラルネットワークの技術を超える新技術なのではないかと期待されています。 彼の出した2つの論文によると、カプセルネットワークの精度は従来のニューラルネットワークの最高時の精度に、誤答率は従来のニューラルネットワークの最低時の半分にまで減少したといいます。
従来のニューラルネットワークとの違い
では、何が従来のニューラルネットワークと違うのでしょうか? 一言でいうと、従来のニューラルネットワークが全体をその大きさで見ていたのに対して、カプセルネットワークが特徴ごとに”ベクトル”で見ているという点です。 もう少し詳しく説明します。
例えば顔を認識する際に、従来のニューラルネットワークであるCNN(Convolution Newral Network) はそれが目なのか、鼻なのか、口なのかにしか着目していませんでした。(画像左) *CNNが何かを知らない方はこちらの記事の”CNNのおさらい”をご覧ください。
不気味なロボットから考えるCNNの仕組みのおさらいとAIによる画像認識の攻防戦
しかし、今回のカプセルネットワークはそれらの特徴がどのような関係で配置されているのかまで認識します。(画像右)
出典:Kendrick「Capsule Networks Explained」より
つまり、カプセルネットワークは個々の特徴を独立的に捉え、それぞれがどのような関係にあるのかということにまで着目します。カプセルネットワークの名前の由来がここにあります。ひとつひとつのカプセルに詰まったニューロンが個々の特徴に着目し、それぞれの関係に着目するのです。 これによって何が起こるのでしょうか?
出典:Medium 「Understanding Hinton’s Capsule Networks. Part I: Intuition.」より
例えばこの写真、私たち人間の目には実物の自由の女神像を見たことがなくても、全て自由の女神像に見えます。
しかし、私たちは、何千枚と自由の女神の写真を見てきたわけではないですよね?私たちは、十数枚の写真を見ただけで、それが自由の女神像だと認識することができます。 それと同じことが機械学習でも可能になるのです。 機械学習を行うには5つのプロセスがありました。
- データの収集
- データの前処理
- モデルの構築
- 実際に人工知能に学習させる
- モデルの改善
機械学習で最も大変なのは、実のところ、1と2のプロセスでした。しかし、今回のカプセルネットワークが実際に実用に耐えうるものだとされれば、1と2の手間がかなり省けるために、機械学習の可能性が一気に広がります。
カプセルネットワークの仕組み
なぜそのようなことができるのでしょうか? ひとつには上記で話したように、ベクトルで対象を認識しているからということが挙げられます。しかし、もうひとつ、重要な点があります。それが”プーリング”です。 開発者のジェフ・ヒントンはこのような言葉を残しています。
I believe Convolution, but I don’t believe Pooling. – Geoffrey Hinton
つまり、CNNの仕組みは基本的に素晴らしいが、最後の処理であるプーリングには疑問を呈しているのです。 プーリング、特によく使われるマックス・プーリングは元のデータから導き出された特徴量の最大値をとって、残りを切り捨てる操作でした。
しかし、これによって、特徴同士がどのような関係にあるのかがわからなくなってしまうというのです。 それもそうですよね。簡単に言えば特徴がどれだけ出ているかを表す数値で構成された写真の解像度をわざわざ下げて、特徴を強調しているわけですから。特徴の強さがどのように移り変わっているのかは分かりにくくなってしまいます。
出典:POSTD 「畳み込みニューラルネットワークの仕組み」より
そのかわり、カプセルネットワークではsquash関数という関数によってベクトル全体が潰されることになります。 (数学を見ると蕁麻疹が出てしまう方はこの部分を読み飛ばしてください) 具体的にはこのような関数になります。‖ ‖で囲まれている部分はノルムといってベクトルの長さを表すと考えてもらって大丈夫です。確かに分母で1がプラスされているため、圧縮されているのがわかります。
ちなみにSj / ‖Sj‖ の部分は単位ベクトルといって、向きを表すために掛け算しています。 最後に、従来のニューラルネットワークとカプセルネットワークの違いを明確に表す画像を見つけたので、引用させてもらいます。
出典: Github 「CapsNet-Tensorflow」
上の写真を見ればわかる通り、両者の構造はとても似ており、異なる点は3つだけ。
- 入力に重さをかけてベクトルにしている。
- バイアスを足さずに、どこの部分を強調して見るということをしないようにしている。
- 最後に従来の関数と違い、squash関数を入れ、データを圧縮している。
カプセルネットワークの技術的な話をもっと知りたい方は、英語版ですが、とてもわかりやすくカプセルネットワークの技術について解説してくれている動画も見つけましたので、よかったらご覧になってみてください。
参考
・Qlita 「CapsNetについての調べ」
・Medium 「Understanding Hinton’s Capsule Networks. Part I: Intuition.」
・Qlita 「CapsNet (Capsule Network) の PyTorch 実装」
・HACKERNOON 「What is a CapsNet or Capsule Network?」
最後までご覧くださりありがとうございました。