LoginSignup
9
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-15

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("--------")

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4