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

Ch 2. 퍼셉트론

퍼셉트론은 다수의 신호를 입력받아 하나의 신호를 출력한다.

2.2 단순한 논리 회로

2.2.1 AND 게이트

입력은 둘이고 출력은 하나다. 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.

def AND(x1, x2):
  w1, w2, theta = 0.5, 0.5, 0.7
  tmp = x1*w1 + x2*w2 # 가중치를 곱한 입력의 총합이 
  if tmp <= theta:    
    return 0
  elif tmp > theta:   # 임계값을 넘으면 
    return 1          # 1을 반환
AND(0, 0)
0
AND(1, 1)
1
2.2.2 Bias 도입
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
AND(0, 0)
0
AND(1, 1)
1

2.2.3 NAND 게이트와 OR 게이트

  • NAND 게이트 : Not And. AND 게이터의 출력을 뒤집은 것이 된다. 즉, x1과 x2 모두 1일 때만 0을 출력하고, 그 외에는 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
NAND(1, 1)
0
NAND(0, 1)
1
  • OR 게이트 : 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로.
def OR(x1, x2):
  x = np.array([x1, x2])
  w = np.array([0.5, 0.5]) # AND와는 가중치(w와 b)만 다르다
  b = -0.2
  tmp = np.sum(w*x) + b
  if tmp <= 0:
    return 0
  else:
    return 1
OR(1, 0)
1

2.4 퍼셉트론의 한계

2.4.1 XOR 게이트

XOR 게이트는 배타적 논리합이라는 논리 회로다.
퍼셉트론으로는 표현할 수 없다. 다층 펗셉트론을 만들어 표현 가능하다.

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

TLDR

  • 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
  • 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.
  • 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
  • XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
  • 2층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
  • 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.