퍼셉트론: 다수의 신호에서 하나의 출력 신호
퍼셉트론은 여러 입력 신호를 받아 하나의 출력 신호를 생성하는 알고리즘이다. 입력 신호는 각각의 가중치(weight)를 가지며, 뉴런에 도달한 신호의 총합이 정해진 임계값(threshold)을 초과할 때 1을 출력한다. 이를 뉴런이 "활성화된다"고 표현한다.
수식으로 나타내면 다음과 같다.
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1 * w1 + x2 * w2
if tmp <= theta:
return 0
else:
return 1
위 코드는 두 입력값 x1, x2에 가중치를 곱한 후 그 합이 임계값 theta를 넘는지 확인하여 1 또는 0을 반환한다.
앞서 구현한 AND 게이트는 직관적이지만, 퍼셉트론의 일반적인 형태를 위해 임계값을 편향(bias)으로 바꾸어 다음과 같이 수정할 수 있다.
여기서 b는 편향으로, 뉴런이 얼마나 쉽게 활성화되는지를 조절한다.
이를 파이썬으로 구현하면 다음과 같다.
import numpy as np
def AND(x):
w = np.array([0.5, 0.5])
b = -0.7
tmp = np.sum(w * x) + b
return 1 if tmp > 0 else 0
이제 입력 신호의 가중치 합과 편향을 합쳐 그 결과가 0을 넘으면 1을 출력한다.
비슷한 방식으로 NAND와 OR 게이트도 구현할 수 있다.
def NAND(x):
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(x):
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w * x) + b
return 1 if tmp > 0 else 0
단일 퍼셉트론은 선형 영역을 나누는 데는 유용하지만, 비선형 영역을 나누지 못한다. 예를 들어 XOR 게이트는 단일 퍼셉트론으로 구현할 수 없다.
비선형 문제를 해결하기 위해 퍼셉트론을 여러 층으로 쌓아 다층 퍼셉트론(multi-layer perceptron, MLP)을 만들 수 있다. 다층 퍼셉트론을 통해 XOR 게이트도 구현 가능하다.
앞서 구현한 AND, NAND, OR 게이트를 사용해 XOR 게이트를 구성할 수 있다.
def XOR(x):
s1 = NAND(x)
s2 = OR(x)
y = AND(np.array([s1, s2]))
return y
XOR 게이트는 NAND, OR, AND 게이트를 조합하여 다층 퍼셉트론으로 구현할 수 있다. 이렇게 층을 쌓음으로써 비선형 영역까지 표현할 수 있다.
퍼셉트론: 여러 입력 신호를 받아 하나의 출력 신호를 생성하는 알고리즘.
가중치와 편향: 가중치는 입력 신호의 영향력을 조절하며, 편향은 뉴런의 활성화 여부를 조절한다.
단일 퍼셉트론의 한계: 선형 영역만 나눌 수 있어 XOR 같은 비선형 문제는 해결할 수 없다.
다층 퍼셉트론: 여러 층을 쌓아 비선형 문제를 해결할 수 있으며, XOR 게이트를 구현할 수 있다.