본문 바로가기
Data·AI/관련자료

다층 퍼셉트론(MLP)

by hyun-am 2021. 4. 28.

XOR 진리표 해결방법 생각하기

 

다층 퍼셉트론에서 은닉층

퍼셉트론을 이용해서 XOR을 처리할때 2차원평면에서 처리하려고 하니 해결하지 못했습니다. 이제 이 2차원적인 것을 만약에 접는다고 생각하면? xor을 분리할 수 있게 되었습니다.

예시 그림

이런식으로 휘어지게 그려주면 분리할 수 있는데 퍼셉트론에서 이렇게 휘어지게 할수 있게 도와주는 것을 숨어있는 층 즉, **은닉층(hidden layer)**라고 합니다.

이런식으로 표현할 수 있습니다.

다층 퍼셉트론 설계

아까 위에 있는 그림에서 이것을 한번 도식화 시켜주겠습니다.

그러면 이런식으로 표현할 수 있습니다.

여기서 가운데 다층 퍼셉트론을 보면 은닉층에서 모인 값들이 한 번 더 시그모이드 함수를 이용해 최종값으로 결과를 보내는 것을 확인할 수 있습니다. 은닉층에 모이는 중간 지점을 N이라고 표현했는데 이것을 노드라고 합니다. 이제 N1, N2의 각각 단일 퍼셉트론 값을 확인하겠습니다.

  • N1 = σ(X1W11 + X2W21 + B1)
  • N2 = σ(X1W12 + X2W22 + B2)

이제 이 값들을 합쳐서 출력되면 다음과 같이 출력 됩니다.

  • Y out = σ(N1W31 + N2W32 + B3)

이제 이것을 2차원 배열로 늘어놓으면 다음과 같이 표현할 수 있습니다.

W(1) = [ [ W11, W21 ],[ W12,W22 ] ]
B(1) = [ B1 , B2 ]
W(2) = [ W31, W32 ]
B(2) = [ B3 ]

XOR 예시 문제 해결

W(1) = [ [ -3 , -3 ],[ 3, 3 ] ]
B(1) = [ 5 , -2 ]
W(2) = [ 1, 1 ]
B(2) = [ -1 ]

이렇게 값이 주어지면 코딩을 통해 한번 해결해 보겠습니다.

import numpy as np
# 가중치와 바이어스
W11 = np.array([-3,-3])
W12 = np.array([3,3])
W2 = np.array([1,1])
B1 = 5
B2 = -2
B3 = -1

def check_percep(result):
    return 1 if result > 0 else 0

# NAND 게이트
def NAND(x1, x2):
    result = np.sum(np.array([x1,x2])*W11) + B1
    return check_percep(result)

# OR 게이트
def OR(x1,x2):
    result = np.sum(np.array([x1,x2])*W12) + B2
    return check_percep(result)

# AND 게이트
def AND(x1,x2):
    result = np.sum(np.array([x1,x2])*W2) + B3
    return check_percep(result)

# XOR 게이트
def XOR(x1,x2):
    return = AND(NAND(x1,x2),OR(x1,x2))

# 메인 함수
if __name__ == '__main__':
    for x in [(0,0),(1,0),(0,1),(1,1)]:
        y = XOR(x[0],x[1])
        print(f"입력 값 : {x} 출력 값 : {y}")

출력 값 :

 

이렇게 결과 값이 잘 나온것을 확인할 수 있습니다. 이렇게 하나의 퍼셉트론으로 해결하지 못하는 문제를 은닉층을 여러개 쌓아서 복잡한 문제를 해결하려는 과정을 보면 사람의 신경망과 비슷하게 동작하는 것을 확인할 수 있습니다. 이것을 보고 인공 신경망 혹은 신경망으로 부르기 시작했습니다.

 

참고한 책 : 

www.gilbut.co.kr/book/view?bookcode=BN001909

 

모두의 딥러닝

원리를 쉽게 이해하고 나만의 딥러닝 모델을 만들 수 있다

www.gilbut.co.kr

 

'Data·AI > 관련자료' 카테고리의 다른 글

엘리스(elice) 레이서 1기 후기  (24) 2021.07.19
오차 역전파(Backpropogation)  (0) 2021.04.29
퍼셉트론(Perceptron)이란  (0) 2021.04.27
확률이란-1  (0) 2021.03.30
머신러닝 개요  (0) 2020.09.01

댓글