単純パーセプトロンの仕組みとPythonによる実装をチェック

ニューラルネットワーク、深層学習を体系的に勉強していくにあたって、いろいろな解説書で最初に解説されるアルゴリズムが「単純パーセプトロン」です。

ニューラルネットワークを勉強していくにあたって、まず最初に知ってほしいアルゴリズムだと言えます。

単純パーセプトロンの仕組みを知って、「このアルゴリズムが何ができて何ができないのか」を理解しましょう。

この記事で解説すること

  • 単純パーセプトロンとは
  • 単純パーセプトロンでできること
  • 単純パーセプトロンでできないこと

単純パーセプトロンとは

「パーセプトロン」とは、複数の入力データ(入力信号)に対して、一つの値を出力する関数です。

後述しますが、パーセプトロンを複数組み合わせるアルゴリズムもありますので、一つしか使わないものを単純パーセプトロンと呼びます

入力信号をx1, x2で表します。

また、出力信号をyとしました。

ここで、各入力信号とは、あるデータの特徴を表します。

それぞれの特徴が目的の値(y)を計算するときにどの程度重要なのかを表すパラメータ(結合重み)として、w1,w2を使います。

図中の数式のように入力信号と、それに対応するwをかけあわせた値をすべて足し合わせた値を出しましょう。

この値がしきい値θ以下ならば0、しきい値θより大きければ1を返す関数がパーセプトロンです。

このパーセプトロンを使うと、簡単な分類問題などを解くことができます。

単純パーセプトロンの例題

ANDゲートを用意する

単純パーセプトロンの例題として、よく論理演算をパーセプトロンで実装するものがあります。

ここでも、単純パーセプトロンを使って、ANDゲートを実装してみましょう。

まずはライブラリのimport。

ANDゲートの表を作ってみます。

この記事ではANDゲートについてのみ解説しますが、実際に手元で勉強していく際には、ORゲートなどのものも試してみてください。

signal変数に論理値の入力信号をまとめました。

これを元にして他の論理演算も試してみてくださいね。

さて、ANDゲートの正解データをDataFrameで作ってみましょう。

AND演算「入力がどちらも1ならば1、それ以外ならば0」を返します。

ここで、DataFrameの各行0~3までをそれぞれ入力データとして見てみると、x1,x2は各データの特徴になります。

yはデータを受け取ったパーセプトロンに返してほしい出力値です。

このyの値と同じ値を返してくれれば、パーセプトロンでANDゲートを実装できたことになります。

パーセプトロンの実装

では、PythonでANDゲートを再現するパーセプトロンを実装しましょう。

パーセプトロンの最も簡単な実装では、w1,w2などのパラメータはプログラマが自分で値を与えます

この値については、パーセプトロンの式(二元一次方程式)を手作業で解くことで与えられますね。

ここでは、w1とw2は0.5としました。

また、しきい値θについても決める必要があります。

ここでは0.7としてみましたが、これらの値は他にも適した組み合わせがあります。

考えてみてください。

さて、このAND_gate関数が実際にANDゲートを再現できているかチェックしましょう。

すべての入力データの組み合わせに対して答えを出してみます。

[出力結果]

この値は最初に作ったANDゲートのデータフレームのy列と同じ値になっています。

これでパーセプトロンを使ったANDゲートの実装ができましたね!

バイアスの導入

バイアスを導入したパーセプトロン

さて、先程までのパーセプトロンでは、しきい値θという値が登場しました。

ですが、このθの値、wと同様にプログラマが変更するべきパラメータでした。

ここからは、このしきい値θをバイアス(bias)という値に置き換えたパーセプトロンを実装してみます。

biasを式中ではbとしました。

このとき、b=-θと考えて式を変形すると、上のように右辺(不等式の右側)を0で統一できますね。

こっちのほうが見やすくて実装も考えやすいので、普通はこちらが使われます。

バイアスを導入したパーセプトロンの実装

では先程と同じ例題を、バイアスを使ったパーセプトロンで試してみましょう。

コードの修正点は

  1. thetaの部分がbになって値がマイナスになっている
  2. 条件式が0より大きいかどうかになっている

の二箇所です。

[出力結果]

正しく動作していますね。

単純パーセプトロンの限界

単純パーセプトロンで簡単なANDゲートの再現ができることがわかりました。

ここで紹介はしませんでしたが、この他にもORゲートやNANDゲートなどが実装できます。

さて、ではこの単純パーセプトロンを使えばすべての論理演算が実装できるのでしょうか?

[ANDゲートのグラフ]

ANDゲートの例題で使った入力信号を二次元グラフにしました。

通常x軸があるところがx1軸、y軸があるところがx2軸、黄色がy=1, ピンクがy=0です。

青色の線は単純パーセプトロンがこれらのデータ点を分類するときに使っている境界線です。

このように、単純パーセプトロンでは直線を一本引いて境界線を決めています。

これで分類できる問題ならば分類が可能そうですが、以下のような問題ではどうでしょうか。

[XORゲートのグラフ]

このグラフでは、一本の直線で境界線を引くことができません

このような問題の場合、境界線を一本しか引けない単純パーセプトロンでは再現することができませんね。

これが単純パーセプトロンの限界です。

これを克服するための方法にはいくつか方法がありますが、順当に考えると

「パーセプトロンを複数使って多層化する→多層パーセプトロン」

を考えるのが一般的です。

これについてはまた別の記事で!

まとめ

この記事では、単純パーセプトロンについて紹介し、理論と実装を見ていきました

また別の記事で、単純パーセプトロンを拡張したアルゴリズムについて紹介していきます。

まずは単純パーセプトロンを理解して、ニューラルネットワークの世界に一歩踏み出しましょう!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説