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】
上から当てはめていくと
01.1 + 02.1 = 0
11.1 + 02.1 = 1.1
01.1 + 12.1 = 2.1
11.1 + 02.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で実装する
# 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("--------")