1. 퍼셉트론(Perceptron)
퍼셉트론은 신경망의 기원이 되는 알고리즘입니다. 퍼셉트론의 구조를 배워야 신경망과 딥러닝의 아이디어를 이해할 수 있습니다.
퍼셉트론은 다수의 신호를 입력 받아 하나의 신호를 출력하는 역할을 합니다.
이 때 퍼셉트론은 0 또는 1의 출력을 가질 수 있습니다.
위 그림에서 x1, x2, y는 뉴런(노드)라고 부르며, x1과 x2는 입력 신호, y는 출력 신호가 됩니다.
입력 신호가 다음 뉴런에 보내질 때는 일정한 가중치가 곱해집니다. 출력 신호는 입력 신호에 들어온 신호의 합이 일정한 값(역치, 임계값)을 넘는 경우에만 1을 출력합니다.
2. 퍼셉트론을 이용한 논리 회로의 표현
이 퍼셉트론을 사용하면 AND, OR, NAND와 같은 논리 게이트를 표현할 수 있습니다.
출력 y가 1일 때는 삼각형, 0일 때는 o로 표현된다고 할 때 각각을 그래프에 나타내고 퍼셉트론을 이용한 선형 결정경계(두 레이블을 구분하는 경계선)를 나타낼 수 있습니다.
1) AND 게이트
x1 | x2 | y |
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
x1과 x2를 축으로 하는 그래프를 표현하면 아래와 같습니다.
퍼셉트론은 x1, x2에 대한 그래프로 나타낼 수 있습니다.
위 그래프에서 0인 출력과 1인 출력을 퍼셉트론이 나타내는 그래프를 이용해 분리해낼 수 있습니다.
둘을 분리하는 그래프는 하나가 아니라 여러 개 있을 수 있습니다.
(w1, w2, theta) = (0.5, 0.5, 0.7)인 경우를 예로 확인해보겠습니다.
2) NAND
x1 | x2 | y |
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
3) OR
x1 | x2 | y |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
3. 퍼셉트론의 구현
퍼셉트론은 입력값들의 가중치 합으로 표현할 수 있고, 입력 신호들의 합이 임계값(theta)를 넘을 때 출력값을 출력합니다.
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = w1 * x1 + w2 * x2
return 1 if tmp > theta else 0
print(0, 0) # 0
print(1, 0) # 0
print(0, 1) # 0
print(1, 1) # 1
임계값을 0.7로 설정하였는데 식을 한 쪽으로 정리하여 임계값을 0으로 만들고, 기존에 있던 임계값을 편향(bias)으로 나타낼 수 있습니다.
편향을 고려한 퍼셉트론의 식을 다시 구현하면 아래와 같습니다.
import numpy as np
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7 # 좌변에 대해 정리했기 때문에 부호가 반전됨
tmp = np.sum(w * x) + b
return 1 if tmp > 0 else 0
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(w * x) + b
return 1 if tmp > 0 else 0
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.3
tmp = np.sum(w * x) + b
return 1 if tmp > 0 else 0
4. 퍼셉트론의 한계
하지만 퍼셉트론은 선형 결정경계를 갖기 때문에 출력값의 결정경계를 표현하는 데 한계가 있습니다.
퍼셉트론의 한계를 나타내는 가장 대표적인 경우는 XOR Gate입니다.
1과 0이 위와 같이 나타날 때 하나의 직선으로는 둘을 완전히 구분할 수 없습니다.
퍼셉트론의 장점은 하나 이상의 퍼셉트론을 이용해 결정경계를 나타낼 수 있다는 점입니다.
두 개 이상의 퍼셉트론을 사용한 알고리즘을 다층 퍼셉트론이라 합니다.
다음에는 다층 퍼셉트론에 대해 정리해보겠습니다.
'DataScience' 카테고리의 다른 글
[ML] 정확도가 아닌 손실 함수를 사용해 학습하는 이유 (0) | 2022.10.31 |
---|---|
[ML] 다층 퍼셉트론(multi-layer perceptron) (0) | 2022.10.29 |
[Python] 두 표본에 대한 모평균 검정 (0) | 2022.10.05 |
[Python] t분포의 신뢰구간(Confidence Interval, CI) (0) | 2022.10.05 |
[Python] 통계량을 이용해 t 검정, z 검정(t-test, z-test) (0) | 2022.10.02 |