본문 바로가기

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

2장 퍼셉트론

퍼셉트론이란?

퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 퍼셉트론 신호는 1이나 0 두가지 값을 가질 수 있다.

입력이 2개인 퍼셉트론

x1, x2는 입력 신호, w1, w2는 가중치, y는 출력신호를 뜻한다. 원은 뉴런 혹은 노드라고 부른다.

입력 신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해지고 이것들의 총 합이 임계값 θ를 넘어서면 1, 아니면 0을 출력한다.

퍼셉트론은 복수의 입력 신호에 각각 고유한 가중치를 부여하는데 이 가중치가 결과를 결정하는 요소로 작용한다. 즉, 가중치가 클수록 해당 신호가 그만큼 더 중요하다는 뜻이다.

 

단순한 논리 회로

AND 게이트

두 입력이 모두 1일 때만 1을 출력한다.

AND 게이트의 진리표

 

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 # element-wise product
    if tmp <= 0:
        return 0
    else:
        return 1

 

- 가중치 w와 b는 무한한 조합을 가질 수 있다.

- 행렬의 요소별 곱을 element-wise product라고 한다.

NAND 게이트

not AND로 AND 게이트와 반대의 출력을 낸다. 즉, 두 입력이 모두 1일 때만 0을 출력한다.

NAND 게이트의 진리표

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 # element-wise product
    if tmp <= 0:
        return 0
    else:
        return 1

- AND와 달라진 점은 가중치와 편향이다.

OR 게이트

두 입력이 모두 0일 때만 0을 출력한다.

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

- 마찬가지로 가중치와 편향만 달라졌다.

 

퍼셉트론의 한계

XOR 게이트

XOR 게이트의 진리표

단순한 퍼셉트론으로는 XOR 게이트를 구현할 수 없다. 왜그런지 이유를 알아보자

위의 그림은 OR 게이트를 시각적으로 나타낸것이다. 이처럼 퍼셉트론은 직선으로 나뉜 두 영역을 만든다. 즉, 선형이다.

XOR 게이트처럼 영역을 나누기 위해서는 비선형이어야 한다.

 

다층 퍼셉트론

퍼셉트론을 여러 층을 쌓아 만든 것을 다층 퍼셉트론(Multi Layer Perceptron)이라 한다. 다층 퍼셉트론은 비선형을 표현할 수 있다. 그래서 AND, NAND, OR 게이트를 조합하여 XOR 게이트를 표현할 수 있다.

 

AND, NAND, OR 게이트의 기호

- NAND 게이트의 출력부에 있는 동그라미 기호는 출력을 반전한다는 뜻

 

XOR 게이트
XOR 게이트의 진리표

앞에서 구현한 AND, NAND, OR 게이트를 사용하여 XOR 게이트를 쉽게 구현할 수 있다.

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

' > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글

5장 오차역전파법 (2)  (0) 2023.09.19
5장 오차역전파법 (1)  (0) 2023.09.19
4장 신경망 학습 (2)  (0) 2023.09.14
4장 신경망 학습 (1)  (0) 2023.09.13
3장 신경망  (0) 2023.09.13