パーセプトロンとは〜深層学習の基幹概念〜
わくばです!
そろそろ知識をちゃんとアウトプットしないとなーと思って、機械学習の仕組みに関して記事を作成していこうと思います。あんまり教科書的にまとめてもわかりにくいので気になった重要なトピックごとに記事にしていこうと考えています。
やはりまずは深層学習の根幹とも言えるパーセプトロンの話から
パーセプトロンとはなにか
パーセプトロンというのはフランク=ローゼンブラットという心理学者が考案したモデルで、ニューラルネットワークを考えるにあたって最も根本的な概念です。ネットワークを構成する最も小さなパーツというとわかりやすいでしょうか。
難しい言葉はまず由来から考えてみるのが吉です。「perceptron」ですから「perception:知覚,認識」に由来すると考えるのが普通でしょう。答えはありませんが、おそらくそうなのだと思います。僕が思うに知覚し認識するその過程も含めているのだと考えています。人がなにか「知覚」という形で入力を得て、「認識」という形で出力するプロセス、それを最もシンプルにモデル化したものがパーセプトロンなのです。
まずは大枠からですが、以下のような図がパーセプトロンと呼ばれるものです。ちょっと単純パーセプトロンの部分は厳密には違いますが、以下のような捉え方のほうが理解に役立つと考えて、多層パーセプトロンの一部のような書き方をしてみました。
何やらネットワークっぽいですよね。それもそのはずで、これは深層学習で実際に用いられるニューラルネットワークの原型だからです。この多層パーセプトロンとニューラルネットワークの違いは後に別記事で詳解しようと思っています(ぶっちゃけ違いはわかってなくても良いかも)。今はパーセプトロンというのが網状に広がってるもんなんだな、くらいに思ってください。
単純パーセプトロン〜神経細胞1個に相当?〜
細かい部分の解説に入ります。深層学習は発想上は人間の神経活動をもとにしたものですから、神経細胞に相当する概念があります。それが単純パーセプトロンです。
\(x\)や\(w\)の添字はコンピュータが計算可能な限り無限に増やせますが今回は見やすくするために\(n=2\)までにさせてもらっています。
少し複雑になってきましたが、登場人物は入力、出力、バイアス、重み、活性化関数のたった5つです。単純パーセプトロンを数式一つで表現すると以下のようになります。
$$ z=f(x_{0}w_{0}+x_{1}w_{1}+x_{2}w_{2}+B) ーーーー①$$
入力に重みをかけてバイアスを足したものを活性化関数に通して出力とする。
若干、加重平均っぽく見えなくもないですが重みの総和は一定でないので全く別物です。この重みは調節が可能で、深層学習はこの重みを最適化することでより良い答えを導き出しています。そしてそれぞれの重みが独立しているからこそとんでもない計算量が必要なんです笑 \(x\)や\(w\)の添字をどんどん増やし、中間層もどんどん増やしていくと最終的にとんでもない計算量になることが想像つくと思います。ちなみに実際にはこの層は10万層は平気で超えます。この計算量が近年まで日の目を見なかった理由の一つでもあります。
①式で特に覚えておいてほしいのは、総入力\(u\)が1次関数(1次多項式が定める関数)であるという点です。これでもし活性化関数\(f\)が線形変換であったら、どれだけ層が深くても出力\(z\)は1次関数になるのがわかりますか?今度活性化関数についても記事にしようと思いますが、この点が活性化関数の存在意義を理解するにあたり非常にキーになってきます。
図3は実際の神経細胞の生理学的なモデルです。単純パーセプトロンの構造に似ていますよね。ただし、これらはお互いに真実を表しているわけではありません。似ているだけです。というか模したのだからそれはそうなんですが笑 何が言いたいのかというと深層学習はあくまで現状わかっている脳の仕組みに着想を得て”独自に”進化していった理論です。したがって脳の仕組みとは別物です。むしろ脳神経科学のほうが人工知能の理論を参考にして研究の着想を得ている場合もあるくらいですから*1
活性化関数って何?
出力を得るために噛ませている関数のことです。どんな関数が用いられるのかは隠れ層なのか出力層なのか、回帰問題なのか分類問題なのか、など様々な理由で使い分けられています。この活性化関数の違いで学習の正確さ等も大きく変わってくるので、とても重要な役者です。ここで詳述するのには色々足りないのでまた別記事としてアップしようと思います。少々お待ちを。
ちなみに一般に単純パーセプトロンで用いられる活性化関数はステップ関数です。
以上がパーゼプトロンのお話でした!わかりにくいところや誤植があったらぜひ一言ください!お待ちしています!
では。