본문 바로가기
딥러닝/기초 이론

01. 퍼셉트론(Perceptron)

by oagree0123 2021. 8. 10.

(밑바닥부터 시작하는 딥러닝) 내용을 바탕으로 작성되었습니다.

1. 퍼셉트론

퍼셉트론(perceptron)은 1957년에 프랑크 로젠블라트가 제안한 인공 신경망 알고리즘 입니다. 퍼셉트론은 뇌를 구성하는 신경 세포의 뉴런을 본따 만들어 유사한 동작을 가집니다. 

[퍼셉트론]

퍼셉트론은 다수의 신호(Input)를 입력받아 하나의 신호(Output)를 출력합니다. 

 

- 위 그림에서 $x_1... x_i$ 는 입력 신호, $y$는 출력 신호, $w_1...w_i$는 가중치를 의미합니다.

- 원은 인공 뉴런에 해당합니다.

- 입력 신호 $x$가 가중치 $w$와 곱해져 뉴런에 보내집니다.

- 뉴런에 전달된 시호가 임계치(threshold)를 넘으면 1을 넘을 때만 1을 출력합니다.

 

이를 수식으로 표현하면 아래와 같습니다. ($θ$는 임계치를 의미합니다.)

$$ w_1x_1 + w_2x_2 + ... + w_nx_n > θ, \;\; (y = 1) $$

$$ w_1x_1 + w_2x_2 + ... + w_nx_n ≤ θ, \;\; (y = 0) $$

 

퍼셉트론은 다수의 입력 신호 각각의 고유한 가중치를 가집니다. 가중치는 신호가 출력에 영향을 미치는 정도를 나타냅니다. 이는 가중치가 크면 클수록 해당 신호가 더 중요하다는 것을 의미합니다.

 

단, 위의 식에서 $θ$를 좌변으로 넘기고 편향 $b$(bias)로 표현할 수 있습니다. 많은 자료에서 편향 $b$를 그림이나 수식에서 생략하는 경우가 많지만 편향 $b$ 또한 딥러닝에서 찾아야할 변수 중 하나 입니다.


2. 단층 퍼셉트론

위에서 설명한 단층 퍼셉트론은 입력을 보내는 단계와 값을 출력하는 두 단계로 이루어집니다. 이때 각 단계를 층(layer)라고 부르며, 입력층(Input layer)와 출력층(Output layer)라고 합니다.

 

[입력층과 출력층]

2.1 단층 퍼셉트론

단층 퍼셉트론은 간단한 논리회로를 통해 구현할 수 있습니다.

 

2.1.1 AND 게이트

AND 게이트는 두 개의 입력 값이 모두 1인 경우에만 1을 출력하고, 그 외에는 모두 0을 출력합니다.

 

$x_1$ $x_2$ y
0 0 0
0 1 0
1 0 0
1 1 1

AND 게이트를 만족하는 ($w_1$, $w_2$, $θ$)는 (0.5, 0.5, 0.7) 등 많은 조합이 있습니다. 이해를 돕기 위해 AND 게이트를 파이썬 코드로 간단하게 구현해 보겠습니다.

 

def AND_gate(x1, x2):
	w1, w2, theta = 0.5, 0.5, 0.7
    resutl = x1*w1 + x2*w2
    if result <= theta:
    	return 0
    elif result > theta:
    	return 1

 

위의 표에 입력 값을 모두 넣어보면 입력 값이 (1, 1)일 경우에만 1을 출력하는 것을 볼 수 있습니다.

 

2.1.2 NAND 게이트

NAND 게이트는 Not AND를 의미하고, AND게이트의 출력이 반대되는 것을 보입니다.

 

$x_1$ $x_2$ y
0 0 1
0 1 1
1 0 1
1 1 0

AND 게이트를 만족하는 (0.5, 0.5, 0.7) 가중치와 임계치에 -를 붙여 (-0.5, -0.5, -0.7)를 식에 대입하면 NAND 게이트를 충족 합니다. 파이썬 코드로 확인해 보겠습니다.

 

def NAND_gate(x1, x2):
	w1, w2, theta = -0.5, -0.5, -0.7
    resutl = x1*w1 + x2*w2
    if result <= theta:
    	return 0
    elif result > theta:
    	return 1

 

2.1.3 OR 게이트

OR 게이트는 입력 값 중 하나 이상이 1이면 출력이 1이 되는 논리 회로입니다.

$x_1$ $x_2$ y
0 0 0
0 1 1
1 0 1
1 1 1

OR 게이트를 만족하는 ($w_1$, $w_2$, $θ$)는 (0.5, 0.5, -0.4) 등 많은 조합이 있습니다. 이번에도 파이썬 코드로 확인해 보겠습니다.

 

def OR_gate(x1, x2):
	w1, w2, theta = 0.5, 0.5, -0.4
    resutl = x1*w1 + x2*w2
    if result <= theta:
    	return 0
    elif result > theta:
    	return 1

 

2.2 단층 퍼셉트론 한계

단층 퍼셉트론은 AND, NAND, OR 게이트로 구현할 수 있습니다. 그러나 단층 퍼셉트론으로 구현할 수 없는 게이트가 있는데 이는 XOR 게이트 입니다. XOR 게이트는 입력 값 두 개가 서로 다른 값일 경우에만 1을 출력합니다. XOR 게이트를 단층 퍼셉트론으로 구현할 수 없는 이유는 하나의 직선으로 XOR을 나눌 수 없기 때문입니다. 

 

$x_1$ $x_2$ y
0 0 0
0 1 1
1 0 1
1 1 0

 

XOR 게이트는 위의 그림과 같이 하나의 직선으로 나누는 것을 불가능 합니다. 그러나 곡선으로 분리하면 구현이 가능 합니다.

이와 같이 직선을 선형 영역, 곡선을 비선형 영역이라고 합니다.


3. 다층 퍼셉트론

XOR 게이트는 AND, NAND, OR 게이트를 조합하면 만들 수 있습니다. 퍼셉트론의 관점으로 말하면 층을 여러 개 쌓으면 만들 수 있습니다. 단층 퍼셉트론은 입력층과 출력층으로만 구성되어 있지만, 다층 퍼셉트론은 입력층과 출력층 사이에 은닉층(hidden layer)이 존재합니다.

[다층 퍼셉트론]

3.1 XOR 게이트

XOR 게이트는 입력 값 두 개가 서로 다른 값일 경우에만 1을 출력합니다. 

$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

$x_1$과 $x_2$는 NAND와 OR 게이트의 입력이고, NAND의 출력을 $s_1$, OR 출력을 $s_2$로 AND게이트에 입력하면 XOR 게이트를 구현할 수 있습니다.

def XOR(x1, x2):
    s1 = NAND_gate(x1, x2)
    s2 = OR_gate(x1, x2)
    y = AND_gate(s1, s2)
    return y

 

XOR 게이트는 은닉층 하나만 추가해서 구현할 수 있었습니다. 그러나 XOR 문제보다 더 복잡한 문제를 해결하기 위해서는 많은 은닉층이 추가되어야 합니다. 이러한 은닉층이 2개 이상인 신경망을 심층 신경망(Deep Neural Network, DNN)이라고 합니다.

[심층 신경망(DNN)]

 

 

지금까지는 AND, NAND, OR 게이트 등 퍼셉트론이 정답을 출력하기 위해 가중치를 사람이 찾았습니다. 그러나 머신 러닝에서는 기계가 가중치를 스스로 찾아내도록 자동화 시키는데 이를 학습(Training) 이라고 부릅니다.

댓글