퍼셉트론이란?
퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 퍼셉트론 신호는 1 or 0 두 가지 값을 가질 수 있다.
위의 그림은 2개의 신호를 받은 퍼셉트론의 예이다. $x_1$과$x_2$는 입력신호, $y$는 출력 신호, $w_1$과 $w_2$는 가중치를 뜻한다. 그림의 원은 뉴런 혹은 노드라고 부른다. 입력 신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력하고, 넘지 않는 경우는 0을 출력한다. 그 한계값을 우리는 임계값이라고 부르고, 기호로는 $\theta$로 나타낸다.
퍼셉트론의 동작을 수식으로 나타내 보면 밑의 식으로 나타낼 수 있다.
\[y = \begin{cases} \ 0 & (w_1x_1 \ + \ w_2x_2 \leq \ \theta) \\ \ 1 & (w_1x_1 \ + \ w_2x_2 \gt \ \theta) \end{cases}\]퍼셉트론은 복수의 입력 신호에 각각에 고유한 가중치를 부여한다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 역할을 한다. 즉, 가중치가 클수록 해당 신호가 그만큼 더 중요한다는 것을 의미한다.
용어 정리
- $x_1, x_2$ : 입력신호
- $y$ : 출력신호
- $w_1, w_2$ : 가중치
- 원 : 뉴런 or 노드
단순한 논리 회로
AND 게이트
입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.
A | B | A AND B |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
NAND 게이트
NAND는 Not AND를 의미한다. 동작은 AND 게이트의 출력을 뒤집은 것이 된다.
A | B | A NAND B |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
OR 게이트
입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로이다.
A | B | A OR B |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
퍼셉트론의 구조는 AND, NAND, OR 게이트 모두에서 똑같다. 세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값)의 값 뿐이다.
퍼셉트론 구현하기
논리 회로를 파이썬, 넘파이로 구현해보자.
가중치와 편향 도입
$\theta$를 -b로 치환하면 퍼셉트론 동작이 밑의 식처럼 된다. 기호 표기만 바꿨을 뿐, 의미는 같다. 여기에서 b는 편향(bias)이라 한다. 식을 해석해보면, 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합아여, 그 값이 0을 넘으면 1, 넘지 않으면 0을 출력한다.
\[y = \begin{cases} \ 0 & (\ b\ +\ w_1x_1 \ + \ w_2x_2 \leq \ 0) \\ \ 1 & (\ b\ +\ w_1x_1 \ + \ w_2x_2 \gt \ 0) \end{cases}\]AND게이트 구현
1
2
3
4
5
6
7
8
9
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
elif tmp > 0:
return 1
편향을 더하고 가중치를 곱한 입력의 총합이 임계값을 넘으면 1을 반환하고 그외에는 0을 반환한다.
1
2
3
4
AND(0, 0) # 0을 출력
AND(1, 0) # 0을 출력
AND(0, 1) # 0을 출력
AND(1, 1) # 1을 출력
NAND, OR게이트 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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 게이트를 살펴봤다. 계속해서 XOR 게이트도 생각해보자.
XOR 게이트
XOR 게이트는 베타적 논리합이라는 논리 회로이다. $x_1$과$x_2$ 중 한쪽이 1일 때만 1을 출력한다.
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
지금까지 본 퍼셉트론으로는 이 XOR 게이트를 구현할 수 없다. 그 이유는 시각적으로 확인해보자.
우선 OR 게이트의 동작을 시각적으로 생각해보자. OR 게이트는, 예를 들어 가중치 매개변수가 (b, $w_1, w_2$) = (-0.5, 1.0, 1.0)일 때 밑의 식으로 표현된다.
\[y = \begin{cases} \ 0 & (\ -0.5\ +\ x_1 \ + \ x_2 \leq \ 0) \\ \ 1 & (\ -0.5\ +\ x_1 \ + \ x_2 \gt \ 0) \end{cases}\]위의 식의 퍼셉트론은 직선으로 나뉜 두 영역을 만든다. 직선으로 나뉜 한쪽 영역은 1을 출력하고 다른 한쪽은 0을 출력한다.
실제로 위의 그림은 직선으로 네 점을 제대로 나누는 것을 확인할 수 있다. 그럼 XOR 게이트의 경우는 어떨까?
위의 그림은 XOR 게이트의 출력을 나타낸다. 네 점을 직선 하나로 나누는 방법은 너무 어렵고, 사실상 불가능하다.
선형과 비선형
직선 하나로는 위의 XOR 게이트의 출력을 제대로 나눌 수 없다. 하지만 ‘직선’이라는 제약을 없앤다면 가능하다.
예를 들어 위의 그림처럼 나눌 수 있다. 퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있다. 위의 그림처럼 곡선은 표현할 수 없다는 것이다. 덧붙여서 위의 그림과 같은 곡선의 영역은 비선형이라고 하고, 직선의 영역은 선형이라고 한다.
다층 퍼셉트론 출현
퍼셉트론으로는 XOR 게이트를 표현할 수 없었다. 하지만, 퍼셉트론의 층을 쌓아 다층 퍼셉트론을 만들 수 있는데, 이를 이용하여 XOR을 표현할 수 있게 되었다.
기존 게이트 조합하기
XOR 게이트를 만드는 방법은 다양하다. 그중 하나는 앞서 만든 AND, NAND, OR 게이트를 조합하는 방법이다.
위의 그림처럼 AND, NAND, OR 게이트를 조합해서 XOR 게이트를 만들어 보았다.
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
XOR 게이트 구현
1
2
3
4
5
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
위의 그림은 XOR의 퍼셉트론이다. XOR는 다층 구조의 네트워크이다. 왼쪽부터 차례로 0층, 1층, 2층이라고 부른다. 지금까지 본 AND, OR 퍼셉트론과는 형태가 다르다. 실제로 AND, OR은 단층 퍼셉트론이지만, XOR은 2층 퍼셉트론이다. 이처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라 한다.
동작을 서술해보면
- 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.
- 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력한다.
이상으로 2층 구조를 사용해 XOR 게이트를 구현할 수 있게 되었다. 다시 말해 단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있었다. 이처럼 퍼셉트론은 층을 쌓아 더 다양한 것을 표현할 수 있다.
정리
- 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
- 퍼셉트론에서는 ‘가중치’와 ‘편향’을 매개변수로 설정한다.
- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
- XOR 게이트는 단층 퍼셉트론으는 표현할 수 없다.
- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
- 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.
출처 : 밑바닥부터 시작하는 딥러닝(사이토 고키), 한빛미디어