2장

·2023년 2월 13일
0

퍼셉트론이란?


x = 입력 신호
y = 출력 신호
w = 가중치
θ = 임계값

복수의 입력 신호 각각에 고유한 가주잋를 부여
가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용
가중치 클 수록 해당 신호 중요하다는 것을 뜻함

퍼셉트론 구현

간단한 구현

# AND 게이트

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
        
AND(0, 0)  # 0 출력
AND(1, 0)  # 0 출력
AND(0, 1)  # 0 출력
AND(1, 1)  # 1 출력

가중치와 편향 도입

θ 을 -b로 치환
변했지만 의미는 같다
퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 합해
그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다.

>>> import numpy as np    # 입력
>>> x = np.array([0,1])   # 가중치
>>> w = np.array([0.5, 0.5])    # 편향
>>> b = -0.7
>>> w*x
array([0. , 0.5])
>>> np.sum(w*x)
0.5
>>> np.sum(w*x)+b
-0.19999999999999996  # 대략 =0.2

가중치와 편향 구현하기

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

w는 각 입력 신호가 결과에 주는 영향력(중요도) 조절하는 매개변수
편향은 뉴런이 얼마나 쉽게 활성화 하느냐 조정하는 매개변수

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

# OR 게이트

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 게이트 구현

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

0개의 댓글