퍼셉트론(Perceptron)

  • 인공신경망의 한 종류.
  • Perception과 Neuron의 합성어
  • 생물학적인 신경계(Neual Network)의 기본 단위인 신경세포(뉴런)의 동작 과정을 통계학적으로 모델링한 알고리즘
  • 가장 간단한 형태의 순방향(피드포워드) 네트워크, 선형 분류기로도 볼 수 있음.

image

인공지능의 역사

image

뉴런과 퍼셉트론

image

  • Dendrite : 전기 신호를 받는 부분(입력)
  • Synapse : 다른 뉴런과 Dendrite의 연결 부위, 전기신호의 세기를 재조정(가중치:w)
  • Soma(cell body) : Dendrite로부터 받은 여러 전기 신호를 모두 합침.
  • Axon : Soma의 전위가 일정 이상이 되면 이웃 뉴런으로 전기 신호를 보냄(출력)

퍼셉트론의 원리

image

AND 게이트 구현

  • 전자회로는 게이트 등으로 구성 => 게이트를 인공지능으로 구현하는 것에서 부터 시작. image

  • 가중치(w1, w2)와 임계값(beta) 값을 찾는 것이 최종 퍼셉트론이지만, 여기서는 우선 w1=0.5, w2=0.5, beta=0.7로 정함(다양한 값이 존재).
    image

and_input_list = [(0,0), (0,1), (1,0), (1,1)]

def AND(x1, x2) :
  w1 = 0.5
  w2 = 0.5
  beta = 0.7
  u = (x1*w1) + (x2*w2)
  if u <= beta :
    return 0
  elif u > beta :
    return 1
  
for xs in and_input_list :
  print(xs[0], xs[1], "->", AND(xs[0], xs[1]))

NAND 게이트 구현

image

  • 가중치(w1, w2)와 임계값(beta) 값을 찾는 것이 최종 퍼셉트론이지만, 여기서는 우선 w1=-0.5, w2=-0.5, beta=-0.7로 정함(다양한 값이 존재). image
# 퍼셉트론으로 구현한 NAND
# w1 = w2 = -0.5
# beta = -0.7

and_input_list = [(0,0), (0,1), (1,0), (1,1)]

def NAND(x1, x2) :
  w1 = -0.5
  w2 = -0.5
  beta = -0.7
  u = (x1*w1) + (x2*w2)
  if u <= beta :
    return 0
  elif u > beta :
    return 1
  
for xs in and_input_list :
  print(xs[0], xs[1], "->", NAND(xs[0], xs[1]))

OR 게이트 구현

image

  • 가중치(w1, w2)와 임계값(beta) 값을 찾는 것이 최종 퍼셉트론이지만, 여기서는 우선 w1=0.5, w2=0.5, beta=0.2로 정함(다양한 값이 존재).
    image
# 퍼셉트론으로 구현한 OR

and_input_list = [(0,0), (0,1), (1,0), (1,1)]

def OR(x1, x2) :
  w1 = 0.5
  w2 = 0.5
  beta = 0.2
  u = (x1*w1) + (x2*w2)
  if u <= beta :
    return 0
  elif u > beta :
    return 1
  
for xs in and_input_list :
  print(xs[0], xs[1], "->", OR(xs[0], xs[1])) 

XOR 게이트 구현

image

  • 단일 퍼셉트론으로 XOR 게이트 구현 불가
  • 멀티 퍼셉트론으로 구현 가능
    image
def XOR(x1, x2) :
  s1 = NAND(x1, x2)
  s2 = OR(x1, x2)
  y = AND(s1, s2)
  return y

for xs in [(0,0), (0,1), (1,0), (1,1)] :
  tmp = XOR(xs[0], xs[1])
  print(xs[0], xs[1], "->", tmp)

가중치와 임계값 찾는 원리 / 멀티 퍼셉트론

image

and_input_list = [(0,0), (0,1), (1,0), (1,1)]

def AND(x1, x2) :
  w1 = 1/1.7
  w2 = 1/1.5
  beta = 1
  u = (x1*w1) + (x2*w2)
  if u <= beta :
    return 0
  elif u > beta :
    return 1
  
for xs in and_input_list :
  print(xs[0], xs[1], "->", AND(xs[0], xs[1]))

image

문제

  • 다음 진리표를 퍼셉트론으로 구현해보자.
    image
input_list = [(0,0), (0,1), (1,0), (1,1)]

def Perceptron(x1, x2) :
  w1 = -0.5
  w2 = 0.5
  beta = -0.4
  u = (x1*w1) + (x2*w2)
  if u <= beta :
    return 0
  elif u > beta :
    return 1
  
for xs in input_list :
  print(xs[0], xs[1], "->", Perceptron(xs[0], xs[1]))

댓글남기기