ML/모두의 딥러닝

7장) 다층 퍼셉트론

busy맨 2023. 7. 10. 14:26

성냥 6개로 정삼각형 4개를 만들 수 있는가

2차원 평면에서만 해결하려는 고정 관념을 깨고 차원을 달리 생각해야 한다.

6장에서 보았던 문제 역시 고정 관념을 깨야 한다.

 

이런 문제를 해결하기 위해 두 개의 퍼셉트론을 한 번에 계산할 수 있어야하고, 은닉층(hidden layer)을 구현하여 해결

 

1) 다층 퍼셉트론의 설계

다층 퍼셉트론의 내부

  • 가운데 점선으로 표시된 부분이 은닉층
  •  

1. 입력 값에 각각 가중치를 곱하고 바이어스를 더하여 은닉층에 전송

  • 은닉층의 중간 정거장을 노드(node)라고 하며, n1과 n2로 표시
  • 만약 활성화 함수로 시그모이드 함수를 사용한다면 n1과 n2의 값은 아래와 같다.

2. 은닉층에 취합된 값들은 활성화 함수를 통해 출력층으로 보내짐

  • 출력층 역시 시그모이드 함수를 통해 결정

3. 가중치와 바이어스 결정

  • 2차원 배열형태로 표현

  • 은닉층을 포함해 가중치 6개와 바이어스 3개가 필요한 것을 확인

 

2) XOR문제의 해결

Code)

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

# 퍼셉트론
def MLP(x, w, b):
    y = np.sum(w * x) + 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))


# 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))

'ML > 모두의 딥러닝' 카테고리의 다른 글

9장) 신경망에서 딥러닝으로  (0) 2023.07.10
8장) 오차 역전파  (0) 2023.07.10
6장) 퍼셉트론  (0) 2023.07.10
5장) 참 거짓 판단 장치 : 로지스틱 회귀  (0) 2023.07.10
4-2장) 다중 선형 회귀  (0) 2023.07.07