사실 인공지능이란 말은 1956, 미국의 한 교수에 의해 처음 사용되었고, 인공지능 분야는 과거에서부터 현재까지 꾸준하게 연구되고 있는 분야다최근 인공지능(Artificial Intelligence, AI), 머신러닝(Machine Learning, ML), 딥러닝(Deep Learning, DL)이란 말들이 꽤 많이 보인다. 하지만 이 셋은 종종 헷갈리고 필자도 처음엔 이 용어들의 차이를 잘 모르는 채로 사용했었다. 여러 블로그를 들어가서 찾아보아도 내가 원하는 내용을 명쾌하게 설명한 내용이 없어서 정리를 하게 되었다. 인공지능, 머신러닝, 딥러닝의 관계와 정의에 대한 내용을 간략하게 설명하고 추후 포스팅 할 내용들은 전부 머신러닝과 딥러닝에 대한 얘기일 것이다.

 

 

우선, 어디서나 그렇듯 밴다이어그램을 통해 보자면 아래와 같다.

아래 그림처럼 인공지능이 가장 큰 범주이고 인공지능안에 머신러닝이 포함되어있고 또 머신러닝은 딥러닝을 포함한다.






[그림1] 세 범주를 나타내는 밴다이어그램




[1] 인공지능(Artificial Intelligence)


위키피디아에 따른 인공지능의 정의는 아래와 같다.

인공지능(人工知能, artificial intelligence, AI) 기계로부터 만들어진 지능을 말한다. 컴퓨터 공학에서 이상적인 지능을 갖춘 존재, 혹은 시스템에 의해 만들어진 지능, 인공적인 지능을 뜻한다.

간단히 말해, 인간의 지능을 기계로 만드는 것을 말한다. 자율주행 자동차나, 이세돌을 꺾은 알파고 등등 모두가 AI인 것이다. 그렇다면 전문가들은 어떠한 방식으로 인공지능 시스템을 구현할까? 어떠한 기술을 통해 인공지능을 만드는 것일까?

인공지능을 구현하는 기술 가운데 바로 기계학습(Machine Learning)이 있고 이것이 우리가 아는 머신러닝이다. 인공지능을 실현시키는 기술은 이 외에도 여러 기술들이 있으며 나무위키를 찾아본 결과 전문가 시스템(Expert System), 퍼지 이론(Fuzzy Theory), 유전 알고리즘(Genetic Algorithms), BDI 아키텍쳐(BDI Architecture) 등이 있다






[2] 기계학습(Machine Learning)


인공지능을 실현시키는 기술 중 하나로 역시 위키피디아를 참고하자면 1959 Arthur Samuel은 기계학습에 대해서 다음과 같이 정의를 했다.

Machine learning is a field of computer science that uses statistical techniques to give computer systems the ability to "learn" (i.e., progressively improve performance on a specific task) with data, without being explicitly programmed.[1]

그대로 해석하자면,머신러닝은 컴퓨터 공학의 한 분야로 통계적 기법을 사용하여 명백하게 프로그램 된 것이 아닌 컴퓨터 시스템에 데이터를 이용하여 학습능력을 주는 것을 말한다.

, 기존의 C/C++, Java 등의 프로그래밍과 같이 프로그래머가 상황이나 조건에 따라 하나 하나씩 행동이나 결과값을 주어야하는 explicit programming(명시적 프로그래밍) 방법이 아닌 데이터를 통해 학습하는 능력을 컴퓨터에게 주는 것을 말한다.

예를 들어, 아래 그림과 같은 계산기는 사용자가 어떤 수와 연산자를 입력하면 딱 맞게 떨어지는 프로그램이므로 이러한 경우에는 explicit programming 방법이 깔끔하고 error도 거의 없을뿐더러 쉽게 만들 수 있을 것이다.




 


 



[그림 2] explicit programmingC를 이용하여 계산기에 프로그램

계산기 프로그램 이미지 출처 : https://www.slideshare.net/QooJuice/vs-60147566


하지만, 개와 고양이어와 같은 이미지를 분류하는시스템이나 필기체를 인식하는 시스템은 기존에 존재하는 explicit programming 방법으로 프로그래밍한다면 프로그래머는 컴퓨터에게 고양이라는 동물을 알려주기 위해 많은 경우의 수를 따져야 할 것 이다. 또한, 이렇게 많은 경우의 수와 규칙을 만족하는 알고리즘을 개발하는 것은 정말 어려운 일이다. 이런 경우에는 기존의 explicit programming 방식을 사용하지 않고 Machine learning을 사용한다면 뛰어난 성능을 보일 수 있고 실제로도 많은 논문들이 나왔다. 개와 고양이의 이미지를 통해 시스템 스스로가 학습하여 분류하는 것이다.

개와 고양이를 보고 어떤 짜여진 로직에 의해 귀가 뾰족하고 눈이 크며 야옹하고 울면 고양이고, 귀가 늘어지고 눈이 상대적으로 작으며 멍멍하고 울면 개다.’라고 explicit programming과 같이 판단하지 않고 마치 사람들이 직관적으로 개다, 고양이다하듯 머신러닝도 후자와 같은 프로세스를 갖는 것을 목표로 한다고 할 수 있다. 


       




[그림 3] ‘가나다필기체를 Explicit Programming과 Machine Learning으로 인식해본다면?


마찬가지로 필기체를 인식할 때도 기존의 방식을 사용하여서는 사람마다 다른 글자체, 다른 위치에 적힌 글자, 어떤 사람은 붙여 쓰고 어떤 사람은 띄워쓰고 등등의 수많은 경우의 수를 기존의 방식을 통해서는 매우 비효율적이며 복잡한 시스템이 요구된다. 하지만 머신러닝 혹은 딥러닝을 통한다면 보다 빠르고 쉽게 인식할 수 있을 것이다.


머신러닝은 다시 크게 3가지. 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning)으로 나누어진다.



 

 1) 지도 학습(Supervised Learning)


지도 학습(Supervised Learning)은 쉽게 말해 기계에게 정답을 가르쳐주는 학습이다. 지도 학습 방법에는 크게 2가지가 있으며 분류(Classification)와 회귀(Regression)가 있다.

[그림 4] 왼쪽은 Supervised learning system으로 Classification structure를 만들어보았다.

system이란 수식으로 쉽게 y=f(x)라고 할 수 있다여기서 x input data를 의미하고 f(x)x에 대한 system 함수(function)이다. , input data system에 입력되어 어떤 출력값인 output, y 도출한다고 할 수 있다.

  

    (1) 분류(Classification) - discrete value(이산값)

 

여기서 우리가 원하는 시스템은 1,2,3 input data 각각 supervised learning system에 넣었을 때, 1,2,3으로 분류하는 것이다.

이렇게 하기 위해 먼저 시스템에게 1 1임을, 2 2임을, 3 3임을 알려준다. 이렇게 1,2,3인 정답을 알려주는 것은 label이라 하고 이러한 data labeled data라 한다

하지만 인공지능 시스템은 우리가 1을 넣었을 때 바로 1이라고 인지하는 것이 아니다. (b)그림과 같이 1을 넣었지만 2라고 인지하였을 때 시스템은 우리가 준 정답(label data)과 비교하여 스스로 오답임을 알고 정답이 2라고 인지한다. 이렇게 학습을 한 후 (c)와 같이 다시 1을 넣었을 땐 1이라고 인지할 수 있다.

이것이 Supervised Learning의 방식이고 기계에게 정답임을 알려주는 방식이다.

이렇게 1,2,3을 각각 넣었을 때 시스템이 1 2 3이라는 것으로 분류하는 것을 분류(Classification)이라 한다분류가 discrete value(이산값)이라 한 것은 output값이 뚝 뚝 떨어지는 형태인 이산형태를 나타내기 때문이다.

 

 

    (2) 회귀(Regression) - continuous value(이산값)

 

회귀는 변수 x y와의 관계에 대한 line()을 의미한다. [그림 4]의 오른쪽 structure를 보자.

우리가 원하는 시스템은  f(1) = 1, f(2) = 2, f(3) = 3를 만족하는 시스템을 설계하는 것이다. 여기서 사람들에게 '6 input data로 넣으면 output 으로 어떤 값이 나올까요?' 라고 한다면 모두 6이라고 할 수 있을 것이다. 하지만 우리는 인공지능 시스템이 그렇지 않고 위와 같이 사전 정답 데이터를 통해 '학습'해야한다는 것을 알고 있다. 다시 structure를 본다면 (d)와 같은 과정을 '학습(Learning) 혹은 훈련(training)'이라 할 수 있고 (e)는 진짜 우리가 알기를 원하는 Test를 말한다. 시험을 잘보기 위해 시험공부하는 것을 학습, 훈련이라 하고 실제 시험을 치는 것을 Test(시험)이라 하듯 인공지능 시스템도 똑같다. (f) Regression system에 대한 function을 그래프로 나타낸 것으로 training을 통해 1,2,3은 정답임을 알 수 있지만 test 6에 대한 값은 다소 정답선과 거리가 있다고 있을 수도 있다. 이를 오차라고 한다.

 




[그림 4] 왼쪽 : Supervised Learning - Classification,   오른쪽 : Supervised Learning - Regression



 2) 비지도 학습(Unsupervised Learning)



[그림 5] 왼쪽 : 지도학습, 오른쪽 : 비지도학습

출처 : http://hunkim.github.io/ml/


비지도학습은 지도 학습과 달리 input data에 label이 되어있지 않다. 즉, 정답이 없는 data를 input으로 사용한다. 이 말은 비지도 학습의 목적은 데이터의 정답-오답이 아니라 입력 데이터들 사이의 어떤 관계, 패턴에 관심이 있다는 것이다. [그림 5]는 지도학습과 비지도학습 시스템의 결과를 나타낸다. 

여기서 먼저 알아야할 것은 지도학습과 비지도학습에 대한 input data는 같지 않다는 것이다. (혹은 같아도 비지도학습에서는 label을 무시함.) 지도학습은 사전 학습시 O데이터는 O라고 명시된 답을 알고있고 X는 X라고 알고있다. 하지만 비지도학습의 경우 O와 X를 구별하지 않는다.

어쨌든 지도학습은 주어진 데이터를 O와 X로 분류하였다면 비지도학습은 데이터를 빨간 원으로 묶었다. 즉, 비지도학습은 주어진 데이터를 비슷한 특성끼리 묶고 데이터 군집간의 특징을 살펴보는데에 목적이 있다고 할 수 있다.

이를 클러스터링(Clustering)이라 하고 이는 비지도학습의 일종이다. 이 외에도 차원축소, Hidden Markov Model등이 있다.



 3) 강화 학습(Reinforcement Learning)


이 부분은 필자가 아직 경험해보지 못한 분야라서 간략하게만 설명하겠다. 강화학습은 알파고에 적용된 기술로 게임 인공지능에 많이 적용된다고 한다. 앞선 알고리즘들은 data가 주어진 정적인 상태(static environment)에서 학습을 진행하였다면(환경이 고정된 상태), 강화학습은 에이전트(agent) 혹은 시스템(system)이 환경(Environment)가 어떻게 동작하는지 모른다. 그래서 행동(action)을 취하고 그에 상응하는 보상(reward)를 얻으며 학습해 나가는 과정이다. 학습의 방향은 에이전트가 보상을 최대화 하도록 학습을 진행하는 방향이다.

간단히, 강아지나 고양이의 배변훈련을 시킬 때, 강아지나 고양이는 처음 배변 장소(environment)를 모른다. 하지만 지속적인 훈련을 통해 올바른 곳에 배변을 했다면 간식으로 보상(reward)를 주듯 강화학습도 이와 같다고 할 수 있다.




[그림 6] 강화학습이 학습하는 방식

출처 : https://brunch.co.kr/@kakao-it/73









[3] 딥러닝(Deep Learning)




[그림 7] 인공지능 계층 tree

출처 : https://www.quora.com/What-is-the-difference-between-deep-learning-and-usual-machine-learning


딥러닝을 설명하기 위해 계층 트리를 가져왔다. 마찬가지로 AI라는 나무에 머신러닝 뿌리가 근거하여 한 가지에 Neural Network - Deep Learning이 있다. 딥러닝은 퍼셉트론(perceptron)에 근거한 인공신경망(Artificial Neural Network,ANN)의 일종이다. 머신러닝의 많은 알고리즘(계층트리에서 나뭇가지) 중에 Perceptron에 근거한 Neural Network이 있고 여기서 망(?)이 깊어지면 그것을 딥러닝이라 한다. 딥러닝과 머신러닝의 가장 큰 차이점이 뭐냐고 묻는다면 'Deep Learning'의 용어처럼 머신러닝에 비해 'input data가 많으며 망(Layer)이 깊다(deep)' 라고 대답할 것이다. 

그렇다면, 퍼셉트론은 뭐고, 인공신경망은 뭐고, 망은 무엇일까? 또, 이렇게 망이 깊어지면 기존 머신러닝의 알고리즘 중 하나인 Artificial Neural Network에 비해 어떤 것이 좋을까?