ニューラルネットワークを抽象化して説明してみる

想定読者

ニューラルネットワークを自分で実際に使うわけではない人

勘で物を理解する人

関数とか抽象とかのプログラミング/理系/数学/哲学のワードをある程度知ってる人

本文

ニューラルネットワークは合成関数(複数の関数を組み合わせて作った関数)だ。

関数というのは、入力したデータに何らかの処理をしてデータを出力するもの。

有名なのは三角関数とか。

ソフトウェアもマウスやキーボードなどの操作のデータを処理して、ディスプレイにデータを出力しているので関数と言える。

学習して変数を調整することで、任意の関数を(複雑なものは手法を工夫したり、変数の数を増やしたり、膨大な時間を費やすことで)近似できる。

要するに人工知能。人間のようにデータの規則性を読み取って答えを予想できる。

また、データや学習が足りないと規則性を読み取り切れずに予想に失敗する。

従来のソフトウェアは具体的にどのような処理をするかをプログラムする必要があった。

しかし、AIは自動でどのような処理をするか学習しているので、より抽象化していると言える。

ここでは基本的なニューラルネットワークについて説明しよう。

ニューラルネットワークは関数なのでもちろん引数と返り値がある。どちらも行列(値の並び)だ。行列を入れると行列が出てくる。

ニューラルネットワークはいくつかの層(レイヤー)が積み重なってできている。層も合成関数だ。

層は関数なのでもちろん引数と返り値がある。どちらも行列(値の並び)だ。行列を入れると行列が出てくる。

層は先述の通り入力側から出力側まで順番に積み重なっている。

層はノードが集まってできている。ノードも合成関数だ。

ノードは関数なのでもちろん引数と返り値がある。どちらも行列(値の並び)だ。行列を入れると行列が出てくる。

ノードは変数に行列を持っている。

層の中の各ノードが前の層の返り値の行列とノードの変数の行列の類似度を計算(行列の積を求める)する。

ノードの類似度を行列にして、その層の返り値とする。

各層がどんどん類似度を計算していって、最終的な答えを出す。

あとがき

勘が鋭い人ならこれを想像すればなんとなくどうやって答えを出しているかわかると思う。

というか私が勘でしか理解してないのでこれ以上言葉で説明できないです敗北

わからないなら考えるか、実際に手を動かしてみるといい。

おすすめの本はベストセラーとなっているゼロから作るDeep Learningだ。

とても具体的にわかりやすく説明してくれる。実際にあれこれやるには経験が必要だが、前半を読むだけでも「ニューラルネットワーク完全に理解した」くらいは言えるだろう。


私はは最近MinecraftJEのコマンドでニューラルネットワークを作っているのだが、この記事はその副産物だ。検索エンジンの仕様上見る人は少ないだろうが、簡潔に書けたので私は満足している。

わかりにくいところがあったらコメント欄で教えてほしい。では。

コメント