퍼셉트론(Perceptron) - 1 딥러닝(Deep Learning)과 인공신경망(Neural Network)의 시작

    1. 인공신경망과 딥러닝의 시작


    "인공지능의 시작은 퍼셉트론(Perceptron)이 처음이다!"라고 말하기에는 힘들지만, "인공신경망(Neural Network)과 딥러닝(Deep Learning)은 퍼셉트론이 처음이다!"라고 말할 수 있을 것입니다. 많은 사람들이 "인공지능 = 신경망"이라고 생각하는 분들이 많은데 그 만큼 인간이 예측하기 힘든 부분을 신경망이 보여주기 때문에 인공지능이란 컴퓨터가 하는 행위(또는 생각)를 인간이 알아차리지 못하는 것으로 해석하는 분들이 많습니다.



    바로 그 신경망의 시작이 퍼셉트론입니다. 신경망이 뭔지도 모르는데 퍼셉트론은 뭐지? 왠지 어려워 보이는데? 라고 생각하는 분들이 있을 수 있습니다. 컴퓨터를 아예 모르고, 컴맹이신 분은 쉬운 설명을 해도 이해가 안 될 수 있습니다. 반대로 컴퓨터를 어느정도 배우신 분이라면 퍼셉트론은 전혀 어려운 부분이 아닙니다.



    처음에 퍼셉트론 이라는 용어를 들었을 때, 영화 "트랜스포머"가 생각이 났습니다. 


    트랜스포머의 악당 "메가트론(Megatron)"


    트랜스포머를 보면 메가트론(Megatron)이라는 악당이 나오는데 혹시, 트론이라는 말이 로봇과 관련이 있나 싶어서, 검색을 했지만 그런 용어는 나오지 않았습니다.



    퍼셉트론의 시작은 미국에서 1943년 신경외과 의사인 워렌 맥컬론(Warren McCulloch)과 논리학자인 월터 피츠(Walter Pitts)의 "A Logical Calculus Immanent in Nervous Activity" 연구에서 처음 등장하는데 이 두명은 인공 신경망을 만드려는 시도를 하는 최초의 인물들입니다.


    좌측, Walter Pitts 우측, Warren McCulloch


    이 둘은 전기스위치처럼 온오프 하는 기본적인 기능이 있는 인공적으로 만들어진 신경을 그물망 형태로 연결을 하면 사람의 뇌처럼 동작할 수 있다고 이론적으로 증명을 했습니다.



    이 연구로 인공지능의 신호탄을 올리게 되고, 그 뒤로 영향을 받은 코넬 대학교의 프랭크 로센블래트(Frank Rosenblatt)는 1958년 퍼셉트론이라는 것을 처음으로 만들게 됩니다. 로센블래트는 최초의 인공신경망의 이론을 바탕에 "학습(Learning)"이라는 개념을 추가합니다. 


    Frank Rosenblatt, 왼쪽의 기계가 퍼셉트론 장비



    2. 퍼셉트론(Perceptron) 동작 설명


    퍼셉트론의 동작은 노드(뇌로 따지면 뉴런)의 가중치와 입력치를 곱한 것을 모두 합한 값이 임계치보다 크면 활성화되고, 1을 출력하며, 활성화되지 않으면 결과값으로 0을 출력하는 것입니다. 이를 그림으로 표현하면 아래와 같습니다.



    갑자기 어려워지나요? 활성화라는 말과 노드는 무엇이고, 뉴런은 또 무엇인지 시작부터 헷갈릴 수 있을텐데... 자세히 하나하나 설명해보자면, 왼쪽에 보이는 X1 부터 Xn까지의 동그라미들을 노드 혹은 뉴런이라고 부를 수 있습니다. 참고로 여기서 뉴런을 모르는 분들을 위해 추가적으로 설명을 드리자면...



    Structure of a neuron

    뉴런의 구조, https://simple.wikipedia.org/wiki/Neuron


    위의 그림이 뉴런(神經細胞, 신경세포)인데 인간의 뇌는 위의 형태를 띄고 있는 수억개 이상의 뉴런들로 인해서 사고를 하고 데이터를 저장한다고 생각하면 됩니다. 


    우리가 화면을 봤을 때, 뇌는 어떻게 그 화면을 빠르게 인지하고 머리속에 저장을 할 수 있을까? 우리는 10년전에 일도 어쩔땐 어제일처럼 기억하는 경우가 있는데 뇌에서 어떻게 그러한 데이터를 저장할 수 있을까? 이 물음의 답은 인간의 뇌는 수천대의 컴퓨터보다 엄청나게 정교한 아키텍처로 구성되어 있기 때문입니다.


    이러한 사람의 뇌를 인공적으로 구현하기 위해 하나하나의 뉴런을 컴퓨터에서 노드(사실 그냥 데이터)라는 형태로 구현하게 되었고, 이러한 노드들의 데이터로 인해서 컴퓨터는 마치 사고를 하는 것처럼 보이게 만드는 것입니다.



    신경망의 왼쪽 X1 ~ Xn은 무엇을 뜻할까요? 우리가 지나가다가 고양이를 봤을 때, 고양이라고 어떻게 인지를 할까요? 그건 바로 수많은 학습을 통해서 고양이를 알아갔을 것입니다. 다리가 4개 달려 있고, 약 5kg 정도의 몸무게를 가졌으며, 살금살금 걷고, 짧은 털 등등


    고양이를 묘사하는 이러한 특징(Feature)들을 바로 왼쪽의 노드값(Input값이라고 한다)라고 볼 수 있고, 이러한 특징들의 값들을 계산해서 고양이 일지 아닐지를 판단하는 것이 인공신경망인데 퍼셉트론은 바로 인공신경망을 구현하기 위한 최초의 모델입니다.


    퍼셉트론의 개념도를 보면, x1에 w1부터 xn에 wn까지의 값이 있는데 w(Weight)라는 값은 가중치라고 보면 됩니다. 컴퓨터의 판단 없이 있는 그대로의 Data 자체를 넣는 것을 X값이며, X값과 연산되는 W값은 가중치 혹은 보정치가 되는 값이라고 보면 됩니다.


    w값도 4개이고, x의 값도 네개이니, 위 개념도는 즉 x1w1, x2w2, x3w3, x4w4 값들이 다음 노드에 들어가는 구조입니다. 그리고 해당 값이 지정된 특정 값(기준이 되는 값)을 넘으면 1, 안 넘으면 0을 출력하는 것이 바로 퍼셉트론의 구조입니다.



    이를 공식으로 다시 풀면 아주 간단하게 나오게 됩니다. 즉, 입력값과 가중치 + b(bias)라고 불리우는 추가적인 보정치값을 합했을 때, 0(지정값인 임계치는 개발자 혹은 설계자 마음인데 bias로 조정이 가능하니, 0으로 하는 것이 일반적이라고 생각하면 됩니다)보다 높으면 True라고 인지하여 값을 전달하고, 0이하일 경우, 버리기 위해서 False값을 전달합니다


    위 공식을 소스코드로 구현하자면 아래와 같은 형태의 펑션이 나오게 됩니다.


    1
    2
    3
    4
    5
    6
    7
    function perceptron( x, w, bias ) {
        if( (x * w) + bias > 0 ) {
            return 1;
        } else {
            return 0;
        }
    }

    cs


    어처구니 없을 정도로 쉽나요? 그러나 퍼셉트론은 바로 여기에서 출발을 합니다. 어떤 Input값들과 보정치 (W과 Bias)의 연산이 임계치보다 높으면 값을 다음 노드에 전달하거나 출력하고, 낮으면 버리거나 0을 전달하는 형태라고 이해하면 됩니다. 이것을 인간의 뉴런 메커니즘이라고 생각했고, 바로 이러한 노드들과 다음 노드로 전달하는 것을 다음 레이어(신경망)에 전달한다라고 말할 수 있는 레이어가 많은 것이 딥러닝이라고 할 수 있습니다.


    다음 포스팅에서는 좀 더 퍼셉트론의 로직을 상세히 파기 위해서, 퍼셉트론을 이해하기 위한 게이트 및 진리표에 대해서 설명하도록 하겠습니다.



    댓글

    Designed by JB FACTORY