딥러닝(DL)/딥러닝 기초

[DL] 퍼셉트론 ( Perceptron )

Song 컴퓨터공학 2023. 7. 25. 19:50

 

 

 퍼셉트론(Perceptron) 이란?

 

퍼셉트론(Perceptron) 이란 사람의 뇌신경 세포의 동작과정을 흉내내어 만든 수학적 모델으로 신경망의 기원이 되는 알고리즘입니다. 따라서 퍼셉트론의 구조를 잘 이해하는 것이 앞으로의 신경망과 딥러닝으로 나아가는데 중요한 밑거름이 됩니다.

 

퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력합니다. 퍼셉트론 신호는 0이나 1 둘 중의 하나의 값을 가지게 됩니다. 

 

$$ y=\begin{cases}0,\ \quad \ \ \ w_1x_1+w_2x_2\ \le \theta \\1,\quad \ \ \ \  w_1x_1+w_2x_2\ >\theta \end{cases} $$

 

위의 예시에서 $x_i$ 들은 입력(input) 신호, $y$는 출력 신호, $w_i$ 들은 가중치(weight) 라고 부릅니다. 위 그림에서의 원들을 각각 뉴런(neruon) 혹은 노드(node) 라고 부르는데, 입력 신호가 출력단의 뉴런으로 전달될 때 각각의 고유한 가중치가 곱해지고, 뉴런에서 보내온 신호의 총 합이 특정 임계값 $ \theta $ 를 넘어설 때 1, 그보다 작을 때는 0을 출력합니다.

 

 

 

 퍼셉트론을 이용한 논리 게이트

 

 

부울 대수(Boolean Algebra)-[1]

오늘은 부울 대수, Boolean Algebra에 대해서 알아보도록 하겠습니다. 사실 대수학의 개념은 엄밀하게 수...

blog.naver.com

 

디지털 논리회로에서 배운 기본 논리 게이트를 퍼셉트론을 사용해 구현해보도록 합시다. 퍼셉트론으로 구현한다는 말은 진리표대로 동작하는 $w_1, w_2, \theta $ 값을 결정하는 것, 즉 퍼셉트론의 적절한 매개변수 값을 정하는 것입니다. 

 

논리 게이트를 만족하는 매개변수 조합은 무수히 많습니다. 그 중 예시로 AND gate의 진리표를 만족하는 $w_i, \theta$를 정해보면

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

AND gate

$w_1=0..5, w_2=0.5, \theta = 0.7 $ 로 정하면 AND gate의 진리표와 동일한 진리표를 얻어낼 수 있습니다. NAND 게이트와 OR 게이트 또한 퍼셉트론의 구조를 바꾸지 않고 가중치와 임계값만 변경해서 구해낼 수 있습니다.

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

def OR(x1, x2):
    w1, w2, theta = 0.8, 0.8, 0.5
    temp = w1*x1 + w2*x2
    if temp <= theta:
        return 0
    elif temp > theta:
        return 1

NAND gate / OR gate

 

지금은 우리가 직접 진리표를 보면서 매개변수 값을 정했는데, 이를 컴퓨터가 직접 매개변수 값을 정하도록 하는 작업기계학습 이라고 합니다. 학습이란 곧 적절한 매개변수를 정하는 작업을 뜻합니다.

 

 

 

 가중치와 편향 ( weight and bias )

 

위에서 나타낸 퍼셉트론의 식에서 $\theta$를 $-b$로 치환하고 식 정리를 하면 다음처럼 나타낼 수 있습니다.

 

$$ y=\begin{cases}0,\ \quad \ \ \ b+w_1x_1+w_2x_2\ \le 0\\1,\quad \ \ \ \ b+w_1x_1+w_2x_2\ >0\end{cases} $$

 

표기만 다를 뿐 위 식과 동일한 의미를 가집니다. 이 때의 $b$ 를 Bias(편향, 바이어스) 라고 하며, $w_i$ 들은 여전히 weight(가중치)라 부릅니다. 위 식에서의 퍼셉트론은 입력 신호에 가중치를 곱한 값 + 바이어스가 0을 넘으면 1을 출력하고, 0보다 작으면 0을 출력하는 알고리즘이 됩니다. 이 때 입력 신호에 가중치를 곱한 값 + 바이어스 값을 가중합(weighted sum) 이라고 부릅니다.

 

$w_i$들은 입력 신호가 결화에 주는 영향력을 조절하는 매개변수 이고, $b$는 이름 그대로 뉴런이 얼마나 쉽게 활성화 하느냐를 조절하는 매개변수 입니다.  또한 편향이라는 용어는 '한 쪽으로 치우쳐 균형을 깬다'는 뜻을 가지는데, 위 식은 입력이 모두 0이어도 1을 출력하는 것을 확인할 수 있습니다.

import numpy as np

# 바이어스를 추가한 NAND gate
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = [-0.5, -0.5]
    b = 0.7
    temp = np.sum(w*x) + b
    if temp <= 0:
        return 0
    elif temp > 0:
        return 1

 

 

 

 퍼셉트론의 한계 : XOR

 

위에서 퍼셉트론을 활용하면 AND, NAND, OR gate를 직접 구현도 해보았습니다. XOR gate 를 구현해보기 전에 퍼셉트론의 시각적 의미에 대해 알아보겠습니다.

$x1, x2$로 평면을 구성한다고 했을 때, 퍼셉트론은 직선으로 나뉜 두 영역을 만듭니다. 직선으로 나뉜 한 쪽은 1을 출력하고 다른 한쪽은 0을 출력합니다. 퍼셉트론은 직선이라는 한계가 있기 때문에 오른쪽의 XOR 과 같은 형태를 구현할 수 없습니다. 

 

오른쪽처럼 곡선으로 표현되는 영역을 비선형 영역이라하고, 직선의 영역을 선형 영역이라고 하는데 퍼셉트론은 비선형 영역을 나눌 수 없다는 한계점을 가지고 있습니다. XOR gate는 단층 퍼셉트론만으로는 구성할 수 없고, 은닉층을 추가한 다층 퍼셉트론(MLP, multi layer perceptron) 로 구현할 수 있습니다.

 

디지털 논리회로에서 여러 개의 기본 게이트로 XOR 게이트를 구성할 수 있다는 것을 배웠습니다. 사실 NAND 나 NOR 게이트 하나만으로 나머지 모든 게이트를 구현할 수 있다고 배웠죠. 지금까지 정의한 NAND, AND, OR 함수로 XOR을 구현하게 되면 간단히 구현됩니다.

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

위 같은 다층 구조의 퍼셉트론을 다층 퍼셉트론이라고 부릅니다. XOR은 2층 퍼셉트론인데, 모드 3층으로 구성되지만 가중치를 가지는 층은 2개이기 때문에 일반적으로 출력을 제외한 층의 개수로 퍼셉트론을 구분합니다. 단층 퍼셉트론으로 NAND 게이트를 만들 수 있다는 말은 다층 퍼셉트론으로 디지털 논리 회로의 모든 것을 만들 수 있다는 말과 같습니다. 이처럼 퍼셉트론은 층을 거듭 쌓을 수록 비선형적인 표현도 가능하고, 이론적으로 컴퓨터가 수행하는 모든 처리를 구현할 수 있습니다.

 

이러한 다층 퍼셉트론을 학습하는 방법은 오차 역전파 알고리즘(Back propagation) 알고리즘을 사용해서 학습을 하게 되는데, 이는 추후 다른 게시물로 알아보도록 하겠습니다.

 

 

Reference :

밑바닥부터 시작하는 딥러닝 - 사이토 고키

https://wikidocs.net/60680

https://www.cs.cmu.edu/afs/club/user/cmccabe/ecee.colorado.edu/~ecen4831/lectures/NNet3.html

https://compmath.korea.ac.kr/appmath2021/Perceptron.html