퍼셉트론과 오차 역전파

남가연·2023년 7월 20일
0

AI

목록 보기
4/11

퍼셉트론

인공 신경망(Aritificial Neural Network, ANN)의 구성 요소(unit)로서 다수의 값을 입력받아 하나의 값으로 출력하는 알고리즘

이 사진에 나와있는 과정을 기본값으로 가진다.

그러나 XOR 문제를 해결할 수 없기 때문에, 퍼셉트론을 여러 개 사용해 다층 퍼셉트론(Multilayer perceptron)으로 해결하였다.

여기서 한 층을 계산하기 위하여, (입력층 * 입력층 사이 계산식 + 편향)을 모든 전 입력층에 대해 계산하여서 만들어낼 수 있다.

저 그림을 예시로 들어 설명해보면, 윗 은닉층(n1이라 칭함)을 구하기 위해서는, n1 = S(x1 w1 + x2 w2 + b1(편향)) 라는 식을 만들어서 계산해야 한다.

+ XOR 문제

XOR을 논리식(OR, AND …)으로 만들기 위해서는 NAND(AND의 반대식)와 OR 을 AND로 묶어서 만들 수 있다.

import numpy as np 

w11 = np.array([-2,-2])
w12 = np.array([2,2])
w2 = np.array([1,1])
b1 = 3
b2 = -1
b3 = -1
y = 0
x = 0

#다층 퍼셉트론 
def MLP (x,w,b) :
  y = np.sum(x * w) + b
  if y <= 0 :
    return 0
  else :
    return 1

# NAND
def NAND(x1, x2) :
  return MLP(np.array([x1,x2]), w11 ,b1)
# OR
def OR(x1, x2) :
  return MLP(np.array([x1,x2]),w12, b2)
# AND
def AND(x1, x2) :
  return MLP(np.array([x1, x2]), w2, b3)
# XOR
def XOR(x1, x2) :
  return AND(NAND(x1, x2), OR(x1, x2))

for x in [(0,0), (1,0), (0,1), (1,1)] :
  y = XOR(x[0], x[1])
  print('입력값 = ' + str(x) + '  출력값 = ' + str(y))

이렇게 다층 퍼셉트론으로 XOR 문제를 해결할 수 있다.

오차 역전파(Backpropagation)

신경망의 학습 알고리즘 중 하나로, 출력값과 실제값의 오차를 이용하여 각 가중치에 대한 손실 함수의 미분값을 계산하고, 이를 이용하여 가중치를 갱신하는 과정

동작 방법

  1. 임의의 초기 가중치(W)를 준 뒤 결과(yout)를 계산한다.
  2. 계산 결과와 우리가 원하는 값 사이의 오차를 구한다.
  3. 경사 하강법을 이용해 바로 앞 가중치를 오차가 작아지는 방향으로 업데이트한다.
  4. 위 과정을 더이상 오차가 줄어들지 않을 때까지 반복한다.

활성화 함수

입력 신호의 총합을 출력 신호로 변환하는 함수

  • 여기서의 예시로 ReLU, Sigmoid, ELU 등이 있음.

이때, 활성화 함수를 사용할 때는 시그모이드(sigmoid) 함수를 쓰지 않는다

  • 그 이유는, 시그모이드 함수를 미분할수록 최대값이 작아지는데, 이 과정에서 기울기 소실이 일어나기 때문
  • 그렇기 때문에 여기서는 RELU 함수를 쓴다. 미분을 하더라도 기울기 소실이 일어나지 않기 때문이다.

profile
-ㅅ-)b

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

소중한 정보 감사드립니다!

답글 달기

관련 채용 정보