티스토리 뷰
전 게시글에서는 하나의 퍼셉트론 (단층 퍼셉트론) 으로 표현할 수 있는 3가지 (AND, NAND, OR) 논리회로를 표현해 보았습니다.
2020/09/13 - [Study/인공지능] - 퍼셉트론 AND, NAND, OR 논리회로 표현하기 ( 인공지능 기초 #2 )
이번에는 하나의 퍼셉트론으로는 만들 수 없는 XOR 게이트를 알아보겠습니다. [다층 퍼셉트론 이용]
XOR 게이트는 배타적 논리합이라는 논리회로 입니다. 입력값이 둘중 한개만 1일때만 1 (true)를 출력합니다.
왜 단층 퍼셉트론으로는 구현 할 수 없을까요?
앞에서 구현해 보았던 OR 게이트의 경우 좌표로 나타내면 아래와 같이 나타납니다.
하지만 xor 같은 경우는 0,0 1,1 일 경우 false 0,1 1,0 일 경우 true 입니다.
위 좌표에서도 볼 수 있듯이 true 와 false 영역을 1차함수인 하나의 퍼셉트론으로는 표현할 수가 없습니다.
실제로 인공신경망을 연구하던 초창기에 xor을 증명할 수 없다는 사실을 깨닫고 많이 좌절하고 인공지능이 조금 소외됐었다고 합니다.
하지만, 다행히 이를 해결할 수 있는 다층 퍼셉트론을 통한 해결방법이 제시되었습니다!
p -> q 명제 증명
p q p->q
T T T
T F F
F T T
F F T
x= [1,2]
y= [3,4]
numpy.array(x)
Out : array([1,2])
numpy.array(y)
Out : array([3,4])
x*y
Out : array([3,8])
numpy.array 를 사용함으로써 x의 벡터연산이 가능하게 만들어준다.
np.sum(x)
Out : 3
np.sum(y)
Out : 7
XOR 게이트 퍼셉트론 in python
import numpy as np
def AND(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = -0.7
tmp = np.sum(w*x)+b
if tmp <= 0 :
return 0
else :
return 1
def NAND(x1,x2):
x = np.array([x1,x2])
w = np.array([-0.5,-0.5])
b = 0.7
tmp = np.sum(w*x)+b
if tmp <= 0 :
return 0
else :
return 1
def OR(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = -0.2
tmp = np.sum(w*x)+b
if tmp <= 0 :
return 0
else :
return 1
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
XOR(0,0)
XOR(0,1)
XOR(1,0)
XOR(1,1)
np.sum(x*w)
tmp = (x1*w1)+(x2*w2)+b //: x1*w1+x2*w2<-b 이것이 퍼셉트론 공식. // tmp = x1*w1+x2*w2 + b 이걸 0보다 크거나 작거나를 판단함으로써 퍼셉트론 공식을 만족시킨다.
3개의 논리 게이트를 만든 후 그것들을 조합하여 XOR 게이트를 만든다.
if __name__ == '__name__' :
for xs in [(0,0), (1,0), (0,1), (1,1)]:
y = XOR[xs[0], xs[1])
print(str(xs) + " -> " + str(y))
XOR(0,0) 이하 대신 위 코드를 사용해도 된다.
if __name__ == '__name__' :
이게 의미하는 바는 2번 파일에서 1번 Py 파일을 불러와서 사용할 때 1번 파일의 출력결과를 보고싶지 않고 2번만 보고싶다.
이럴때 사용할 수 있습니다. 파일을 실행한 main이 아니면 if 이하의 항목을 실행하지 않는다 라는 의미입니다.
'Study > 인공지능' 카테고리의 다른 글
확률 벡터 (Softmax 변환) overflow 대책 증명 ( 인공지능 기초 #5-2) (0) | 2020.09.17 |
---|---|
3층 인공신경망 ( 퍼셉트론과 활성화 함수의 결합 ) ( 인공지능 기초 #5-1) (1) | 2020.09.16 |
Heaviside 함수 Sigmoid함수 ReLU 함수, 신경망과 활성화 함수 ( 인공지능 기초 #4 ) (0) | 2020.09.15 |
퍼셉트론 AND, NAND, OR 논리회로 표현하기 ( 인공지능 기초 #2 ) (0) | 2020.09.13 |
퍼셉트론, 뉴런 네트워크의 모방 ( 인공지능 기초 #1 ) (0) | 2020.09.13 |