프랑크 로젠블라트에 의해 1957년에 고안됨
퍼셉트론의 흐름은 마치 전기회로의 스위치가 열리고 닫히는 것, 또는
전기 저항값에 따라 변하는 전류량과 비슷함
입력신호 x로부터 고유한 가중치 w가 곱해지면서 임계치를 넘어설 경우 1이 출력이 됨
AND 게이트
X1 | X2 | Y |
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
AND의 파이썬 구현
def AND(x1, x2):
w1,w2,theta = 0.5, 0.5,0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
위의 식에서 세타는 기준값임 식을 좀 더 보기 좋게 표현하면
import numpy as np
x = np.array([0,1])
w = np.array([0.5,0.5])
b = -0.7 #세타값이 좌변으로 넘어가면서 편향값이 됨
if np.sum(w*x) + b <= 0: #이 식의 값이 0을 넘어가면 1이 출력
return 0
else:
return 1
NAND 게이트(AND의 반전)
X1 | X2 | Y |
1 | 1 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
0 | 0 | 0 |
def NAND(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5]) # AND와 비교하여 가중치만 다름(-)
b = 0.7
if np.sum(w*x) + b <= 0:
return 0
else:
return 1
OR 게이트
X1 | X2 | Y |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
def OR(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5]) # AND와 비교하여 가중치만 다름
b = -0.2
if np.sum(w*x) + b <= 0:
return 0
else:
return 1
XOR게이트는 단층 퍼셉트론으로는 구현할 수 없음
2층 퍼셉트론을 활용하면 XOR게이트 표현이 가능
다층 퍼셉트론은 비선형의 영역도 표현이 가능
반응형