AI/DeepLearning

퍼셉트론(Perceptron)

yunajoe 2022. 9. 29. 18:16

다수의 입력으로부터 하나의 결과를 내보내는 알고리즘 

- x는 입력값을 의미, w는 가중치, y는 출력값

- 각각의 입력값에는 각각의 가중치가 존재하는데, 이때 가중치의 값이 크면 클수록 해당 입력 값이 중요하다는 것

- 뉴런에서 보내혼 신호의 총합이 정해진 한계(임계값)을 넘어설 때만 1를 출력

- 뉴런에서 출력값을 변경값을 변경시키는 함수를 활성화함수(Activation Function) 

- 단층 퍼셉트론과 다층 퍼셉트론으로 나누어진다

 

퍼셉트론

 

임계치

단층퍼셉트론(Single-Layer Perceptron)

- 값을 보내는 단계과 값을 받아서 출력하는 두 단계

단층퍼셉트론

다층퍼셉트론(MultiLayer Perceptron, MLP) 

- 입력층과 출력층 사이에 은닉층(hidden layer)이 존재

- 은닉층이 1개 이상인 퍼셉트론

 

심층 신경망(Deep Neural Network, DNN)

- 다층 퍼셉트론만 이야기 하는 것이 아니라, 여러 변형된 다양한 신경망들도 은닉층이 2개 이상이 되면 심층 신경망

 

 

 

 

 

실습

1. AND게이트를 구현해보자 

 

AND게이트

def AND(x1,x2):
  w1, w2, theta = 0.5, 0.5, 0.7
  temp = x1*w1 + x2*w2 
  if temp <= theta:  # 임계점보다 낮거나 같으면 
    return 0 
  else:
    return 1 # 임계점 보다 높으면
# 가중치와 편향을 구해서 AND 구해보기
def AND(x1,x2):
  x = np.array([x1,x2])
  # w는 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수
  w = np.array([0.5,0.5])  
  # 편향, 뉴런이 얼마나 쉽게 활성화하느냐를 조정하는 매개변수. 즉, b= -0.7이면은 각 x*w들의 합들이 0.7를 초과할 때만 뉴런이 활성화. 
  # 편향의 절대값이 낮아질 수록 쉽게 활성화된다 
  b = -0.7   
  temp = np.sum(x*w) + b
  if temp <=0:
    return 0 
  else:
    return 1
# NAND 구해보기 
# AND와는 w(가중치)와 b(편향)의 부호가 반대이다
def NAND(x1,x2): 
  x = np.array([x1,x2])
  w = np.array([-0.5,-0.5])  
  b = 0.7   
  temp = np.sum(x*w) + b
  if temp <=0:
    return 0 
  else:
    return 1      
    
# OR구해보기 
# AND와는 b(편향)만 다르다
 def OR(x1,x2):  
  x = np.array([x1,x2])
  w = np.array([0.5,0.5])  
  b = 0.2  
  temp = np.sum(x*w) + b
  if temp <=0:
    return 0 
  else:
    return 1

 

단층 퍼셉트론의 한계: 단층 퍼셉트론으로는 XOR게이트 구현이 불가능

- 단층 퍼셉트론(직선하나)로는 AND, NAND, OR게이트의 검정색 원과, 흰색 원의 구분이 가능하지만 XOR게이트는 불가능

- 단층 퍼셉트론으로는 비선형 영역(곡선의 영역)을 분리 할 수 없다 (선형영역은 직선의 영역)

XOR게이트란?!

- 입력값 두 개가 서로 다른 값을 갖고 있을때에만 출력값이 1이 되고, 입력값 두 개가 서로 같은 값을 가지면 출력값이 0이 되는 게이트

 

AND GATE

 

 

- 직선하나로는 흰색과 검정색을 나눌 수 없다 

- 최소 직선 2개 이상이어야 나뉠수 있음 => 다층 퍼셉트론(MultiLayer Perceptron, MLP)으로는 가능하다!

XOR GATE