NumPyの豊富な機能を使ってニューラルネットワークを実装してみましょう。ニューラルネットワークというと難しそうな印象を与えますが、NumPyを使用しながら実装することで、シンプルに数式を落とし込めることが分かると思います。

一つ一つの計算式や仕組みを直接プログラムに落とし込む作業を繰り返すことで、あなたの実装力や実験・検証能力は飛躍的に向上します。プログラムを書くことで、自分自身がより理解することができ、結果からのフィードバックを受けて何らかの知見を得ることができるからです。

囲碁で有名なAlphaGoやテレビゲームの画面からゲームをプレイさせる強化学習のDQN [1] も、このニューラルネットワークのアイデアを活用しています。

この記事を通してニューラルネットワークを理解し、NumPyでニューラルネットワークを使った手書き数字認識を実装してみることで、今後の研究開発に役立つはずです。

また、正解データを与えない教師なし学習ではなく、1つ1つの画像に正解のラベリングを与える教師あり学習を通して機械学習の理解を進めていきます。

ヒトが持つ認知メカニズム

ニューラルネットワークについて紹介する前に、導入としてヒトの認知機能を紹介します。

1997年に世界的なチャンピオンを打ち負かしたIBMのDeep Blueのような手作業で評価関数のパラメータを調節するものではなく、ニューラルネットワークは人間の脳を模倣した方法で人工知能を作ろうとする手法をとっています。シンプルな考え方ですが、当時の人々は計算機に脳の仕組みを模倣するアイデアを導入することは理解しえなかったことでしょう。

この項目は飛ばしても構いませんが、読んでおくことでニューラルネットワークが人間の脳を模倣した仕組みであることを理解でき、実装をより興味深く楽しいものに感じることができるかもしれません。

計算機にとって難しく、ヒトにとって簡単なこと

まずは以下の2つの画像を見てください。

PAKUTASOより画像を利用

これを見たみなさんは、2つの画像をひと目見ただけで2人は人物であり、同一人物ではないことがわかるはずです。さらに、性別は左側の画像の方が男性的で右側の画像の方が女性的であることもすぐに分かるはずです。大まかな年齢も推測することができます。

では、何故そのようなことがわかったのでしょうか。どのようにしてこの2つの画像を区別したのでしょうか。ヒトには一瞬で分かるこの問題を、計算機にさせようと思うと非常に難しいことが分かると思います。

どんな大規模な計算も間違えることのない計算機でも、ヒトが持つ人の顔を判別する場合だけに限らず、人間が行っているような様々な物体を視覚的に捉えることによって判別する機能というのは実はとてもすごいものです。

特に人の顔識別に関しては脳にそれ専用の分野があるくらい発達しています。

長年の研究の成果により、そのメカニズムは解明されつつありますがまだ完璧に解明されていません。この章ではその中の一部を解説したいと思います。

脳の神経細胞

まずは脳を構成する神経細胞について簡単に紹介します。脳にある神経細胞にもいくつか種類があるのですが、その中でも代表的なものについて見ていきます。

今回紹介するのは情報伝達や情報処理に使われる神経細胞です。これは英語でニューロン(neuron)と呼び、日本語でもそのように呼ばれることが多いです。

シナプス

上記の画像は神経細胞の簡略化された構造を示しています。まず、細胞体の中に核が存在し、細胞体が細かく枝分かれしている部分を樹状突起と呼びます。

細胞体から細長く伸びている部分を軸索と呼び、その末端にある部分を軸索終末と呼びます。

脳の中ではこの神経細胞が樹状突起から情報を受け取り、細胞体内で処理されたあと、軸索を通って軸索終末で次の細胞へと情報が受け渡されます。

では簡単に神経細胞間の情報のやりとりについて見てみましょう。

シナプスの電気信号

上の図は神経細胞間の情報のやり取りを簡略化して書いたものです。左側から流れを説明します。

まず、それぞれの神経細胞内において電気信号が軸索を通って、軸索終末から放出されます。これを樹状突起が受け取り、受け取った電荷の分だけは細胞内の電荷は変化します。このとき電荷はイオンの形で運ばれ、正と負両方の電荷が存在します。

そして、細胞内である一定の電荷を超えるとまた神経細胞から電気信号(電荷)が放出され、次の神経細胞へ情報を伝えていきます。この、神経細胞内の電荷が一定値を超えることで電荷を放出することを発火と呼びます。

ここで大事なことは、神経細胞は複数の神経細胞から受け取った電荷の総和に応じて発火するかどうかが決まるということです。そして、この神経細胞同士のつながりの数は非常に多く、1つの神経細胞に1000個以上もの細胞が結合して信号を伝達しているところも存在します。

不思議なことに、この単純な信号伝達の組み合わせで我々は複雑な思考をしたり、様々な物を判別したりすることができるのです。

視覚による物体の認識

次に、これらの神経細胞がどのようにつながることで物体の認識につながっていくか簡単に解説します。

視覚の物体認識のメカニズムのイメージがあるとこれから学ぶニューラルネットワークの意味合い、特に畳み込みニューラルネットワークが理解しやすくなるかと思います。

視覚情報の処理ではたくさんの部位が関わっており、それぞれにおいて一定の情報を検知する役割を果たしています。眼球の網膜にある細胞から送られてきた情報をまず処理するのが第1視覚野(V1)と呼ばれる部位です。この部位は主に傾きを検出する役割を持っています。これらの情報は次に続く視覚野に渡され、処理されます。情報が受け渡されていく過程で情報は一本道ではなく枝分かれして別々に処理されていきます。そして、最終的にそれらの情報を統合することで我々は物を物だと認知できるようになります。

これが視覚情報が処理されるルートです。簡単にまとめると以下の図のようになります。情報処理の部位がいくつかありますがその数などはあくまでイメージです。実際のつながりなどはもっと複雑なことには注意してください。

視覚

上図で、矢印は情報の伝達を示し、それぞれの四角は情報を処理する脳の部位を示しています。このように、いくつもの部位を情報が通っていき、最終的に統合されることで物を識別できるようになります。

もう一つ、重要な役割を果たす部位があります。それは受容野というものです。

脳内で視覚の情報を処理する時、まずは空間を細かく区分けして、その区分けされた区間ごとに情報処理を行っていきます。この区間が受容野となります。

実は視覚の情報処理のときはまずは狭い範囲ごとに情報処理が行われていき、それらの範囲が徐々に広がっていくことで更に複雑な情報を取り出していくという流れで情報処理を行っているのです。

受容野

参考