Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2018-03-13

CapsuleNetの圧倒的俺得感 10:08 Add Star

 最近Engadgetの記事を書いてばっかりだったのでこっちはさっぱりだったのだけれども、やはりCapusuleNetが凄くイイ。


 圧倒的な性能も去ることながら、やはり内部構造がイイ。



 やはりねー、畳み込みフィルターとかプーリングとかイマイチだと思ってたんだよな

 特にプーリングね。平均値とるとか、最大値とるとか。みんな薄々疑問に感じてたんじゃないかと思うんだよな。「ほんとうにこれでいいのか?」って。


 ところが面白いことに、畳み込みとプーリングの組み合わせでも、インセプションとかレシデュアルとか入れると、それはそれでそれなりに性能が上がっちゃって、「うーん、よくわかんないけど、これでうまく行くからいいのか」っていう状況が先に生まれて、その状況に対してドヤ顔で「数学的に○○ですからうまく行くんです」とか説明していたニワカ深層学習のセンセーが世界中にいたはずなんだよね。たぶん4096人くらいは。


 なぜならセンセーというのは、基本的に「私はぜーんぶわかってますよ」という「てい」で教えないとならないのが普通だから。大学などでは特にそう。まあ教えるときに「私もよく知りませんが・・・」って前置きしてから解説する授業は東大くらいでしかみたことがない。僕はアカデミズムの枠からそもそも外れているので、最初に「学術的な裏付けはありませんし、僕は数学苦手なのであまりそこに期待しないでください」という逃げ口上を売ってからやってるのであまり心は傷まないが、これまで畳み込みとプーリングで教えてきた先生方はどうするつもりなんだろうか。まあ別にいいのか。


 ディープラーニング協会の技能検定にも影響しそうだよなあ


 そもそも深層学習そのものがまだ新しい分野なので、かなり長くやってる人でもせいぜい10年くらいしか経験ないわけで。それ以前の知識も役に立たないとは言わないけれども実用上あまり意味はないわけで。


 そんな素敵なストーリーの中、なぜか畳み込みとプーリングで上手く行くぜー理由は○○だぜーとか、バッチリ教科書に書いてしまって出版してしまって、その最後の最後で、まさかヒントん先生御自らが「プーリングとか気の迷いだったわ」と壮大なちゃぶ台返しを行い、畳込みとかほとんど使わないカプセルネットワークの方が層が少なくともバッチリ学習できてしまうという事実が明らかになってしまった今日このごろ、こんなに痛快なことがあるでしょうか。


 んで、このカプセルネットというアイデアそのものが俺好みというか大好物というか、まさかのシーングラフの話なわけです。


 やっぱりCGとAIはなにか根っこの方で密接すぎる関係があるんだろうな。


 人間が数式だのをいじって唯一楽しめるものは映像と音楽くらいしかないと思うわけですが、そこにはもっと根源的な秘密があるのではないかと思わざるを得ないのです。


 映像処理にしても音声処理にしても畳み込みというのはかなり下等な処理なんで、むしろどちらかというとあまり大事にされてこなかったというか、見過ごされてきたものなわけですね。


 ディープラーニングで畳み込みが再注目されると「へー、あんなもんにもカラオケとかぼかし以外で使いみちがあるのね」という驚きがあった。あいつ成績悪いし馬鹿だしなっていうスクールカーストの最底辺にいたと思ったら、いつのまにか、未来からきたヒントえもんのひみつ道具で、最終的にはしずかちゃんと結婚してた、みたいな良さ味がある。


 しかし結局のところ、畳込みとプーリングを世にはやらせたヒントン先生にしてからが、「やっぱりプーリングは良くない」と言い出して、畳込みとかほとんど関係ないカプセルネットワークとやらを持ち出してきて、「よくわからんがダイナミックルーティングは三回まで!」と高らかに宣言して、実際なんかよくわからんけどすごい性能をあっさり達成しちゃったりしてるところをみると、まだまだ世の中捨てたもんじゃないなって思う。


 そしてカプセルネットの鍵を握るのはなんとベクトル!!!


 しかも今までのベクトルみたいな、「形式上、いちおうベクトルと呼ばれているも

の」じゃないよ。ガチのベクトル。やったぜ大好物!


 

 ベクトル以外の数学はすべて捨てた、と言っても過言ではない我が人生で再びベクトル様に助けられる日がやってくるとは!!


 古くは三相交流について書かれた親父の蔵書を読み漁るところからベクトルとの出会いが始まり、ベクトルの微分積分を小学校で覚え、基底変換、回転行列、全部ベクトルから学びました。ありがとうお父さんお母さんベクトルさん


秋葉原プログラミング教室のカリキュラムでは小学生向けの単元でもかなり初期からベクトルを学ぶが、ベクトルは非常に人間の直感に沿っているので比較的理解しやすい上に応用性がほとんど無限大だからだ。


 重力加速度→ベクトルですね

 速度ベクトル→加速度ベクトルの積分ですね

 位置ベクトル→速度ベクトルの積分ですね

 


 そしてベクトルといえば内積と外積

 ドット積とかクロス積とか珍妙な用語を使う世界も世の中にはあるらしいが、僕は明治期の日本人が産んだこの美しい日本語、内積と外積という単語をこよなく愛する一人の日本人として、内積にありがとうと言いたい。


 恐ろしいのは、自分で実装してもなんでこのアルゴリズムでうまくいくのかさっぱりわからない。こんなにわけがわからないのは四元数(Quaternion)に初めて出会った時以来である。


 しかも扱うベクトルがいきなり八次元ベクトルとか十六次元ベクトルとかなので、本当にそこまでのものが必要なのか、またヒントン先生、勘で実装してんじゃないですか?と思って二次元ベクトルでカプセルを作ったところ、なるほど納得のアフィン変換が見られたのでカプセルネットは良いものだということが感覚的にわかった。


 しかもカプセルからdenseでacganみたいなの作っちゃうし。

 ヒントン先生は化け物か。

 バーゲンホルムか


 今年はカプセルネットの年になるのかな。

 そしたらそれはそれで面白すぎて楽しい人生が待っている


 ちなみにカプセルネット、かなり簡単な構造でもCifar-100が37エポックでval.acc 50%くらい。Cifar-10だと90%いく



 この手のものが速いKerasはさっそく公式サンプルにCapsule-Net入れてきた。まあそのうちCapsule Layerが公式に追加される日も近いだろう。


 とにかくガキの頃からベクトルを教えてくれた親にマジ感謝

 世に出てるディープラーニングの本が一夜にして軒並み一世代前のものになってすごい笑える。さあライターの皆さん、本を書き直しましょう



 本当に楽しい時代にうまれてよかった。