Perceptron
Perceptron
- 퍼셉트론 : 다수의 신호를 입력받아 하나의 신호를 출력한다. 퍼셉트론은 뉴런(노드)로 부터 가중치를 곱한 신호의 총합이 정해진 한계를 넘어설 때 1을 출력한다. 그 한계를 임계값$(\theta)$이라고 한다.
퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다. 즉, 가중치가 클수록 해당 신호의 중요도가 높아짐을 알 수 있다.
논리회로
AND 게이트
And 게이트는 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
[AND 게이트의 진리표]
AND 게이트를 퍼셉트론으로 표현하고자 한다면, 진리표대로 작동하는 $w_1,w_2,\theta$의 값을 정하면 되며, 그 매개변수의 조합은 무수히 많다. 이때 $\theta$를 $-b$로 치환하여 식을 전개하면 다음과 같으며, b를 편향이라고 한다.
\[y= \begin{cases} 0(b+w_1x_1+w_2x_2\le0)\\ 1(b+w_1x_1+w_2x_2>0) \end{cases}\]위 식을 넘파이를 활용해 구현해보자
import numpy as np
x = np.array([x1, x2])
w = np.array([w1, w2])
b = -0.7 #적당한 값(매개변수)
tmp = np.sum(wx) + b
if tmp <= 0:
return 0
else
return 1
NAND, OR 게이트
NAND는 Not AND를 의미하며 그 출력은 AND게이트를 뒤집은 것이 된다.
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
[NAND 게이트의 진리표]
단순히 AND게이트를 구현하는 매개변수의 부호를 모두 반전하기만 하면 NAND게이트가 된다. OR게이트는 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로이다.
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
[OR 게이트의 진리표]
퍼셉트론
가중치와 편향
최상단의 식에서 $\theta$를 $-b$로 치환하여 식을 전개하면 다음과 같으며, b를 편향이라고 한다.
\[y= \begin{cases} 0(b+w_1x_1+w_2x_2\le0)\\ 1(b+w_1x_1+w_2x_2>0) \end{cases}\]위 식과 넘파이를 활용해 AND 게이트를 구현해보자.
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7 #적당한 값(매개변수)
tmp = np.sum(wx) + b
if tmp <= 0:
return 0
else
return 1
정리하자면 가중치(w1, w2)는 각 입력 신호가 결과에 주는 영향력을 조절하는 매개변수고, 편향(b)은 뉴런이 얼마나 쉽게 활성화 하느냐를 조정하는 매개변수이다. 이어서 NAND와 OR게이트를 구현해보자.
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(wx) + b
if tmp <= 0:
return 0
else
return 1
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([1, 1])
b = -0.2
tmp = np.sum(wx) + b
if tmp <= 0:
return 0
else
return 1
XOR 게이트
XOR 게이트는 배타적 논리합이라는 논리 회로입니다. $x1, x2$ 중 한쪽이 1일 때만 1을 출력한다.
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
[XOR 게이트의 진리표]
좌표평면 위에서 $(b,\ w1, \ w2)=(-0.5,1.0,1.0)$일 때, AND, NAND, OR 게이트는 직선 하나로 나눌 수 있으며 그것을 선형 영역이라고 부르며, 직선이 아닌 곡선으로 나누어야 할 때에는 비선형 영역이라고 부른다. 퍼셉트론 하나로는 XOR 게이트를 표현할 수 없다. 다만, 퍼셉트론을 층을 쌓아 다층 퍼셉트론을 만들어 XOR 게이트의 표현이 가능하다. 먼저 처음 제공되는 $x_1, x_2$를 각각 NAND, OR게이트에 입력한 후 출력된 각각의 결과를 AND게이트에 입력해주면 된다. 그 진리표는 다음과 같다.
$x_1$ | $x_2$ | $s_1$ | $s_2$ | Y |
---|---|---|---|---|
0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 |
[XOR 게이트의 진리표]
원리를 알았으므로 XOR게이트의 구현은 훨씬 수월하다.
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
>>XOR(0,0)
0
>>XOR(1,0)
1
>>XOR(0,1)
1
>>XOR(1,1)
0
이처럼 다층 퍼셉트론이 동작하는 방법을 더 자세히 서술하면 다음과 같다.
- 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.
- 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력한다.
Enjoy Reading This Article?
Here are some more articles you might like to read next: