本文へ移動
カテゴリ

Webマーケ

Webマーケの記事すべてSEOサイト運営データマネジメントビジネス・マーケ概論広告

インタビュー

インタビューの記事すべて

おすすめサービス

おすすめサービスの記事すべて

おすすめ勉強法

おすすめ勉強法の記事すべて

おすすめ書籍

おすすめ書籍の記事すべて

データサイエンス

データサイエンスの記事すべてデータ解析品質工学多変量解析機械学習生成AI統計学

プログラミング

プログラミングの記事すべてPythonRSQLプログラミングスクール

スタビジについて

記事一覧運営者情報

【手計算で紹介】パーセプトロンを簡単な例でわかりやすく解説!

目次
ウマたんウマたん

当サイト【スタビジ】の本記事では、パーセプトロンについて分かりやすく簡単な例で徹底的に解説していきたいと思います!パーセプトロンを理解できればニューラルネットワークやディープラーニングの理解が早まるので是非おさえておきましょう!

こんにちは!

外資系でのデータサイエンティストを経て現在は会社経営をやっているウマたん(@statistics1012)です!

この記事ではディープラーニングやニューラルネットワークの基本となる「パーセプトロン」について見ていきたいと思います。

パーセプトロンについては以下の書籍「ゼロから作るディープラーニング」について詳しく載っています。

この記事では、この書籍を参考にしながら解説していきたいと思います。

パーセプトロンを理解しておくだけで、ニューラルネットワーク・ディープラーニングの理解がビックリするくらい進むので是非この記事で理解を深めてください!

動画でも解説しているので以下もあわせてチェックしてみてください!

YouTubeの動画

パーセプトロンの仕組み

AI

パーセプトロンとは、ローゼンブラットという研究者によって1957年に考案されたアルゴリズムです。

非常に古くからある、このパーセプトロンですが、ニューラルネットワークそして多層ニューラルネットワークであるディープラーニングにつながる大事なアルゴリズムなのです。

パーセプトロンとはある信号を入力として受け取り、あるルールに基づいて変換し、特定の信号を出力するものです。

3層構造のニューラルネットワーク

パーセプトロンの考え方は、人間の神経回路が信号を伝達していく流れをシンプルにしたものなんです。

このパーセプトロンでは、信号を流す(1)か流さない(0)かの2値の値で表現します。

ある入力信号x1,x2に対して重みを付けて足し合わせたものを出力yとします。

重みは適当にw1,w2と付けておきましょう!

こんな形の絵でイメージしてください。

パーセプトロン

この時yは決められた閾値に応じて反応します。

特定の閾値θを超えた場合1を出力し、超えなかった場合は0を出力します。

これを式で表すと以下のようになります。

y={0  (w1x1+w2x2<=θ)1  (w1x1+w2x2>θ)\begin{darray}{rcllll} y= \left\{ \begin{array}{l} 0~~(w_1x_1+w_2x_2<=\theta) \\ 1 ~~ (w_1x_1+w_2x_2>\theta) \end{array} \right. \end{darray}

こんな形でパーセプトロンを定義します。

この時、x1、x2は信号を流すか流さないかの1もしくは0になるのでした。

その際に以下のようにx1とx2の組み合わせに対してyを出力したいとしましょう。

こんな組み合わせです。

x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1

x1,x2のどちらかが0であれば0を出力し、どちらも1であれば1を出力するというものです。

この時(w1,w2,θ)の組み合わせには何があるか考えてみましょう!

ロボたんロボたん

うーん、なんとなくたくさん組み合わせが考えられそうな気がするけど・・・

ウマたんウマたん

そうなんだ!実は無数の組み合わせが考えられるんだよ!

このようになる(w1,w2,θ)の組み合わせは実はたくさん考えられるのですが、例えば(0.4,0.4, 0.5)などが1つの例になります。

これを先程の式に当てはめてみると、、、このようになり、

y={0  (0.4x1+0.4x2<=0.5)1  (0.4x1+0.4x2>0.5)\begin{darray}{rcllll} y= \left\{ \begin{array}{l} 0~~(0.4x_1+0.4x_2<=0.5) \\ 1~~ (0.4x_1+0.4x_2>0.5) \end{array} \right. \end{darray}

ちゃんと、

0.4×0+0.4×0=0<=0.5  y=0\displaystyle 0.4×0+0.4×0=0<=0.5~~y=0
0.4×1+0.4×0=0.4<=0.5  y=0\displaystyle 0.4×1+0.4×0=0.4<=0.5~~y=0
0.4×0+0.4×1=0.4<=0.5  y=0\displaystyle 0.4×0+0.4×1=0.4<=0.5~~y=0
0.4×1+0.4×1=0.8>0.5  y=1\displaystyle 0.4×1+0.4×1=0.8>0.5~~y=1

と表のようになってますね!

続いて以下のようにx1とx2の組み合わせに対してyを出力したいとしましょう。

x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 0

こちらは先の組み合わせとは完全に逆のパターンであり、今度は1つでも0が入力にあれば出力は1になって、入力がどっちも1であれば出力は0になります。

この時も同様にパラメータ(w1,w2,θ)を変えれば実現することが出来ます。

先ほどの逆なので先ほどのパラメータを反転させて(0.4,0.4, 0.5)などのようにすれば実現することができます。

y={1  (0.4x1+0.4x2<=0.5)0  (0.4x1+0.4x2>0.5)\begin{darray}{rcllll} y= \left\{ \begin{array}{l} 1~~(0.4x_1+0.4x_2<=0.5) \\ 0~~ (0.4x_1+0.4x_2>0.5) \end{array} \right. \end{darray}

これは問題なさそうですね。

さらに以下のような組み合わせも問題なくパラメータをいじることで実現することができるのが分かるでしょう。

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

今回は、1つでも入力に1があれば出力が1になって、どっちも入力が0の時だけ出力が0になってますね!

例えば、(w1,w2,θ)に(1,1,0.5)を入れれば実現できますね

y={0  (x1+x2<=0.5)1  (x1+x2>0.5)\begin{darray}{rcllll} y= \left\{ \begin{array}{l} 0~~(x_1+x_2<=0.5) \\ 1~~ (x_1+x_2>0.5) \end{array} \right. \end{darray}

1×0+1×0=0<=0.5  y=0\displaystyle 1×0+1×0=0<=0.5~~y=0
1×1+1×0=1>0.5  y=1\displaystyle 1×1+1×0=1>0.5~~y=1
1×0+1×1=1>0.5  y=1\displaystyle 1×0+1×1=1>0.5~~y=1
1×1+1×1=2>0.5  y=1\displaystyle 1×1+1×1=2>0.5~~y=1

ちゃんと組み合わせを実現できていることが分かりました!

このように特定の入力に対して特定の出力がされるように人間の手でパラメータをいじってルールを作ることができました。

今回は人間が手動で行いましたが、これを機械が調整してくれるのが機械学習であり、ニューラルネットワーク→ディープラーニングにつながっていきます。

このパーセプトロンの考え方は非常に重要であり、ディープラーニングを学ぶ上で重要な基礎となるポイントなので必ずおさえておきましょう!

パーセプトロンはどんな組み合わせでも表現できる?

quiz

ロボたんロボたん

なるほど〜、こんな単純な仕組みなのに色んな組み合わせを表現できるんだね!どんな組み合わせでもパーセプトロンで表現できるの??

ウマたんウマたん

どうかなー?見ていこう!

さて、ここで1つの疑問がわきます。

どんな組み合わせでもパラメータをうまく調整すれば表現できるようになるのでしょうか?

例えば以下のような組み合わせはどうでしょう?

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

どうやったら実現できるか考えてみましょう。

いかがでしょうか?

実はこの組み合わせは、これまでのパーセプトロンでは表現することができないのです。

なぜ実現できないのか考えてみましょう。

先ほどの以下の組み合わせは(w1,w2,θ)の(1,1,0.5)を入れた場合に実現できるのでした。

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

式は以下のようになります。

y={0  (x1+x2<=0.5)1  (x1+x2>0.5)\begin{darray}{rcllll} y= \left\{ \begin{array}{l} 0 ~~ (x_1+x_2<=0.5) \\ 1 ~~ (x_1+x_2>0.5) \end{array} \right. \end{darray}

この状態がどんな状態なのか図で見てみましょう。

x2とx1で軸を取って平面を展開した時に

x2=−x1+0.5\begin{darray}{rcllll} x_2 = -x_1+0.5 \end{darray}

の関数を境界に1か0が分かれているので以下のようになるということが分かると思います。

そして以下の表の組み合わせをy=0を◯、y=1を△にしてプロットしてみると・・・

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

ちゃんと直線で分離することが出来ているのが分かると思います!

この境界範囲ならパラメータを動かしても問題ないでしょう。

しかし、先ほど考えてみた以下の組み合わせはいかがでしょうか?

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

x1x2を軸に取ってプロットしてみると以下のようになります。

実はこれは直線では分けることができないのです。

どう頑張っても、座標(1,1)の◯を直線で捉えにいこうとすると△を内包してしまうことが分かると思います・・

パーセプトロン

直線で判別することを線形判別と言いますが、これは線形判別ではうまく分けることができない組み合わせなのです。

しかし、このような組み合わせは現実問題には多く発生します。

複数のパーセプトロンを重ねる

stories data

ではどのようにすればこのような組み合わせを判別できるのでしょうか?

実はここでパーセプトロンを重ねるという発想が登場します。

なんと、単一のパーセプトロンでは上手く表現できないものも複数のパーセプトロンを使うことで表現することができるのです。

パーセプトロン2

以下の組み合わせによるアウトプットのさらなる組み合わせによって実現されるのです。

x1 x2 y1 y2 z
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0

x1とx2の組み合わせから生まれたy1とy2からzが生まれています。

分解すると、

x1 x2 y1
0 0 1
1 0 1
0 1 1
1 1 0
x1 x2 y2
0 0 0
1 0 1
0 1 1
1 1 1

は今まで見てきた組み合わせであり、

y1 y2 z
1 0 0
1 1 1
1 1 1
0 1 0

yを入力としてzを出力する、このパターンも1つでも0が入力であったら出力が0になる以下の組み合わせと同じであることが分かると思います。

x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1

これら1つ1つを切り取ってみると実は今まで登場した組み合わせと一緒なのですが、複数組み合わせることでより複雑な分類問題に対応できるようになるのです!

これにより単一のパーセプトロンで実現できないことが実現できました。

これからニューラルネットワークやディープラーニングの世界に入っていきますが、このパーセプトロンの考え方が土台になっており非常に重要なので、必ずおさえておきましょう!

パーセプトロン まとめ

ここまででパーセプトロンについて簡単に分かりやすく解説してきました!

ウマたんウマたん

興味のある人は実装もしてみよう!

ここからニューラルネットワークやディープラーニングの世界に入っていきます。

ディープラーニングについては以下の書籍が非常に分かりやすくオススメなので是非チェックしてみてください!

パーセプトロンから更に踏み込んでニューラルネットワークやディープラーニングの実装についてはスタビジアカデミー(スタアカ)でまとめているので興味のある方は見てみてください!

業界最安値のデータサイエンス専門スクール「スタアカ」

スタアカ(スタビジアカデミー)のトップページ

また以下の記事でディープラーニングの勉強方法やディープラーニングが学べるスクールについてまとめていますのであわせて見てみてください!

【初心者向け】ディープラーニングの勉強ロードマップまとめ!当サイト【スタビジ】本記事では、ディープラーニングの学習方法について詳しくまとめていきます!ディープラーニングは難しいと思われがちですが、アルゴリズムは意外とシンプルで実装自体も非常に簡単なんです!Pythonでの実装もおこなっていきますよー! ディープラーニング(深層学習)が学べるスクールおすすめ4選!当サイト【スタビジ】の本記事では、深層学習(ディープラーニング)の勉強ができるスクールをまとめていきます!これからのAI発展を担うディープラーニングの理論と実装についてしっかり学んでおきましょう!スクール選びは非常に大事なので是非参考にし…
スポンサーリンク

ウマたんスタビジ編集長

大学院は理系の統計科学研究室で、ベイズ統計学・時系列分析・異常検知を研究。日系・外資の消費財メーカーのデータサイエンティストを経て、現在は会社を経営しながらデータサイエンティストとして働いています。

スタビジアカデミー

読んだ内容を、スタアカの「機械学習概要」コースで身につける

データサイエンス・AIを、動画と課題で体系的に学べるオンラインスクール。最初のレッスンは無料で見られます。