Python
パーセプトロン

パーセプトロンの勉強 ANDゲート NANDゲート ORゲート

10/16 18:53
shiracamusさんよりいただいた編集リクエストの部分を訂正しましたw
ありがとうございます!!

※復習として、自分はこう解釈しているというものになるので、間違ってるところがあれば指摘お願いしますw

参考書はゼロから作るDeepLearning

パーセプトロンとは・・

複数の信号の(x)入力を受け取り、1つの信号( 1 or 0 )を出力する。

複数の信号 x1,x2 があるとする。
その信号に重みw1, w2 が乗算され その総和がyとして出力される

まとめるとx1w1+x2w2 = y

この時にある限界値(閾値:θ)を超えたときにだけ1が出力される
つまり

【θ < y = 1】【θ ≧ y = 0】

パーセプトロンを使ってANDゲートについて考える

ANDゲートの真理値表はこんなかんじ

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

x1,x2が1のときだけ1が出力される

これを表現するためには 重み(w1,w2)と閾値(θ)の値を決めなければならない。

作るのはすごく簡単で(w1, w2, θ)と考える場合(1.1, 2.1, 2.2)で代入すると

x1w1 + x2w2 = y

【θ ≧ y】 or 【θ < y】
上から当てはめていくと

0*1.1 + 0*2.1 = 0
1*1.1 + 0*2.1 = 1.1
0*1.1 + 1*2.1 = 2.1
1*1.1 + 0*2.1 = 3.2

θ = 3.2 なので 2.1以下は0となり
上から
0
0
0
1
となります。

NANDゲート、ORゲートについて

NANDゲートとは Not AND を意味しており、AND回路の真逆のゲートになります。
ANDゲートを実現するパラメーターの符号を反転するだけでNANDゲートになるみたいです。

ORゲートとは複数の入力信号の1つが 1 であれば 出力も 1 になります。

つまり簡単に書くと

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

になります。

適当にパラメータ(w1, w2, θ)を設定してみます

w1 = 0.5 w2 = 0.2  閾値 = 0

0 + 0 = 0
0.5 + 0 = 0.5
0 + 0.2 = 0.2
0.5 + 0.2 = 0.7

θ < y = 1 という条件なので

上から 
0
1
1
1

つまり機械学習は・・

今回はパラメータを自分で決めてきたけど、機械学習をさせる場合にはこのパラメータをPCに自動で決めさせる。
適切なパラメータを導き出すために学習モデルを人が与え、PCに決めてもらう・・という解釈であってるはず。

最後にPython3で実装する

Perceptron.py
# coding: utf-8

# ANDゲート
def AND(x1, x2):
    w1, w2, theta = 1.1, 2.1, 2.2  # 数値のパラメータは自分で決めている
    y = x1*w1 + x2*w2
    if y <= theta:
        return 0
    elif y > theta:
        return 1

# NANDゲート

def NAND(x1, x2):
    w1, w2, theta = -1.1, -2.1, -2.2  # 数値のパラメータは自分で決めている
    y = x1*w1 + x2*w2
    if y <= theta:
        return 0
    elif y > theta:
        return 1

# ORゲート

def OR(x1, x2):
    w1, w2, theta = 0.5, 0.2, 0  # 数値のパラメータは自分で決めている
    y = x1*w1 + x2*w2
    if y <= theta:
        return 0
    elif y > theta:
        return 1

print(AND(0, 0))
print(AND(1, 0))
print(AND(0, 1))
print(AND(1, 1))
print("--------")
print(NAND(0, 0))
print(NAND(1, 0))
print(NAND(0, 1))
print(NAND(1, 1))
print("--------")
print(OR(0, 0))
print(OR(1, 0))
print(OR(0, 1))
print(OR(1, 1))
print("--------")