1 minute read

https://89douner.tistory.com/23

다층 퍼셉트론의 XOR 코드

import numpy as np

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y


def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(x*w) + 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(x*w) + b
    if (tmp <= 0):
        return 0
    else:
        return 1
    
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
    

print(XOR(0, 0))
print(XOR(0, 1))
print(XOR(1, 0))
print(XOR(1, 1))


XOR의 퍼셉트론

왼쪽부터 차례로 0층, 1층, 2층이다. 이처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라고 한다. 퍼셉트론은 모두 3층으로 구성되지만, 가중치를 갖는 기준으로 층을 세면 2층 퍼셉트론이다 (0층과 1층 사이, 1층과 2층 사이).

  • 문헌에 따라서는 구성 층의 수를 기준으로 3층 퍼셉트론이라고 하는 경우도 있다.


그래프로 그려보자

image

image

그래프가 왜 휘는걸까

image4

퍼셉트론을 추가하면 non-linear한 것들을 표현할 수 있다고 했다. 그러나, 현재 퍼셉트론들은 단순한 일차방정식 들이 연계된 형태인데, 어떻게 휘는 것인가에 대해 고민했었다. 알아보니 위 코드와 같은 형태는 직선만 그어지는게 맞으며, 선이 휘게되는 것은 뒤에 나올 activation function때문이라고 한다. 그리고 엄밀하게 말하자면, 선이 휘는것이 아니라 feature space 즉, 공간이 접힌다고 생각하는 것이 좋다. 딥러닝의 목적은 feature를 linearly seprable하게 만드는 것이다.

image

해당 사진에서 우측 그래프의 선은 내가 임의로 그은 것인데, 이처럼 차원을 변형시켜 결국 선형적으로 분리가능한 상태를 만드는 것이 딥러닝의 목적이다.

그래프 사이트


정리

  • 퍼셉트론은 ‘가중치’와 ‘편향’을 매개변수로 설정한다.
  • 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
  • XOR게이트는 단층 퍼셉틀노으로 표현할 수 없다.
  • 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
  • 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
  • 다츤 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.


참고자료 및 이미지 출처

XOR 퍼셉트론 이미지
Linear classifiers