모두의 딥러닝 7장 multilayer perceptron

YJCho·2024년 1월 15일

모두의 딥러닝

목록 보기
3/8

성냥 6개로 정삼각형 4개를 만들 수 있을까?

2차원 평면에서는 이 문제를 해결할 수 없다. 차원을 달리하여 정사면체를 만들면 문제는 쉽게 해결된다.

XOR 문제도 평면을 휘어주면 해결할 수 있다...!

XOR문제도 두 개의 퍼셉트론을 한 번에 계산할 수 있다면 해결이 가능하다.
이를 위해 숨어있는 층인 은닉층(hidden layer)을 만든다. 은닉층은 좌표 평면을 왜곡시키는 결과를 가져온다.

📌다층 퍼셉트론의 설계

multilayer perceptron

node(노드) : 은닉층에 모이는 중간 정거장, n1n_1 , n2n_2

n1=σ(x1ω11+x2ω21+b1)n2=σ(x1ω12+x2ω22+b2)n_1=\sigma(x_1\omega_{11}+x_2\omega_{21}+b_1)\\ n_2=\sigma(x_1\omega_{12}+x_2\omega_{22}+b_2)

이 두 식의 결과값이 출력층으로 보내진다

yout=σ(n1ω31+x2ω32+b3)y_{out}=\sigma(n_1\omega_{31}+x_2\omega_{32}+b_3)

가중치(ω\omega)와 바이어스(bb)는 2차원 배열로 표시할 수 있다

W(1)=[ω11ω12ω21ω22]B(1)=[b1b2]W(1)=\begin{bmatrix} \omega_{11} & \omega_{12} \\ \omega_{21} & \omega_{22} \\ \end{bmatrix} \quad B(1)= \begin{bmatrix} b_1 \\ b_2 \\ \end{bmatrix} \\

W(2)=[ω31ω32]B(2)=[b3]W(2)= \begin{bmatrix} \omega_{31} \\ \omega_{32} \\ \end{bmatrix} \quad B(2)=\begin{bmatrix} b_3 \end{bmatrix}

📌XOR 문제의 해결

XOR 게이트는 NAND 게이트와 OR 게이트 두 가지를 내재한
각각의 퍼셉트론이 다중 레이어 안에서 작동 → 이 두 가지 값에 대해 AND 게이트를 수행한 값이 YoutY_{out}이 된다

import numpy as np

w11 = np.array([-2, -2]) #가중치 1열
w12 = np.array([2, 2]) #가중치 2열
w2 = np.array([1, 1])

b1=3
b2=-1
b3=-1

#perceptron
def MLP(x, w, b):
  y=np.sum(w * x) + b
  if y<=0:
    return 0
  else:
    return 1

#NAND GATE
def NAND(x1, x2):
  return MLP(np.array([x1, x2]), w11, b1)

#OR GATE
def OR(x1, x2):
  return MLP(np.array([x1, x2]), w12, b2)

#AND GATE
def AND(x1, x2):
  return MLP(np.array([x1, x2]), w2, b3)

#XOR GATE
def XOR(x1, x2):
  return AND(NAND(x1, x2), OR(x1, x2))

#x1, x2 값을 번갈아 대입하며 최종값 출력
if __name__ == '__main__':
  for x in [(0,0), (1,0),(0,1), (1,1)]:
    y = XOR(x[0], x[1])
    print("입력 값: " + str(x) + "출력 값: " + str(y))
#결과
입력 값: (0, 0)출력 값: 0
입력 값: (1, 0)출력 값: 1
입력 값: (0, 1)출력 값: 1
입력 값: (1, 1)출력 값: 0

은닉층을 여러 개 쌓아올려 문제를 해결하는 과정은 뉴런이 해나가는 일과 닮았다
그래서 이 방법을 인공 신경망 이라 부르며, 간단히 줄여서 신경망이라고 한다

profile
호로록

0개의 댓글