8. 다층 퍼셉트론(MLP)
8.1 다층 퍼셉트론의 등장
- XOR 문제를 극복하기 위해 퍼셉트론 두 개를 각각 처리하는 은닉층(hidden layer)을 만드는 기발한 아이디어 착안
- 은닉층을 도입함으로써 구하고자 하는 출력값을 얻을 수 있게 됨
- x1, x2를 두 연산으로 각각 전달
- 첫 번째 연산에서는 NAND 처리
- 두 번째 연산에서는 OR 처리
- 2,3을 통해 구한 결괏값으로 AND 처리
8.2 다층 퍼셉트론의 설계
- 점선으로 표시한 부분이 은닉층
- x1, x2에 가중치(w)를 곱하고 바이어스(b)의 합한 결과 값이 모이는 곳이 노드(node)
- 은닉층에 취합된 값은 활성화 함수(ex. 시그모이드)를 통해 다음 노드로 전달됨
- 두 식의 결괏값이 출력층 방향으로 보내지고, 마찬가지로 활성화 함수를 사용해 y 예측 값을 정하게 됨
- 가중치(w)와 바이어스(b) 값은 2차원 배열로 다음과 같이 표현 가능
8.3 XOR 문제의 해결
- 각 변수의 값을 정하고 x1, x2 값을 입력하면 원하는 y값이 도출되는 것을 확인
8.4 코딩으로 XOR 문제 해결하기
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 값을 번갈아 대입해 가며 최종 값 출력
for x in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = XOR(x[0], x[1])
print("입력 값: " + str(x) + " 출력 값: " + str(y))
[output]
입력 값: (0, 0) 출력 값: 0
입력 값: (1, 0) 출력 값: 1
입력 값: (0, 1) 출력 값: 1
입력 값: (1, 1) 출력 값: 0
'데이터 > 딥러닝' 카테고리의 다른 글
[모두의 딥러닝] Chapter 4 | 딥러닝 기본기 다지기 - 모델 성능 향상시키기 (0) | 2023.02.14 |
---|---|
[모두의 딥러닝] Chapter 4 | 딥러닝 기본기 다지기 - 모델 성능 검증하기 (0) | 2023.02.14 |
[모두의 딥러닝] Chapter 4 | 딥러닝 기본기 다지기 - 모델 설계, 다중분류 문제 해결 (0) | 2023.02.13 |
[모두의 딥러닝] Chapter 3 | 신경망의 이해 - 오차 역전파 (0) | 2023.02.04 |
[모두의 딥러닝] Chapter 3 | 신경망의 이해 - 퍼셉트론 (1) | 2023.02.04 |