機械学習の勉強を始める前に

機械学習の勉強を始める前に、自分の昔(30年くらい前)の知識の整理をする。

大学の研究室で、同じ研究室の同級生がニューロを卒業研究で研究していた。
それを少し聞いただけなので、知識としては古いし、正確には分かってないと思う。

まず、ニューロ(ニューロコンピュータ、ニューラルネットワーク)は、脳細胞(ニューロン)の働きを模した素子を多数ネットワーク状に結合して演算する演算器である。
人間の脳のように(?)学習させることにより、学習させたとおりの演算結果を出力するようにトレーニングすることができる。

素子のニューロンは、こんな感じに細胞体本体(soma)とシッポ状の部分(axon)からできている。
ニューロン 画像 – Google検索

image1
1つのニューロン素子は、近傍の他の複数のニューロン素子にくっついている。

脳全体で3次元的にニューロン素子が組み合わさってネットワークを形成している。

これを数学的なモデルで表して、コンピュータでシミュレーションする。

ニューロン素子は、
・入力xが複数個で、出力はyのみ。
・入力に対して係数wが掛かっている。神経の結合の強さ?
となる。

ネットワークの組み方は、複数の素子をn個ならべて、それを何層か重ねて行列にするというのを聞いたが、ちょっと分かりにくい。

脳みそを豆腐に例えると、
Rimg0005
このように薄くスライスしたものを自分は想像している。

スライスされた層のようになったニューロンは前の層から入力を受けて、次の層に出力する。
image2
そして、その入力の最前面の端は、眼底の視神経の細胞に繋がっていて、2次元の画像を入力する。
各層は2次元の配列で、全体としては3次元の配列で表すことができる。
(セルオートマトンとか重み付きのライフゲームみたいなものとも考えられる。)

これだと無駄に次元が増えてしまうので、実際には各層を1次元、全体を2次元の配列で実装される。

これだけの仕組みで、入力に数字を映した画像を入力すると、その数字を判別したり、犬とかの動物の写真の画像を入力して判別させたりすることができる。

その急所というかキモの部分は、上記の係数wという部分だ。
これが適切になっていなければ判別機能はうまく働かない。

この係数を手作業で設定することは不可能。
出力側の層から入力に対してフィードバックをかける形で係数wを変化させる「学習」を繰り返すことで係数wが適切な値に近づくと考えられる。

この話を聞いた約30年前の話だと、ネットワークの層の数を増やして規模が大きくなると学習がうまくいかないということだった。

最近のディープラーニング(深層学習)では、多層の学習が可能になったということで性能が格段に上がるというブレークスルーが起きている。

画像からの動物の判定の性能が人間の判定よりもコンピュータのほうが精度がよかったりとか。
囲碁でコンピュータが人間のトッププレイヤーに勝利したりとか。

人間の視覚機能の「認識」に関する部分は、もっと複雑なのだけど、それさえも近いうちにある程度はコンピュータで実現されてしまいそうだ。
Rimg0001
(脳と心の地形図、表紙内側の最初のページの図)




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

58 − 49 =