[모두의 딥러닝] 10. 다층 퍼셉트론(multilayer perceptron), XOR 문제 해결

다층 퍼셉트론(multilayer perceptron)

- 입력층과 출력층 사이에 한 개 이상의 은닉층(hidden layer)을 포함한 신경망 구조

- 퍼셉트론 두 개를 각각 처리하는 은닉층을 만들어 두 개를 한 번에 계산하면 XOR 문제 해결 가능

w : 가중치 / n : 노드 / b : 바이어스

 

  • 설계

: 입력 값인 x1과 x2에 각각 가중치(w)를 곱하고 바이어스(b)를 더해 은닉층(node)으로 전송

: 은닉층에 모인 값들은 활성화 함수(ex. 시그모이드 함수)를 통해 최종 값으로 결과 보냄

: 각각의 가중치(w)와 바이어스(b) 값 결정

 

 

 

XOR 문제 해결

 

- 각각의 가중치와 바이어스 값 설정

 

- x1 값과 x2 값을 입력해 원하는 y 값이 나오는지 확인

 

 

 

XOR 문제 해결 - 파이썬 코드로 구현

1. 가중치와 바이어스 선언

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

 

2. 퍼셉트론 함수

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

 

3. 게이트 함수

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

 

4. 결괏값 출력

# x1, x2 값을 번갈아 대입해 가며 최종 값 출력
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

 

 

 

'모두의 딥러닝 개정 3판'의 내용과 https://github.com/taehojo/deeplearning의 코드 참고