1. 퍼셉트론의 등장과 개념
퍼셉트론은 인공 신경망의 아주 기본적인 구성 요소이자 가장 작은 단위이다.
사람 뇌에 있는 신경 세포인 뉴런이 전기 신호를 주고받는 방식을 수학적으로 흉내 낸 알고리즘이다.
프랭크 로젠블랫(Frank Rosenblatt)이 1957년에 고안했으며, 오늘날 우리가 열광하는 딥러닝의 기원이 되는 아주 중요한 개념이라 할 수 있다.
2. 퍼셉트론의 구조와 동작 원리
퍼셉트론은 여러 개의 신호를 입력받아서 하나의 신호를 출력한다.
y = wx + b
입력값 (x): 뉴런이 외부로부터 받아들이는 자극 신호이다.
가중치 (w): 각 입력 신호가 결과에 미치는 중요도를 결정한다. 가중치가 클수록 그 입력값이 결과에 더 강한 영향을 미친다.
편향 (b 또는 θ): 뉴런이 얼마나 쉽게 활성화되는지, 즉 결과를 1로 출력하는지를 조절하는 기준점 역할을 한다.
출력 조건
w1 * x1 + w2 * x2 + b <= 0 일 때 y = 0
w1 * x1 + w2 * x2 + b > 0 일 때 y = 1
핵심
계산된 총합이 임계값을 넘으면 1, 넘지 않으면 0을 출력하는 것이 동작 원리의 전부이다.
이처럼 특정 임계값을 기준으로 출력이 0 아니면 1로 나뉘는 함수를 계단 함수(Step function)라고 부른다.
3 단순한 논리 회로와 단층 퍼셉트론
앞서 설명한 구조를 바탕으로 층이 하나뿐인 단층 퍼셉트론을 만들 수 있다. 이를 파이썬 코드로 구현해 본다.
3-1 AND 게이트
AND 게이트는 입력이 모두 1일 때만 1을 출력하고 나머지는 0을 출력한다.
진리표
x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1
파이썬 구현
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
여기서 임계값인 θ를 -b로 치환하면 편향을 활용한 식으로 다시 작성할 수 있다.
편향을 적용한 파이썬 구현
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
if tmp <= 0:
return 0
else:
return 1
가중치와 편향이 (0.5, 0.5, 0.7)이거나 (0.5, 0.5, 0.8)이거나 (1.0, 1.0, 1.0)일 때도 조건을 만족한다. 퍼셉트론으로 AND 게이트를 만들 수 있는 조합은 무수히 많다.
3-2 NAND 게이트
NAND 게이트는 AND 게이트와 정반대의 값을 출력한다.
진리표
x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 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
if tmp <= 0:
return 0
else:
return 1
AND 게이트를 구현하는 매개변수 부호를 모두 반대로 뒤집으면 간단하게 만들 수 있다.
3-3 OR 게이트
OR 게이트는 입력 신호 중 하나라도 값이 1이면 출력이 1이 된다.
진리표
x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1
파이썬 구현
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
코드를 자세히 보면 AND, NAND, OR 모두 기본적인 구조는 동일하고, 오직 가중치와 편향 값만 다르다는 것을 알 수 있다.
4 단층 퍼셉트론의 한계와 XOR 문제
앞서 만든 AND, NAND, OR 게이트는 모두 층이 하나뿐인 단층 퍼셉트론이다.
단층 퍼셉트론은 그래프에 직선 하나를 그어서 데이터를 딱 두 그룹으로 나눌 수 있는 선형 문제만 풀 수 있다.
여기서 인공지능 역사에 큰 시련이 찾아온다. 바로 XOR 게이트(배타적 논리합)를 만들 수 없다는 한계에 부딪힌 것이다.
XOR은 두 입력값이 다를 때만 1을 출력하는데, 이를 2차원 평면에 점으로 찍어보면 직선 하나로는 절대 0과 1의 영역을 나눌 수가 없다.
종이에 점을 찍고 하나의 직선을 그어서 해결할 수 없는 것과 같은 이치다.
이 치명적인 한계 때문에 인공지능 연구가 한동안 암흑기(AI 겨울)를 맞기도 했다.
5 다층 퍼셉트론(MLP)으로 한계 돌파
이 한계를 극복하기 위해서는 비선형적인 접근이 필요하다. 앞서 만든 3가지 논리 게이트를 조합하면 XOR 게이트를 만들 수 있다.
XOR 게이트 진리표 조합
x1 x2 s1(NAND) s2(OR) y(AND)
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0
위 표의 흐름대로 코드를 작성하면 다음과 같다.
파이썬 구현
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
NAND와 OR를 먼저 통과시킨 값을 다시 AND에 집어넣었다. 이런 식의 조합을 다층 구조, 즉 다층 퍼셉트론(Multi-layer Perceptron)이라고 한다.
퍼셉트론 하나로는 직선 하나밖에 못 긋지만, 퍼셉트론을 여러 층으로 쌓고 조합하면 곡선을 그리거나 아주 복잡한 공간을 이리저리 나눌 수 있게 된다.
즉, 단층 퍼셉트론으로는 표현하지 못하던 영역을 표현하며 비선형 문제를 풀 수 있게 된 것이다.
결론적으로 지금 우리가 아는 챗GPT나 이미지 생성 AI 같은 어마어마한 딥러닝 기술도, 결국 이 퍼셉트론을 수십, 수백 층으로 아주 깊게 쌓아 올려서 학습시킨 결과물이다.
우리가 학습한 간단한 논리 함수들이 현대 AI를 떠받치는 가장 핵심적인 뼈대가 된 것이다.