AI/밑바닥부터 시작하는 딥러닝

[밑바닥부터 시작하는 딥러닝] 퍼셉트론으로 XOR 게이트 구현하기 in python 파이썬

슈퍼짱짱 2019. 9. 13. 08:00
반응형

지난 시간에 퍼셉트론의 한계에 대해 공부했다.


>> 퍼셉트론이란? 바로가기

>> 퍼셉트론으로 논리회로 구현 바로가기

>> 퍼셉트론의 한계 바로가기


이번에는 퍼셉트론으로 XOR 게이트를 구현하는 방법에 대해 알아보겠다.




파이썬에서 perceptron으로 XOR gate 구현하는 방법


퍼셉트론 하나로는 XOR 게이트를 구현 할 수 없었다. 그렇다면 퍼셉트론으로 XOR 게이트를 표현하는 방법은 무엇일까?

바로 퍼셉트론을 여러 층 쌓아 다층 퍼셉트론(multi-layer perceptron)으로 비선형성을 만드는 것이다.


퍼셉트론을 쌓기에 앞서, XOR 게이트를 NAND, OR, AND 게이트로 쪼개보면 다음과 같다.



input x1과 x2에 대해 NAND 게이트의 결과와 OR 게이트의 결과를 다시 AND 게이트에 입력시키면 y와 같은 결과가 나온다.

즉, x1과 x2를 입력으로 받아 NAND 게이트와 OR 게이트로 출력하는 1층, NAND 게이트의 출력과 OR 게이트의 출력 결과를 다시 입력으로 AND 게이트로 출력하는 2층으로 이루어진다.



이 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
39
40
41
42
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)
cs


>> XOR(0,0)

0


>> XOR(0,1)

1


>> XOR(1,0)

1


>> XOR(1,1)

0


이를 노드를 이용한 퍼셉트론으로 표현하면 다음과 같다.



즉, XOR 게이트는 다층 구조 네트워크이다.

XOR 게이트 문제 외에 더 복잡한 문제도 퍼셉트론을 여러 층 쌓아 해결 할 수 있으며, 이는 딥러닝에 기본이 되는 구조이다.


단, 퍼셉트론에서는 w와 b를 직접 수동으로 입력했다. 다음에는 이것을 자동으로 학습 할 수 있는 구조인 신경망에 대해 알아보겠다.


반응형