(밑바닥부터 시작하는 딥러닝, 사이토고키) 내용을 바탕으로 작성하였습니다.
퍼셉트론 - Perceptron
1. 퍼셉트론이란?
퍼셉트론이란 프랑크 로젠블란트가 1957년에 고안한 알고리즘입니다. 퍼셉트론은 신경망(딥러닝)의 기원이 되는 알고리즘입니다.
퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력합니다. 퍼셉트론은 1(신호가 흐른다), 0(신호가 흐르지 않는다) 신호를 출력하여 앞으로 전달합니다.
- $x_{2}$와 $x_{1}$는 입력 신호,
- $y$ 는 출력 신호, $w_{1}$와 $w_{2}$는 가중치를 의미합니다.
- 원을 뉴련 혹은 노드라고 부릅니다.
퍼셉트론의 동작원리
1. 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해집니다. ($w_{1}$$x_{1}$, $w_{2}$$x_{2}$ )
2. 뉴런에서 보내온 신호의 총합이 정해진 한계(임계값)를 넘어설 때만 1을 출력합니다. ('뉴런이 활성화한다'라고 표현합니다.) (정해진 한계를 임계값이라고 하며, $\theta$로 나타냅니다.)
이를 수식으로 나타내면 다음과 같이 됩니다.
퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여합니다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용합니다. 즉, 가중치가 클수록 해당 신호가 그만큼 더 중요함을 뜻합니다.
2. 단순한 논리 회로
퍼셉트론에 이용될 수 있는 간단한 논리회로에 대해 설명하겠습니다.
2.1 AND 게이트
AND 게이트는 입력이 둘이고 출력은 하나입니다. 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력합니다.
위의 진리표대로 작동하도록 하는 ($w_{1}$, $w_{2}$, $\theta$) 는 (0.5, 0.5, 0.7) 등 무수히 많습니다.
$x_{1}$$w_{1}$ + $x_{2}$$w_{2}$ > $\theta$ 인 경우에만 1을 출력하게 됩니다.
2.2 NAND 게이트와 OR 게이트
NAND는 Not AND를 의미하며, 그 동작은 AND 게이트의 출력을 뒤집은 것이 됩니다.
NAND 게이트를 표현하려면 예를 들어 ($w_{1}$, $w_{2}$, $\theta$) = (-0.5, -0.5, -0.7) 등 무수히 많은 조합이 있습니다.
OR 게이트는 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로입니다.
OR 게이트의 매개변수는 ($w_{1}$, $w_{2}$, $\theta$) = (0.5, 0.5, 0.3) 으로 나타낼 수 있습니다.
기계학습은 이 매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 합니다. 학습이란 적절한 매개변수 값을 정하는 작업이며, 사람은 퍼셉트론의 구조(모델)를 고민하고 컴퓨터에 학습할 데이터를 주는 일을 합니다.
여기서 중요한 점은 퍼셉트론의 구조는 AND, NAND, OR 게이트 모두에서 똑같다는 것입니다. 세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값)의 값이므로, 값만 적절히 조정하여 AND, NAND, OR로 변신할 수 있습니다.
3. 퍼셉트론 구현하기
3.1 AND함수 구현
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1 * w1 + x2 * w2 # 가중치를 곱한 입력의 총합이 임계값을 넘으면 1을 반환하고 그 외에는 0을 반환합니다.
if tmp <= theta:
return 0
elif tmp > theta:
return 1
AND(0, 0) # 0을 출력
AND(1, 0) # 0을 출력
AND(0, 1) # 0을 출력
AND(1, 1) # 1을 출력
3.2 가중치와 편향 구현하기
퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력합니다.
가중치와 편향을 도입한 AND 게이트는 다음과 같이 구현할 수 있습니다.
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
tmp = n[.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
여기에서 $-\theta$가 편향 $b$로 치환되었습니다.
$w_{1}$과 $w_{2}$는 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수고, 편향은 뉴런이 얼마나 쉽게 활성화(결과를 1로 출력)하느냐를 조정하는 매개변수입니다. 편향의 값은 뉴런이 얼마나 쉽게 활성화되는지를 결정합니다.
NAND 게이트와 OR 게이트 구현
def NAND(x1, x2):
x = np.array([x1, x2])
w = np. array([-0.5, -0.5]) # AND와는 가중치(w와 b)만 다르다.
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
4. 퍼셉트론의 한계
4.1 XOR 게이트를 구현할 수 없다.
XOR 게이트는 베타적 논리합이라는 논리 회로입니다. $x_{1}$과 $x_{2}$ 중 한쪽이 1일 때만 1을 출력합니다.
단층 퍼셉트론으로는 XOR 게이트를 구현할 수 없습니다.
하나의 직선으로 XOR을 나누기란 불가능합니다. 따라서 단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다는 의미가 됩니다.
4.2 선형과 비선형
직선 하나로는 XOR 게이트를 구현할 수 없지만, 곡선이라면 구현할 수 있습니다.
이와 같이 곡선의 영역을 비선형 영역, 직선의 영역을 선형 영역이라고 합니다.
5. 다충 퍼셉트론이 충돌한다면
퍼셉트론으로는 XOR 게이트를 표현할 수 없었습니다. 층을 하나 더 쌓아서 다층 퍼셉트론으로 XOR을 구현할 수 있습니다.
5.1 기존 게이트 조합하기
AND, NAND, OR게이트를 조합하여 XOR 게이트를 만들 수 있습니다.
$x_{1}$과 $x_{2}$는 NAND와 OR 게이트의 입력이 되고, NAND의 출력을 $s_{1}$, OR의 출력을 $s_{2}$로 해서 AND 게이트의 입력으로 넣어주면 됩니다.
5.2 XOR 게이트 구현하기
지금까지 정의한 함수 AND, NAND, OR를 사용하면 다음과 같이 구현할 수 있습니다.
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을 출력
이처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론 이라고 합니다. 퍼셉트론은 층을 쌓아 더 다양한 것을 표현할 수 있습니다.
6. 정리
- 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
- 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.
- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
'수학 > 딥러닝 이론' 카테고리의 다른 글
03-3. 신경망 학습 (3) - 학습 알고리즘 구현 (1) | 2020.09.11 |
---|---|
03-2. 신경망 학습 (2) - 기울기와 경사하강법 (0) | 2020.09.11 |
03-1. 신경망 학습 (1) - 손실 함수와 수치 미분 (0) | 2020.09.10 |
02-2. 신경망 (2) - 출력층 설계와 MNIST 구현 (6) | 2020.09.09 |
02-1. 신경망 (1) - 3층 신경망 순전파 구현 (0) | 2020.09.09 |