퍼셉트론 - 임계값을 좌변으로 이동

  • 가중치와 임계값을 학습을 통해서 수정할 수 있도록 수식을 변경.
  • beta를 -b(bias : 편향) 치환하여 좌변으로 이동.
  • 편향은 뉴런이 얼마나 쉽게 활성화 하는냐를 조절하는 매개변수

image

numpy 라이브러리를 이용하여 AND, NAND, OR, XOR GATE 구현

import numpy as np

def AND(x1, x2) :
  x = np.array([x1, x2]) # 입력 값
  w = np.array([0.5, 0.5]) # 가중치
  b = -0.7 # 편향
  u = np.sum(x*w) + b # u = x1w1 + x2w2 + b  

  if u <=0 :
    return 0
  elif u > 0 :
    return 1

def NAND(x1, x2) :
  x = np.array([x1, x2]) # 입력 값
  w = np.array([-0.5, -0.5]) # 가중치
  b = 0.7 # 편향
  u = np.sum(x*w) + b # u = x1w1 + x2w2 + b  

  if u <=0 :
    return 0
  elif u > 0 :
    return 1

def OR(x1, x2) :
  x = np.array([x1, x2]) # 입력 값
  w = np.array([0.5, 0.5]) # 가중치
  b = -0.2 # 편향
  u = np.sum(x*w) + b # u = x1w1 + x2w2 + b  

  if u <=0 :
    return 0
  elif u > 0 :
    return 1

# 멀티 퍼셉트론 
def XOR(x1, x2) :
  p1 = NAND(x1, x2)
  p2 = OR(x1, x2)
  y = AND(p1, p2)
  return y

if __name__ == '__main__' :
  for xs in [(0,0), (0,1), (1,0), (1,1)] :
    y_and = AND(xs[0], xs[1])
    y_nand = NAND(xs[0], xs[1])
    y_or = OR(xs[0], xs[1])
    y_xor = XOR(xs[0], xs[1])
    print(str(xs) + ' -> ' + str(y_and) + " " + str(y_nand) + " " + str(y_or) + " " + str(y_xor))

활성화 함수 (Activation Function)

  • Heaviside 함수 또는 계단 함수
  • Sigmoid 함수
    image

  • 계단함수에서 Sigmoid 함수로 변경 => 머신러닝이 학습을 할때, 미분을 통해 학습을 함.
  • 계단함수는 미분하는 것이 무의미. image

댓글남기기