본문 바로가기
인공지능

[밑바닥부터 시작하는 딥러닝] chapter2: 퍼셉트론

by stepbyme 2022. 8. 15.
반응형

퍼셉트론(Perceptron)은 1975년 프랑크 로젠블라트(Frank Rosenblatt)가 고안한 알고리즘입니다. 퍼셉트론은 신경망(딥러닝)의 기원이 되는 알고리즘이라 퍼셉트론의 구조를 배우는 것이 신경망과 딥러닝의 기초를 배우는데 도움이 됩니다. 

 

퍼셉트론이란?

퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력합니다. 예를 들면 전류가 전선을 타고 전자를 내보내듯이 퍼셉트론 신호도 흐름을 만들고 정보를 앞으로 전달합니다. 다만 퍼셉트론 신호는 '흐른다/안 흐른다(1 이나 0)'의 두가지 값을 가질 수 있습니다. 

하단의 그림은 입력으로 2개의 신호를 받은 퍼셉트론의 예로 x1과 x2는 입력 신호, y는 출력신호, w1과 w2는 가중치를 뜻합니다. 그림의 원을 뉴런 혹은 노드라 하고 입력신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해집니다. 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때 1을 출력합니다. 그 한계를 임계값이라 하고, θ 세타로 나타냅니다. 

 

 

입력이 2개인 퍼셉트론

이를 수식으로 나타내면 다음과 같습니다. 

AND 게이트 : AND 게이트는 입력이 둘이고 출력은 하나입니다. 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력합니다.

AND 게이트의 진리표

NAND 게이트와 OR게이트: NAND는 Not AND를 뜻하고 AND게이트의 출력을 뒤집은 것입니다. x1과 x2가 모두 1일 때만 0을 출력하고, 그 외에는 1을 출력합니다. 

NAND 게이트의 진리표

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

OR게이트의 진리표

퍼셉트론의 구조는 AND, NAND, OR게이트 모두 동일합니다. 다른것은 매개변수 (가중치와 임계값)의 값만 다릅니다. 매개변수의 값만 적절히 조정하여 AND, NAND, OR로 변경됩니다.

 

퍼셉트론 구현

논리회로를 파이썬으로 구현하면 다음과 같습니다. x1, x2를 인수로 받는 AND함수입니다.

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

가중치와 편향을 도입하면 다음과 같습니다. θ 세타를 -b로 치환하여 퍼셉트론을 만들어 보겠습니다. 여기서 b는 편향(bias) 이라 합니다. 편향의 값은 뉴런이 얼마나 쉽게 활성화되는지를 결정합니다. 

def AND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.5,0.5])
    b=-0.7
    tmp=np.sum(x*w)+b
    if tmp <=0:
       return 0
    else tmp>0:
       return 1

NAND게이트와 OR게이트도 구현해 보겠습니다. 

def NAND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([-0.5,-0.5])
    b=0.7
    tmp=np.sum(x*w)+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(x*w)+b
    if tmp<=0:
       return 0
    else:
       return 1

퍼셉트론의 한계

AND, NAND, OR의 3가지 논리 회로를 구현하는 것은 가능하지만 XOR게이트는 어떨까요? XOR게이트배타적 논리합입니다. 

XOR 게이트 진리표

x1과 x2 중 한쪽이 1일떄만 1을 출력합니다. 퍼셉트론으로는 XOR게이트 구현이 불가능합니다. 

먼저 OR게이트를 시각적으로 구현해보겠습니다. 예를 들어 가중치 매개변수가 (b,w1,w2)=(-0.5,1.0,1.0)일때 OR 식은 하단과 같습니다.

OR게이트

위의 OR 게이트를 그려보면 다음과 같이 시각화할 수 있습니다. 

OR게이트 퍼셉트론의 시각화: 파란색 영역은 0을 출력하는 영역이고, 전체 영역은 OR게이트의 성질을 만족합니다.

OR 게이트는 (x1, x2)=(0,0)일때 0을 출력하고 (0.1), (1,0),(1,1)일 떄는 1을 출력합니다. 그림에서는 0을 원(O)과 1을 삼각형으로 표현했습니다. 해당 위 그림의 직선은 네점을 제대로 나누고 있습니다. 

 

XOR게이트의 경우는 직선으로 나눌 수 없습니다. 하지만 비선형 형태라면 다음과 같이 그릴 수 있습니다. 퍼셉트론의 한계점은 직선 하나로 나눈 영역만 표현하는데 이 한계점은 '층을 쌓아' 다층 퍼셉트론(multi-layer perceptron)으로 표현가능합니다. 

 

XOR게이트를 곡선으로 나눌 수 있음

XOR게이트를 만드는 방법은 다양한데 AND, NAND, OR 게이트를 조합하여 구성할 수 있습니다. NAND의 출력을 s1, OR의 출력을 s2 로 진리표를 만들면 XOR출력을 구현할 수 있습니다. 

XOR진리표

XOR 게이트를 파이썬으로 구현하면 다음과 같습니다.

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

XOR 게이트를 퍼셉트론으로 표현하면 다음과 같습니다. 다음과 같이 XOR은 2층 퍼셉트론이고 이렇게 층이 여러개인 퍼셉트론을 다층 퍼셉트론이라 합니다. 

XOR 퍼셉트론

 

반응형

댓글