AIとは何か

「単純パーセプトロン」って何?その理論と実装方法を5分で解説

「単純パーセプトロン」って何?その理論と実装方法を5分で解説

最近ではあらゆる分野でディープラーニングについての関心が大きくなっていますよね。実際、第4次産業革命と呼ばれる技術革新では、これらが大きく影響するといわれていわれています。そして、このディープラーニングについて語る上で欠かせないのが単純パーセプトロンと呼ばれるモデル。

この単純パーセプトロンとは、ディープラーニングの基礎とも呼べるものであり、こちらを発展させたことでニューラルネットワークやディープラーニングが生まれました。

今回はそんな単純パーセプトロンについてニューラルネットワークの関連性や、パーセプトロンと単純パーセプトロンの違い。また、単純パーセプトロンを使うメリットやデメリット、具体的な単純パーセプトロンの実装方法を紹介していきます。

ぜひ、単純パーセプトロンがどのようなものであるのかを知り、興味が出てきたら実際に扱ってみてください。

最後には説明してきた単純パーセプトロンの限界を打ち破る方法についてお伝えしていきます。

まずはパーセプトロンとは何か、を解説

まずはパーセプトロンとは何か、を解説

パーセプトロンについて説明していく前に、その土台となるニューロンの仕組みと形式ニューロンについて説明してきましょう。

なお、ニューロンとは脳の神経細胞のことで以下の4つから構成されています。

  • ニューロン本体
  • 入力端子の樹状突起
  • ニューロン同士を繋げるシナプス
  • 出力を行う軸索

そして、これらが細胞内の働きによって電位差を生じさせ、ある一定の値を超えると電気が流れるようになっているのです。そのため、この仕組みによって人間は電気信号を伝えて体に命令を行ったり、ものを記録するなどといったことができます。

これがニューロンの仕組みなのですが、これをモデル化してあらわしたのが形式ニューロンと呼ばれるものです。

具体的には入力に対してそれぞれ重みを付加して総和する。その後これが一定値を超えた場合には1を出力し、超えない場合には0を出力するというものです。

以上がニューロンの仕組みと形式ニューロンについてになります。

そして、本題のパーセプトロンとはこの形式ニューロンを以下のように数式化したものです。

  1. u=ΣWiXi(i=1〜n)
  2. f(u)={1(u>0),0(u≦0)}
  3. y=f(ΣWiXi(i=1〜n)−θ)) or y=f(ΣWiXi(i=0〜n)),X0=1,W0=θ

数式だけをみていくとわかりにくいかもしれませんが、おおよそ上で説明したことを数式にしてやっているだけです。

具体的にはまず、1は入力Xに対して重みWを付けて総和してuを計算しています。
次に、2は1の値がニューロンに入力され、一定値(しきい値:θ)を超えているのかを判断し、結果に応じて出力するという仕組み。
最後に3はこれまでの計算の出力結果のまとめになります。

したがって、パーセプトロンは神経組織ニューロンをモデル化した、形式ニューロンを数式化したものであることがわかるでしょう。

それではこれを踏まえて、パーセプトロンとニューラルネットワークの関連性を説明していきます。

パーセプトロンとニューラルネットワークの関連性

パーセプトロンとニューラルネットワークの関連性

上記で説明したようにパーセプトロンとは、神経組織ニューロンをモデル化した形式ニューロンを数式化したものです。ここでみなさんに考えてほしいのが、元の神経細胞ニューロンは脳ではどのような状態であるかということ。

実は脳では100億個以上のニューロンが結びつき、ネットワークを構成しているのです。具体的には沢山のニューロンが軸索とシナプスを通してつながっている構造。これによって脳では電気信号が流れ、機械のような回路を形成しています。
そして、このニューロンが結びついた回路からすれば、ニューロンはこの回路においての1つの部品であるといえるのです。

それでは話をパーセプトロンとニューラルネットワークの関係性に戻すと、今言ったことがパーセプトロンにも当てはまります。

というのもニューラルネットワークとは、その名前にあるようにパーセプトロンを単位として構成されたネットワークであるのです。具体的には複数のパーセプトロンが結びつき以下の3層から構成されています。

  • 入力層
  • 中間層
  • 出力層

これらが上で説明したパーセプトロンに比べてどのような違いがあるのかといえば、特に重要なのが処理を行う中間層。こちらは入力層からの出力を入力として受け取り、処理を行って出力層に出力していく仕組みです。

これによって、パーセプトロンのような単純な処理ではなく、より複雑な処理が中間層でできるようになりました。
なお、この中間層を2層以上持たせることに成功したものを、今日では有名なディープラーニング(深層学習)と呼んでいます。

そして、このディープラーニングでは猫の画像を人間以上に機械が判別できるようになるなど。様々な分野で大きな成果を上げていることからも、この中間層がいかに重要であるのかがわかるでしょう。

したがって、以上の点からパーセプトロンとニューラルネットワークは、1つの構成部品とそれらで構成された回路という関係性があるのです。

ただし、この3層からなるニューラルネットワークは多層パーセプトロンとも呼ばれる、ニューラルネットワークの仕組みとしては新しいもの。

それでは以下ではより仕組みとしては古く、単純に作られているニューラルネットワーク、単純パーセプトロンについて説明していきましょう。ぜひ、単純パーセプトロンとパーセプトロンとの違いを理解してください。

パーセプトロンと単純パーセプトロンの違いとは

パーセプトロンと単純パーセプトロンの違いとは

それでは、パーセプトロンと単純パーセプトロンの違いを説明していきましょう。上でも説明したようにパーセプトロンは、ニューラルネットワークという回路を構成する1つの部品にあたるものです。

そして、これらが集まることでニューラルネットワークは回路として機能します。

こちらに関しては多層パーセプトロンという複雑な仕組みのもの以外に、前段階となる単純パーセプトロンというものがあります。具体的には以下のようなもの。

  • パーセプトロンで構成されている
  • ニューラルネットとしては入力層と出力層の2層で構成される
  • 出力層は基本的には1つでパーセプトロンと構造は似ている
説明していくと単純パーセプトロンはパーセプトロンを使い、ニューラルネットワークが構成される点は多層型と同様です。しかし、大きな違いは処理を行う中間層がないということ。これによって、単純パーセプトロンは複雑な処理ができないという弱点があるのです。
また、多層パーセプトロンで表現した場合には出力結果が複数になる場合でも簡単に対応できます。ただし、これが単純パーセプトロンでは基本的には出力層が1つであるため、複雑なことがらを処理しようとすると場合によっては処理できないこともあるのです。

なお、数式でこの単純パーセプトロンを表すと以下のようになります。

f(x)={1(W0+W1X1+W2X2+…+WnXn≧θ),0(W0+W1X1+W2X2+…+WnXn<θ)

こちらは「まずはパーセプトロンとは何か、を解説」で説明した式から求められます。

これは構造的にはパーセプトロンも単純パーセプトロンも、複数の入力から1つを出力するという構造であるから。そのため、実際、パーセプトロンと単純パーセプトロンを区別しない場合もあります。

以上がパーセプトロンと単純パーセプトロンについてです。

これまでのことをまとめていくとパーセプトロンと単純パーセプトロンには、ニューラルネットワークにおいての部品と回路という違いがありますが、両者の入出力の構造は似ているという共通点があります。

単純パーセプトロンを使うメリット

単純パーセプトロンを使うメリット

それではこれらを踏まえて単純パーセプトロンを使うメリット、デメリットをお伝えしていきましょう。

単純パーセプトロンを使うメリットとしてあげられるのは以下のような点です。

単純パーセプトロンでは数式などが非常にシンプル

まず、上記で示した数式をみればわかりますが、単純パーセプトロンは複雑なものではなく非常にシンプルな数式で表せます。内容としてはパーセプトロンと構造が同じといっても過言ではないので、高校数学程度の知識やパーセプトロンが理解できれば基本的な考え方はすぐに理解できるでしょう。

2クラス分類を行う際に向いている

また、単純パーセプトロンでは複雑でない事象の判別に向いています。具体的には身長と体重から男女を判別する場合など。これらのように2つのデータから1つの結果を出力する目的にはうってつけの方法であり、実際にこちらをPythonで実装することも簡単にできます。

ディープラーニングなどを学んでいく際の基本となる

さらに、説明したように単純パーセプトロンが基本となり、そこから多層パーセプトロンやディープラーニングが生まれて行ったという経緯があります。そのため、ディープラーニングなどを学んでいく際には、この単純パーセプトロンから始めていくのがわかりやすいのです。

以上が単純パーセプトロンを使うメリットになります。

つまり、単純パーセプトロンはそれ自体がわかりやすく、2クラス分類など単純な事柄を扱う際に向いているため、初歩のディープラーニング学習としておすすめということ。

ただし、単純パーセプトロンを使うことには当然デメリットもあります。それではそのデメリットもお話しましょう。

単純パーセプトロンを使うデメリット

単純パーセプトロンを使うデメリット

単純パーセプトロンを使うデメリットとしてあげられるのは以下のような点です。

単純パーセプトロンでは線形非分離の問題に対応できない

まず、線形分離とはある集団を線形、つまり直線で2つに分けることを意味しています。わかりやすい例としてデジタル回路などで使われている論理回路、ORゲートで説明していきましょう。

なお、このORゲートとは、AとBという2つの入力うちどちらかが1であった場合に1を出力するもので、以下のように表すことが可能です。

  • 0を出力する場合:(0,0)
  • 1を出力する場合:(1,1)、(1,0)、(0,1)
これらを横軸A,縦軸Bでプロットしてみると、ちょうど0を出力する場合と1を出力する場合の点の間に何らかの直線をひくことができるでしょう。これが線形分離可能であるということです。

そして、この線形分離可能であることは単純パーセプトロンでは大きなポイントとなり、線形分離可能なら単純パーセプトロンで何らかの判別を行えます。これは入力に対して適切な重みを付与することでプロットの位置を調節し、それによって直線をひけるようにしているため。

ところが2つ以上のより複雑なことがらを判別する場合などには線形分離ができないことがあり、その場合は単純パーセプトロンでは判別できないのです。

こちらについては具体的な例としてXORゲートをご紹介します。

なお、XORゲートとはORゲートと同様にデジタル回路などで使われている論理回路なのですが、排他的論理和というAとBという2つの入力うちどちらかが1の場合は1を出力する。両者が1、もしくは0であるときには入力とは反対の値を出力する性質のものです。

具体的には以下の場合に0or1を出力するもの。

  • 0を出力する場合:(A,B)=(0,1)、(1,0)
  • 1を出力する場合:(A,B)=(0,0)、(1,1)

こちらをORゲートと同様にプロットしていくとあることに気づくでしょう。それはいくら直線をひこうとしても無理であること。つまり、こちらは線形非分離の問題であるのです。

したがって、このXORゲートのように線形非分離の問題ではパーセプトロンは役には立ちません。この問題はパーセプトロンの研究を行っていた際に明らかとなり、当時のブームを終わらせることになりました。

なお、この線形非分離の問題について次の章の最後でどう解決すればよいのかを説明していきます。そのため、以下の単純パーセプトロンの実装方法と併せて理解してください。

単純パーセプトロンの実装方法

単純パーセプトロンの実装方法

それでは、単純パーセプトロンの簡単な実装方法についてみていきましょう。なお、実装にはプログラミング言語Pythonを利用するのが良いです。こちらなら比較的簡単に実装が行えます。

今回は上で紹介したORゲートの単純パーセプトロンを実装してみましょう。

まず、このORゲートでは入力に対して以下の値を出力します。

0を出力する場合:(0,0)
1を出力する場合:(1,1)、(1,0)、(0,1)

次に、こちらを単純パーセプトロンの数式で表すと以下のようになります。

u=W0+W1X1+W2X2
f(u)={1(u>0),0(u≦0)}

さらに、ここでポイントとなるのは重みWの値です。単純パーセプトロンではこちらを変化させることで、出力を変えられるのはこれまで説明してきました。

そのため、今回のORゲートにおいては以下のように重みを設定します。

W1=0.6
W2=0.6
W0=-0.2

後はこれをPythonで実装していけばよいです。具体的には適当な名前、例えば「orgate.py」と名付けて保存します。そして、以下のようにプログラミングしていきましょう。

def orgate(x1, x2):
W1 = 0.6
W2 = 0.6
W0 = -0.2

u = W0 + x1 * W1 + x2 * W2

if u <= 0:
y = 0
else:
y = 1

return y

以上がプログラミングできれば実装としてはokです。

簡単に説明していくと「def orgate(x1, x2):」とはorgateとして関数を定義する。つまり関数名を付けているだけです。

そして、上で設定した重みを入力して1と2の数式をそのままプログラミングしています。後は以下の確認コード入力して正しいのかをみてみましょう。

print(orgate(0, 0))
print(orgate(1, 0))
print(orgate(0, 1))
print(orgate(1, 1))

これらのコードが正しければ以下のように出力されます。

$ python orgate.py
0
1
1
1

これが確認できれば簡単なORゲートの単純パーセプトロンの実装が完了したことになります。なお今回はORゲートの簡単な単純パーセプトロンの実装方法を説明しましたが、他のANDゲートなども重みなどを変えれば実装することが可能。

それではみなさん自身の手で重みを変え、しっかりとそれぞれの論理回路を再現して単純パーセプトロンを体験してみましょう。そしてこれを機会により専門的な単純パーセプトロンの実装などを学んでみてください。

 

単純パーセプトロンのイメージ

今回は単純パーセプトロンについて解説しました。まとめると以下の通り。

  • パーセプトロンは神経組織ニューロンをモデル化した形式ニューロンを数式化したものである
  • パーセプトロンとニューラルネットワークは構成部品とそれらで構成された回路という関係性をもつ
  • パーセプトロンと単純パーセプトロンは部品と回路という違いがあるが両者は似た構造をしている
  • 単純パーセプトロンはシンプルでわかりやすいが、線形非分離の場合には判別ができない
  • 単純パーセプトロンで論理回路を実装すると重みWを変えることで複数のゲートを実装できる

それでは最後に、単純パーセプトロンの限界を打ち破る方法についてお伝えしましょう。

この単純パーセプトロンの限界とはいわゆるこれまで説明した「線形非分離の場合には判別ができない」という点です。こちらについては論理回路のXORゲートの場合では、プロットしていくと直線をひくことができないのは明らかでしたよね。

では、これをどうすれば解決できるのかといえば、複数の論理回路ゲートを用いればよいのです。具体的にはXORゲートでは以下のようにすればパーセプトロンでの判別が可能に。

XOR=AND(OR,NAND)
こちらはどのようなことを意味しているかといえば、XORゲートはORゲートとNANDゲートの両者を、ANDゲートにつなげることで作成できることを意味しているのです。

ちなみにこれらのゲートはどれも線形分離が可能であるため、こちらは線形非分離なものを線形分離可能なもので表現していることになります。

また、これらを実際につなげてみると実はあるものが生まれていることがわかるでしょう。それは構成したネットワークに中間層ができていること。つまり、この線形非分離なものを判別しようとすると入力層と中間層、出力層の3層をもつ多層パーセプトロンが作成されたということです。

したがって、単純パーセプトロンの限界を打ち破りたければ、多層パーセプトロンを構成すれば良いでしょう。今回はXORゲートで説明しましたが、他にも2クラス以上の多クラス分類では効率的にそれぞれを分類できます。

もし単純パーセプトロンの実装をやってみて興味が出てきたのなら、こちらにも挑戦してみてください。そうしていけばいずれこの多層パーセプトロンを発展させた、ディープラーニングにも挑戦できるかもしれません。是非将来に生かしていきましょう。

トップへ戻る
タイトルとURLをコピーしました