본문 바로가기
파이썬(Python), 머신러닝, 딥러닝

(파이썬 코드)다중퍼셉트론으로 XOR문제 해결하기

by 굳세라(goodsarah) 2022. 8. 2.
728x90
반응형

 

 기존에 퍼셉트론이 해결하지 못했던 문제인 XOR 문제로 인해, 인공지능의 발전에 큰 위기가 찾아왔다. 이를 해결한 것이 바로 다층 퍼셉트론이다.

 

 기존에는 입력(Input)층과 출력(Output)층만 존재했기에 XOR 문제를 해결하지 못했으나, 1개의 층을 더 추가하면서 XOR 문제를 해결할 수 있게 되었다. 

 

아래 그림은 XOR 문제의 예시이다.

 

XOR 게이트는

1) 입력층에서 첫번째 은닉층으로 전파될때  a) NAND 처리와 b) OR 처리를 사용하고

2) 첫번째 은닉층에서 출력층으로 전파될때 AND 처리를 사용하는 논리 구조를 가지고 있다. 

 

 

이를 코딩을 통해 구현하면 아래와 같은 결과 값이 나오게 된다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#numpy 라이브러리 호출
import numpy as np
 
#은닉층(Hidden layer) : 1개
#w11, w12 : Input -> Hidden layer 들어갈때 가중치 
#w2 : Hidden layer 각 노드에서 Output(출력층)으로 들어올때 가중치
w11 = np.array([-2,-2])
w12 = np.array([2,2])
w2 = np.array([1,1])
 
#각 Bias 들
b1=3
b2=-1
b3=-1
 
#MLP(Multi Layer Perceptron) 함수 정의
def MLP(x, w, b):
  y=np.sum(w*x)+b
  if y<=0:
    return 0
  else:
    return 1
 
#NAND 게이트
def NAND(x1,x2):
  return MLP(np.array([x1,x2]), w11, b1)
 
#OR 게이트
def OR(x1,x2):
  return MLP(np.array([x1,x2]), w12, b2)
 
#AND 게이트
def AND(x1,x2):
  return MLP(np.array([x1,x2]), w2, b3)
 
#XOR 게이트
def XOR(x1,x2):
  return AND(NAND(x1,x2), OR(x1,x2))
 
 
#x1 값, x2 값을 번갈아 대입하며 최종 값 출력
for x in [(0,0), (1,0), (0,1), (1,1)]:
  y = XOR(x[0], x[1])
  print("입력 값:" + str(x) + "출력 값:" + str(y))
cs

 

 

 

728x90
반응형

댓글