【DeepLeaning】 パーセプトロン

Deep Learning とは何なのか・・・まったく知らない状態から挑戦してみたいと思います!

パーセプトロンとは?

パーセプトロンは、人工ニューラルネットワークの一種であり、最も基本的な形式のニューラルネットワークです。
パーセプトロンは、2つの入力と1つの出力を持つ単純なモデルで、入力は数値で表されます。

パーセプトロンは入力に対して重み付けを行い、それらの重み付き和を計算します。
この重み付き和がある閾値を超えた場合、パーセプトロンは1を出力し超えなかった場合は0を出力します。
これは、分類問題を解決するために使用されます。

パーセプトロンは、1960年代にフランク・ローゼンブラットによって開発されました。
その後、多層パーセプトロンの発展により、より複雑な問題を解決することができるようになりました。

「重み」はどのようにして決定する?

パーセプトロンの重みは、訓練データに基づいて自動的に決定されます。
訓練データには、入力と正しい出力が与えられます。

訓練プロセスでは、まずランダムな初期値で重みが設定されます。
次に、訓練データの各入力に対してパーセプトロンの出力と正解を比較し誤差を計算します。
そしてこの誤差を最小化するように重みを調整することでパーセプトロンを訓練します。

重みの調整は、誤差逆伝搬法と呼ばれるアルゴリズムを使用して行われます。
このアルゴリズムでは誤差を出力層から逆伝搬させ、各層の重みを調整していきます。
このようにして、訓練データ全体に対する誤差を最小化するように、重みを調整します。

重みに電流で言うところの「抵抗」とのこと。

パーセプトロンとゲート

ANDゲート

2つの入力値を受け取り両方の入力が1の場合にのみ1を出力しそれ以外の場合には0を出力する論理演算。

ANDゲートを実装する単純なパーセプトロンは、2つの入力値に対して、それぞれの入力に対する重み付けを行い重み付き和を計算します。
具体的には、2つの入力に対してそれぞれ重みを設定し重み付き和が閾値を超えた場合に1を出力するようにします。
例えば、2つの入力がx1とx2で、それぞれの重みをw1とw2とすると、重み付き和は以下のようになります。

w1 * x1 + w2 * x2

閾値は1で設定することができます。つまり、重み付き和が1以上の場合に1を出力し、重み付き和が1未満の場合には0を出力します。

ANDゲートを実装するパーセプトロンは、入力が(0, 0)の場合に0を出力し、入力が(0, 1)、(1, 0)、(1, 1)の場合には1を出力します。

NANDゲート, ORゲート

NANDゲートは2つの入力値を受け取り両方の入力が1の場合を除き1を出力する論理演算です。

NANDは「not and」を意味します。

NANDゲートを実装するパーセプトロンは、ANDゲートとは異なり重みと閾値を負の値に設定することで実現できます。

例えば、2つの入力がx1とx2でそれぞれの重みを-w1と-w2とし、閾値を-w0とすると、NANDゲートは以下のように実装されます。

w1 * x1 + w2 * x2 + w0 <= 0 → 1
w1 * x1 + w2 * x2 + w0 > 0 → 0

この実装では、重み付き和が負になる場合に1を出力しそれ以外の場合に0を出力します。

ORゲートは2つの入力値を受け取り、どちらかの入力が1の場合あるいは両方の入力が1の場合に1を出力しそれ以外の場合には0を出力する論理演算です。

ORゲートを実装するパーセプトロンはANDゲートとは異なる重みと閾値を設定することで実現できます。
例えば、2つの入力がx1とx2でそれぞれの重みをw1とw2とし閾値をw0とするとORゲートは以下のように実装されます。

w1 * x1 + w2 * x2 + w0 <= 0 → 0
w1 * x1 + w2 * x2 + w0 > 0 → 1

この実装では、重み付き和が0以下の場合に0を出力し、それ以外の場合に1を出力します。

重要なこと

パーセプトロンを用いることで論理回路を実装することができ、つまりニューラルネットワークの基盤となることでもあります。
パーセプトロンは、1層の単一のニューロンで構成された最も単純なニューラルネットワークであり多層に重ねることでより複雑な問題を解決することができます。

また、パーセプトロンを基に、多くの種類のニューラルネットワークが開発されています。

多層に重ねる?

「多層に重ねる」というのは、階層的な構造を持つということです。
建物を考えることわかりやすいです。

1つの部屋は壁・天井・床で構成されています。
これらの要素が組み合わさって部屋全体が構成されます。
この部屋を建物全体に適用すると考えると、1階、2階、3階…と階層的に構造が重なっていく様子がイメージできるかもしれません。

同様に、ニューラルネットワークにおいても多くの場合複数の層が階層的に重なっています。
最初の層は入力を受け取り次の層にその出力を渡し、次の層でさらに処理を行うといったように入力から出力までの処理が段階的に進んでいく構造です。

各層は、前の層の出力を入力として受け取りそれを加工して新たな出力を生成します。
これにより、より複雑な問題を解決することができます。
建物と同様に、層を重ねることでより高度な機能を実現することができます。