- 다수의 신호를 입력으로 받아 하나의 신호를 출력
- '흐른다/흐르지않는다'(1/0)으로 구분
- 입력 신호가 뉴런에 보내질 때에 고유한 가중치가 곱해짐
- 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력
- 한계를 임계값이라고 하며 θ 로 표현함
- 복수의 입력 신호 각각에 고유한 가중치를 부여. 가중치는 신호가 결과에 주는 영향력을 조절하는 요소로 작용
- 가중치가 클수록 신호가 더 중요하다!
- Python으로 간단하게 구현해보기
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return '0'
elif tmp > theta:
return '1'
def OR(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.4
tmp = x1*w1 + x2*w2
if tmp <= theta:
return '0'
elif tmp > theta:
return '1'
def NAND(x1, x2):
w1, w2, theta = -0.5, -0.5, -0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return '0'
elif tmp > theta:
return '1'
print('INPUT (0,0) AND : '+AND(0,0)+', NAND : '+NAND(0,0)+', OR : '+OR(0,0))
print('INPUT (1,0) AND : '+AND(1,0)+', NAND : '+NAND(1,0)+', OR : '+OR(1,0))
print('INPUT (0,1) AND : '+AND(0,1)+', NAND : '+NAND(0,1)+', OR : '+OR(0,1))
print('INPUT (1,1) AND : '+AND(1,1)+', NAND : '+NAND(1,1)+', OR : '+OR(1,1))
- θ를 b로 표현한다. 여기서 b는 편향(bias)의 의미를 갖는다.
- numpy로 바꿔보자.
import numpy as np
x = np.array([0,1])
w = np.array([0.5,0.5])
b = -0.7
print(w*x)
print(np.sum(w*x))
print(np.sum(w*x)+b)
가중치와 편향을 도입한 AND 게이트
def AND(x1, x2):
x = np.array([x1,x2])
w = np.array([0.5,0.6])
b = -0.7
tmp = np.sum(w*x) + b
if tmp <= 0:
return '0'
else:
return '1'
하지만 이 퍼셉트론도 XOR은 표현하지 못한다. 퍼센트론은 직선 하나로 나눈 영역밖에 표현할 수 없기 때문이다. 이러한 한계 때문에 다층 퍼셉트론이 등장한다. 다층 퍼셉트론(multi-layer perceptron)은 층을 쌓아 표현할 수 없는 게이트를 표현할 수 있게 해준다.
기존의 게이트를 조합하여 XOR 게이트를 만든다고 생각해보자. 아래 그림과 같이 AND, NAND, OR 게이트를 하나씩 조합해 구현할 수 있다.
이것을 파이썬으로 구현해보면 다층 퍼셉트론에 대해 이해할 수 있다.
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return str(y)
'Python > DeepLearning' 카테고리의 다른 글
퍼셉트론에서 신경망으로(5) (0) | 2019.04.23 |
---|---|
퍼셉트론에서 신경망으로(4) (1) | 2019.04.22 |
퍼셉트론에서 신경망으로(3) (0) | 2019.04.22 |
퍼셉트론에서 신경망으로(2) (0) | 2019.04.22 |
퍼셉트론에서 신경망으로(1) (0) | 2019.04.22 |