본문 바로가기
AI & Data Analysis/인공지능 스터디

[모두의 딥러닝] #7장: XOR 문제의 극복, 다층 퍼셉트론

by 로토마 2022. 1. 22.

앞써 6장에서 우리는 하나로 이루어진 퍼셉트론의 한계점, XOR문제를 살펴보았다.

이 문제를 해결하기 위해 많은 공학자들이 많은 시간 오랜 고민, 일명 인공지능 암흑기를 겪었다고 전해진다.

과연 공학자들은 이 문제를 어떻게 해결할 수 있었을까?

이번엔 그 해결법인 다층 퍼셉트론의 등장 배경과 더불어 기본 설계와 구성에 대해 공부해보았다.

XOR 문제의 해결
다층 퍼셉트론의 설계

XOR 문제 해결하기 실습 코드)

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
다층 퍼셉트론으로 XOR 문제 해결하기 (By. 은닉층)
import numpy as np
# 가중치(w)와 바이어스(b)
w11 = np.array([-2,-2])
w12 = np.array([2,2])
w2 = np.array([1,1])
b1 = 3
b2 = -1
b3 = -1
# 퍼셉트론
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 값을 번갈아 대입해 최종값 출력
if __name__ == '__main__':
    for x in [(0,0),(1,0),(0,1),(1,1)]:
        y = XOR(x[0],x[1])
        print("입력 값: "+ str(x) + " 출력 값: "+str(y))
 
cs