퍼셉트론(Perceptron)

퍼셉트론은 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랭크 로젠블렛(Frank Rosenblatt)이 1957년에 발표한 이론으로 현재 인공신경망(딥러닝)의 기원이 되는 알고리즘입니다. 퍼셉트론이 동작하는 방식은 각 노드의 가중치와 입력치를 곱한 것을 모두 합한 값이 활성함수에 의해 판단되는데, 그 값이 임계치(θ-세타) 보다 크면 뉴런이 활성화되고 그렇지 않은 경우 비활성화 되는 방식(주로 1-활성화, 0-비활성화)입니다.

그림1 퍼셉트론의 개념

그림1은 2개의 입력을 통해 출력하는 퍼셉트론의 예입니다. x1,x2 입력값에 가중치로 각각 w1,w2를 곱해집니다. 또 편향치(bias) 값을 더해주고 이 값이 일정한 임계치가 넘어가면 출력값으로 1을 표시해주고 그렇지 않으면 0을 출력해줍니다. (b는 θ를 -b로 치환한 값입니다.)

그림2 퍼셉트론 이론

곱해주는 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용합니다. 즉, 가중치가 크다면 해당 신호(입력)이 중요한 특징을 가지고 있다고 해석 할 수 있습니다. 학습이라는 것은 입력값(x)이 주어졌을 경우에 얼마의 w(가중치)와 b(bias)를 정해주는 것이 실제 결과를 잘반영하는 것인가를 알아내는 과정이라고 할 수 있습니다.

말은 간단하지만 실제로는 굉장히 어려운 과정입니다. 이 부분을 좀 더 간단한 설명해보면 입력값이 들어왔을 경우에 임의의 가중치(이후 w)와 편향정보(이후 b)를 주면 이에 대한 결과로 하나의 출력값을 얻게 됩니다. 이때 얻은 출력값을 실제 값과 비교해보면 어떤 차이가 나오고 이 차이를 점점 줄여가도록 w, b 정보를 수정해서 나중에 가장 좋은 결과 값을 얻게 되면 학습이 종료되게됩니다. 이러한 잘못된 학습을 거치면 과대적합(Overfitting)이나 과소적합(Underfitting)이 발생하기도 합니다.

다시 퍼셉트론으로 돌아와서 좀 더 알아보겠습니다. 이러한 퍼셉트론 이론은 인간의 신경망의 기본 구조인 뉴런을 모사한 구조로 당시에 많은 관심을 받게됩니다.

https://inteligenciafutura.mx/english-version-blog/blog-06-english-version

그러나 당시에는 이러한 퍼셉트론 이론의 한계를 극복하지 못해 연구가 한동안 중지되었으나 현재는 당시에 지적된 문제즘들을 극복하고 현재 인공지능의 주류로 자리잡게 되었습니다.

이러한 퍼셉트론 이론을 통해서 간단한 AND, NAND, OR, XOR 게이트 문제를 생각해보겠습니다.

X1X2ANDNANDORXOR
000100
100111
010111
111010
표1 논리 게이트 진리표

위의 표1에서와 같이 두개의 입력 X1, X2에 대해서 AND 게이트는 모든 입력이 1일 경우에만 1을 출력하고 그 나머지의 경우는 모두 0을 출력합니다. NAND(Not AND)의 경우에는 AND 게이트의 반대입니다. OR 게이트의 경우에는 두 입력 중에서 1일 하나만 들어오더라도 출력값을 1을 표시합니다. 모두 0일 경우에만 0이 되는 특징이 있습니다.

표1의 논리 게이트 진리표를 아래의 그림과 같이 간단히 표현할 수 있습니다.

그림3 AND, NAND Gate
그림4 OR, XOR Gate

그림에서 보면 AND, NAND, OR 게이트의 경우는 선형으로 데이터 분류가 잘되는 것을 볼 수 있습니다. 그러나 XOR 게이트의 경우에는 선형으로 두개의 데이터를 분류한다는 것은 불가능합니다. 이러한 데이터를 분류하려면 비선형으로 이뤄져야 하는데 단일 퍼셉트론 구성으로는 이러한 구성이 불가능했던 것이죠. 물론 다층퍼셉트론(Multi-Layer Perceptron)을 통해서 XOR의 문제를 풀 수 있습니다. 다층퍼셉트론은 퍼셉트론을 하나만 사용하는 것이 아니라 2개 이상을 연결해서 결과를 얻어내는 기술입니다. 현대의 딥러닝에서는 수많은 퍼셉트론과 이 퍼셉트론의 연결층을 사용합니다. 아래의 그림에서처럼 딥러닝은 크게 입력층, 은닉층(Hidden Layer), 출력층으로 구성됩니다. 이때 은닉층을 얼마나 깊고 넓게 만드는가에 따라서 학습의 효과가 높아집니다.

그림5 인공신경망 구조

활성화 함수(Activation Function)

활성화 함수는 입력신호의 총합을 출력 신호로 변환해주는 함수를 일반적으로 일컫는 통칭입니다. 이 활성화 함수에는 여러가지가 있고 그중에서 가장 대표적인 것이 시그모이드 함수(Sigmoid Function)입니다.

그림6 활성화 함수
exp(-x) = e^{-x}

e는 자연상수로 2.7182…의 값을 가지는 실수로 분모가 커지면 0에 가까워지고 작아질 수록 1에 가까운 형태로 됩니다. 반면 그림6의 계단함수(Step Function)의 경우 임계치를 기준으로 0,1로 변화하고 중간 값을 가지지 않습니다.

그렇기 때문에 계단 함수의 경우는 정보의 손실이 크다고 할 수 있습니다. 시그모이드 함수의 장점은 바로 이러한 부드러운 곡선의 형태를 가지기 때문에 연속적인 실수의 형태값을 가지게 됩니다. 두 함수의 공통점이 있다면 결과값을 0,1로 출력한다는 것과 모두 비선형 함수라는 것입니다.

아래의 코드는 python으로 만들어진 sigmoid 함수 코드입니다.

import numpy as np
import matplotlib.pylab as plt

def sigmoid_func(x):
    return 1/(1+np.exp(-x))

x = np.arange(-10.0, 10.0, 0.1)
y = sigmoid_func(x)

plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()

현재는 딥러닝에서는 Sigmoid 함수보다는 ReLU함수를 많이 사용합니다. Sigmoid함수는 모든 값을 0,1 사이의 형태로 돌려주기 때문에 모델이 깊어지면 점점 가중치가 약해져서 나중에는 극히 미약한 영향을 주는 정도로 변형되는 단점이 있습니다. ReLU는 이러한 단점을 해결해 줍니다. 이 함수는 입력이 0을 넘으면 그 값을 그대로 출력하고 0 이하이면 그대로 0을 출력해주는 함수입니다.

지도학습(Supervised Learning)

정의

지도학습은 가장 널리 사용되는 머신러닝 방법 중에 하나입니다. 지도학습의 특징은 입력(Input)과 출력 데이터(Label)가 존재한다는 것이죠. 기존에 존재하는 Input/Label 데이터 들을 통해서 어떤 알고리즘을 만들고 새로운 데이터가 들어왔을 때에 만들어진 알고리즘에 기반하여 출력값을 내는 것을 의미합니다.

말이 좀 복잡하지만 쉽게 말해서 지도학습이란 그 말 자체에서 처럼 “학습자(여기서는 컴퓨터와 같은 Machine)에게 데이터의 특징과 이에 대한 정확한 답변을 주고 그 특징을 학습시킨 후에 새로운 데이터를 주었을때 학습의 결과로 어떤 결과값을 예측하는 것”이라고 할 수 있겠습니다.

반대의 경우를 비지도학습(Unsupervised Learning)이라고 하는데 이런 경우는 학습자에게 데이터 외에는 아무것도 알려주지 않고 스스로 학습하는 과정을 통해 새로운 데이터가 주어졌을때 결과값을 예측하는 것입니다.

지도학습의 종류

지도학습의 종류는 크게 분류(Classification) 문제와 회귀(Regression) 문제가 있습니다. 간단히 말하면 분류는 입력 데이터가 있을 경우 미리 정의된, 가능성 있는 여러 클래스 레이블 중에 어디에 들어가는가를 예측하는 하는 것입니다. 둘 중에서 어느 그룹에 속하는 것인가를 다르는 것을 이진 분류(Binary Classification)이라고 하고 둘 이상의 그룹 중에서 어디에 들어가는 것인가를 예측하는 것이 다중 분류(Multiclass Classification)이라고 합니다.

실제로 이 분류의 문제는 상당히 많은 곳에서 사용되고 있습니다.

이진분류는 “예/아니오”의 문제를 푸는 것이라고 할 수 있겠습니다. 이 분류는 많은 부분에서 사용되고 있습니다. 이메일에서 스팸을 분류 한다거나, 신용카드 회사에서 이것이 정상적인 거래인가 비정상적인 거래인가를 예측하는 것도 이런 이진 분류의 문제입니다.

반면에 다중 분류의 경우로 가장 많이 알려진 예제는 바로 붗꽃 데이터 예제입니다. 앞으로 다뤄볼 예제이기도 합니다. 해당 데이터는 꽃 받침과 꽃 잎의 길이와 넓이 정보로 해당 붗꽃이 setosa / versicolor / virginica 세개의 품종 중에 어디에 속하는가를 예측하는 분류입니다.
이 외에도 와인의 산도나 당도를 통해서 와인의 종류를 예측하는 문제도 있습니다. 이 외에도 분류의 문제는 다양한 곳에 적용됩니다. 이미지를 통해서 개와 고양이를 분류한다던가 고객이 물건을 구입하거나 하지 않거나를 예측하기도 합니다.

반면 회귀는 연속적인 숫자를 예측하는 것입니다. 몇가지 특징을 통해서 어떤 값을 예측하는 경우를 예측해보면 우리 일상에도 다양한 분야에 적용할 수 있습니다.

예를 들어서 방의 갯수, 면적 등을 통해서 집값을 예측한다거나 교육의 수준, 나이, 주거지 등을 통해서 연간 소득을 예측한다거나 하는 것도 회귀 분석의 예입니다. 이 밖에도 농장에서 전년도 수확량, 날씨, 고용 인원을 통해서 수확량을 예측해보는 것도 회귀 분석의 예입니다.

이 두분석의 가장 큰 차이는 예측값이 정성적 자료 형태 즉, 범주와 순서의 형태인가 아니면 정량적 자료 형태 즉, 어떤 연속적인 수치형태를 가지는가를 생각해보면 쉽게 구분할 수 있습니다.

실제로 어떤 문제를 해결할 때에 “이것을 분류의 문제인가 혹은 회귀의 문제인가”에 대한 정의를 하지 못해서 잘못된 알고리즘을 적용하는 경우가 종종 있습니다.

만약 내가 연소득, 수확량 등의 값을 예측한다면 회귀의 문제입니다. 반면 어떤 직군, 어떤 종류에 속하는가를 예측하는 것은 분류의 문제입니다.

일반화, 과대적합, 과소적합

지도학습이 잘 이뤄진 경우는 훈련 데이터를 통해서 그 데이터셋의 특징을 정확히 파악해서 모델을 만들고 새로운 데이터가 들어왔을 때에 모델을 통해서 정확도가 높은 예측값을 출력해 낼 수 있습니다. 이런 것을 일반화(Generalization)이라고 합니다.

그러나 훈련용 데이터 셋이 너무 복잡하거나 너무 빈약한 경우에 모델이 일반화 되지 않고 단지 훈련용 데이터만 잘 반영하는 일이 발생하기도 합니다. 이런 경우에는 훈련용 데이터로는 정확한 예측을 해내지만 새로운 데이터가 들어왔을 경우에는 정확도가 낮은 값을 예측하게 됩니다. 이런 경우를 모델이 과대적합(Overfitting)되어 있다라고 이야기합니다.

반대로 모델이 너무 간단하면 이러한 모델을 통해서는 지나치게 대략적인 정보만 얻을 수 밖에 없기 때문에 이를 통한 예측 역시 어떤 의미를 찾기 어려울 수도 있습니다. 이런 경우는 과소적합(Underfitting)되어 있다라고 합니다.

다시 말하면 모델을 훈련을 많이 할 수록 예측도는 높아집니다. 그러면서 일반화는 높아지게 됩니다. 그러나 너무 훈련을 많이하게되면 모델이 데이터셋에 지나치게 민감해저 과대적합이 일어나게 됩니다. 그렇다고 모델을 훈련을 적게 한다면 과소적합이 일어납니다. 머신러닝을 통해서 훈련하게 되면 이런 일반화 곡선이 최대가 되는 점을 찾아야 합니다.

인공지능의 역사

인공지능은 최근에 시작된것 같지만 실제로는 지금으로부터 1950년 초반부터 시작된 학문입니다. 이번 글에서는 인공지능의 역사를 몇가지 중요한 사건들을 중심으로 설명해드리고자 합니다.

https://medium.com/@armand_ruiz/deep-learning-with-data-science-experience-8478cc0f81ac

1943년
이 해는 워랜 맥클록, 월터 피츠에 의해 인공신경망에 관한 최초의 연구가 이뤄진 해입니다.
이 두학자는 인간의 뇌가 뉴런의 복잡한 연결로 이뤄진 것을 착안해서 인공적으로 지능을 만들 수 있을 것이라는 것을 이론적으로 증명했습니다

위키백과 : 앨련 튜링

1950년
앨런 튜링이라는 인공지능의 역사에 중요한 인물이 있습니다.
앨런 튜링은 “계산기계와 지성”이라는 논문을 통해서 “인공지능의 개념적인 토대를 놓았다”라고 할 수 있습니다. 인공지능이라는 말을 어떻게 정의할 수 있을까요?
정의하기가 굉장히 까다롭습니다.

인공지능 = 인공+지능
인공지능은 인공+지능이라는 일상에서 많이 사용하는 어렵지 않은 단어의 연결이죠. 그러나 이 단어가 조합하게 되면 정의를 내리기가 복잡해집니다. 특히 지능이라는 단어가 더 그렇다고 할 수 있습니다.

그렇기 때문에 학자마다 각기 다른 주장을 하게되고 또 의견도 분분하게 됩니다.

예를 들어서 지식은 신에게로부터 부여 받은 것이다 라고 생각하면… 인공지능에 대한 접근은 사람이 기계에게 지능을 부여해주는 방향으로 연구가 진행됩니다.

반면에 지식은 스스로 습득해가는 것이다라고 생각하면… 기계에게 많은 데이터를 주고 이를 통해서 스스로 학습하게 하는 방향으로 연구하게됩니다.

앨런 튜링은…  지능에 대한 철학적이고 설명하기 어려운 개념들에 대한 논쟁을 벗어나서
“자신이 기계와 이야기하는지 혹은 사람과 하는지 분간할 수 없다면 그것은 기계가 지능을 가지고 있다”라고 보아야 한다는 논리를 주장을 하게 됩니다. 이것을 튜링-테스트라고 합니다.

예를 들어서 채팅창을 통해서 대화를 하는데… 나와 대화하는 것이 사람인지 아니면 기계인지 알 수 없다면 그 기계는 지능을 가지고 있다. 라고 하자는 내용입니다.

https://medium.com/rla-academy/dartmouth-workshop-the-birthplace-of-ai-34c533afe992

1956년
그로부터 몇년 후에 아주 중요한 컨퍼런스가 열립니다.
당시에 수학자이자 컴퓨터 과학자인 존 매카시는 인공지능이라는 말을 처음 사용하게되고 이 회의에서 튜링의 “생각하는 기계”를 구체화하고 논리적인 형식을 갖춘 시스템으로 이행시키는 방안을 연구하기 시작합니다. 
이 회의에 참석한 사람들은 당대의 석학들로 이때만해도 많은 과학자들은 인공지능의 미래에 대해서 낙관하고 앞으로 몇십년만 지나면 “기계가 사람이 할 수 있는 일을 하며 심지어 자신의 존재에 대해서도 자각할 것”이라는 엄청난 주장을 했습니다. 

당시에는 인공지능에 대한 관심이 대단히 높았고 또 당대의 최고 석학들이 이런 말을 했으니까 세상에 많은 사람들이 주목을 하게되었습니다.

1958년
프랭크 로젠블렛이라는 학자가 등장하면서 퍼셉트론 이론이라는 아주 중요한… 현재 딥러닝의 기본 모델을 만들었습니다. 이것을 연결주의라고 합니다.
여기서 중요한 개념이 나오는데…
인공지능은 지식을 어떻게 정의하는가에 따라서 기호주의와 연결주의로 나눌 수 있습니다.

데카르트와 같은 이성주의 철학자는 “신으로부터 부여 받은 이성을 통해서 사유한다”라고 주장했죠. 이런 철학적인 영향을 받은 컴퓨터 과학자들은 신에게 인간이 지능을 부여 받았듯… 사람이 기계에게 지식을 부여함으로 완성된다. 라고 주장했습니다.

이에 영향을 받은 연구자들은 기계에게 인간이 이해할 수 있는 어떤 기호 체계를 기계에게 지식형태로 주입하고 했습니다. 예를 들어서 연역적 추론이나 의사결정트리 같은 알고리즘입니다. 이것을 기호주의라고 하고 마빈 민스키와 같은 연구자들이 대표적인 학자들입니다. 

반면에 연결주의는 베이컨과 같은 경험주의 철학에 영향을 받았습니다.
경험주의는 “경험을 통해서 지식을 얻을 수 있다”라고 주장했기 때문에 이런 학문에 영향을 받은 인공지능 학자들은 기계가 스스로 생각하고 학습할 수 있도록 만들자고 주장했고 이런 것을 구현하기 위해서 인간의 뇌에서 영감을 받아서 만든 개념이 바로 퍼셉트론의 개념입니다.

퍼셉트론 이론과 같이 우리의 뇌가 수많은 뉴런으로 연결되어 있다는 것에 착안해서 입력에 가중치를 곱해서 나오는 출력이 일정 신호 이상이면 1, 그렇지 않으면 0을 표현하는 이론입니다.
이후 딥러닝으로 발전하게 됩니다.

1969년 
마빈 민스키와 페퍼트가  『퍼셉트론즈』라는 책 출판합니다.
그 책에 보면 퍼셉트론 이론의 결정적 문제점이 있다라고 지적합니다.
M. Minsky – “퍼셉트론은 선형분리만 가능하다. 그러니까 복잡한 문제들은 해결 할 수 없다. 이걸 해결하려면 퍼셉트론을 다층으로 만들어야 XOR 같은 문제를 해결 할 수 있는데… 나도 못하고 지구상의 누구도 다층 퍼셉트론을 학습할 수 없을 것이다” 라고 주장했습니다.

그 이유는 딥러닝을 하다보면 엄청나게 많은 hidden layer 층을 쌓는데… 히든 레이어 안에서 입출력 데이터는 오차를 측정할 기준이 없기 때문에 가중치를 조정할 방법도 역시 없다라고 주장했습니다.
마빈 민스키 교수라는 당대 최고의 석학이 했던 이 말은 모든 연구자들에게 큰 영향을 주게되어서 인공신경망 이론은 거의 끝이라고 할 수 있을 깊은 암흑기에 들어가게됩니다.

1970년대
반면 기호주의적인 이론은 인공지능의 대세로 등장하면서 초기에는 많은 발전을 이루었지만 이후에 한계에 봉착합니다.
그 이유는 당시에 구현한 시스템이 해당 분야에서만 문제를 풀 수 있고 다른 분야에서는 전혀 쓸모가 없다는 것을 알게된 것이죠.

예를 들어 체스를 두는 인공지능을 만들었다면… 해당 인공지능은 그 일 외에 아무것도 할 수 없다는 것입니다.
“몇년 안에 기계가 사람의 하는 모든 일을 대체할 것이다”라고 주장했던 말을 기억했던 사람들은 인공지능에 대해서 큰 실망을 하게되고 이로인해 인공지능은 첫번째 암흑기에 들어가게 됩니다.

1980년대
이후에 인공지능은 범용적인 분야 즉, 사람과 같은 지식을 구현하기 보다는 세부적인 일들, 어떤 특정한 문제들을 해결하기 위한 시스템으로 발전해가고 이것을 전문가 시스템이라고 합니다.

즉, 전문가들의 지식과 경험을 데이터베이스화 하여 이를 통해서 문제를 해결하는 방법입니다.
이 가운데서 가장 잘알려진 시스템이 미국 스탠포드대에서 개발한 “마이신(MYCIN)”입니다.
마이신은 500가지의 룰이 준비되어 있으면서 질문에 차례로 답변하면 항생제를 처방하도록 디자인된 시스템으로 69%의 확률로 적절한 처방을 할 수 있었다고 합니다.

이것도 처음에 좋은 반응을 얻었지만…  의학 분야에 해결해야 할 문제가 점점 복잡해지고 문제의 영역이 확대되면서 이러한 시스템의 가장 중요한 부분인 “지식데이터 구축”이 어렵다는 현실적인 한계에 부딪히게 됩니다.
예를 들어서 마이신이 심장병이나, 암, 폐렴 이런 분야에는 답변을 할 수 없었다는 것이죠. 만약 그렇게 하려면 모든 분야에 룰을 만들어야 하는데… 그것이 가능한가? 그렇지 않다는 것입니다.

결국 규칙기반의 인공지능을 구글 브레인의 수장으로 있는 <제프 딘>은 “그동안 인공지능 분야에 더딘 진보를 이루며 깨달은 것은 – 인간이 컴퓨터에 직접 코딩을 하며 세계의 모든 규칙을 정의해서 컴퓨터에게 가르칠 수 없다-는 것이다.” 라고 말하며 결론적으로 그의 말은 컴퓨터가 스스로 학습하면서 배우지 않으면 안된다라는 결론에 이르렀다는 것이죠.

2006년
오랬동안 깊은 암흑의 길을 걷던 연결주의 인공지능은 당시에 마빈 민스키 교수가 했던 여러가지 문제들을 “다층퍼셉트론의 도입, 오류 역전파, 효과적인 활성함수 개발 등”으로 기존의 여러가지 불가능해보이던 문제를 극복하고 재기에 성공합니다.
이에 주도적인 역할을 한 것이 제프리 힌튼 교수입니다. 
힌튼 교수는 당시에 많은 사람이 외면했던 다층 퍼셉트론 이론을 꾸준히 연구해서 “A fast learning algorithm for deep belief nets”이라는 인공신경망의 기념비적인 논문을 발표합니다.
이 논문 이후에 학자들은 다시 인공신경망 이론에 관심을 가지기 시작합니다. 
그의 논문에 보면 Deep brief Nets이라는 용어가 등장하는데 이것이 바로 딥러닝의 시작이라고 할 수 있습니다.

위키백과, 제프리 힌튼

2012년
또 오늘날 많은 사람들에게 인공지능의 성능을 각인시켜준 엄청난 사건이 있었습니다.
그것은 인공지능을 활용한 이미지 분류 챌린지입니다.
수년전 부터 이미지 인식 오류률 26%대에서 0.1%를 줄이려고 당대의 수재들이 모여서 연구하고 노력해왔지만 그 결과는 그리 좋지 못했습니다. 그러나 CNN이라는 이미지 분류 알고리즘이 등장하면서 에러율을 10%대로 끌어 내린 엄청난 사건이 일어나면서 사람들은 이런 놀라운 결과를 만들어낸 인공신경망 알고리즘에 주목하게 됩니다.

https://devopedia.org/imagenet

2016년
이후 우리나라에서 인공지능의 붐이 불기 시작한 것은 구글 알파고가 이세돌에게 바둑 승리하면서 인공지능에 대한 관심이 더욱 높아지게됐습니다.
바둑은 체스와 달리 경우의 수가 너무나 많기 때문에 인공지능이 인간을 이길 수 없다고 예측했고 아마도 이세돌 9단이 4:1정도로 이길 것이라고 전문가들은 예측했지만 결과는 정반대로 알파고가 4:1로 승리했습니다.

https://www.kdnuggets.com/2016/03/alphago-not-solution-ai.html

이 세기의 이벤트였던 이 대결로 인공지능의 성능에 눈부신 발전에 모두 놀라게 됐습니다.

현재 인공지능은 놀라운 속도로 발전하고 있으며 이를 가능하게 해주는 것은 바로 알고리즘, 하드웨어의 발전, 빅데이터 처리 기술이라고 할 수 있습니다.