
ニューラルネットワークを活用した文字認識のプロセスを三次元で可視化した WebGL デモがすごい!
手書き文字の認識が違った意味でよく見える!
今回ご紹介するのは、ニューラルネットワークを活用し二次元平面上に描かれた模様から、数字として認識される様子を可視化した、面白いデモンストレーションです。
私は残念ながらこの手の学がまったく無く、正確に解説することが難しいのですが、Convolutional Neural Network というものを使って文字を認識するような、特殊なアルゴリズムを可視化しているのだと思います。
階層構造になった状態に、どのようなつながりがあるのかを可視化するのには三次元表現がうってつけですね。
数字を描いてみるだけでも楽しめる
先に触れたとおり、私はこういった学問の知識がないのでものすごく初歩的なことや、間違ったことを書いているかもしれません。その点はご了承ください。
今回のデモを見ると、文字認識のためのニューラルネットワークが、どのように機能しているのか、その一端を見ることができます。
素人目に見ても、複数の階層を通る過程において情報が様々な形に生理されていき、最終的にひとつの文字である可能性がどの程度あるのか、それが算出されるような仕組みになっていることがわかります。
画面の左側にあるのが、文字を描くためのパレットや可視化するレイヤをトグルすることができるボタン類です。
左にあるサイドバーの一番上に描画エリアが設けられており、そこにマウスで模様(数字)を描きます。すると、いくつかの階層にわかれたプロセスを巡りつつ、最終的にどの数値として認識されたのかが、最上段に並んでいるキューブの色で判別できるようになっています。
ちょっと小さくて見づらいかもしれませんが、上の画像を見るとほぼ正確に数字の「8」の文字を認識できているのがわかりますよね。
シーン全体は上の画像を見るとわかるとおり、複数の階層にわかれています。
私にはどういったアルゴリズムになっているのかはわかりませんが、一番下の階層に手書きした模様と同じビットマップのようなものがあり、その上の階層から徐々に色分けされていくのがわかります。
最終的には、徐々に畳み込まれていく感じでビットマップが小さくなっていき、やがて一次元の配列として処理されたあと、どの数値であったのかが判定されるようです。コンボリューション、というふうにあることから、恐らく畳み込みの原理で数値を判定しているのでしょうね。
左側の数値を書き込むエリアに、なにも描いていな状態では当然ながら各階層は真っ暗なままになっています。
なにかを描いてやると、その畳み込みの各プロセスが色によって可視化されます。
マウスによるドラッグ操作で視点変更ができますが、その他にも、並べられているキューブ状のモデルにマウスカーソルを当てることで、それぞれの階層がどのような繋がりになっているのかを線で表現させることが可能です。
徐々に下から上に向かって、段々と情報が精査されていく様子を、直線の繋がりによって把握することができるわけですね。
うーん、これは面白いです。
我々の日常には、指紋認証や顔認識など、生活に密接に関わるものに代表される様々なデジタル認証があります。
そういったちょっと専門的で難しい知識が必要な分野のことでも、こうして三次元に可視化してもらうととても興味深く観察することができますね。
しかも、WebGL ならそれをオンラインで、しかもつぶさに自分の好きな視点から観察できるのです。とても、有意義なデモだと感じました。
私の知識不足であまり具体的な解説ができなくて恐縮ですが、そんな素人が見ても、とても面白いデモだと感じます。
ぜひみなさんもチェックしてみてください。
リンク:
3D Visualization of a Convolutional Neural Network
An Interactive Node-Link Visualization of Convolutional Neural Networks