* 'Deep Learning with Python' 도서를 참고하여 작성한 내용입니다.
인공지능(AI) 이라는 말은 이제 너무 흔한 단어가 돼버렸다^.^;
IT 업계 종사자가 아니더라도
인공지능, 머신러닝, 딥러닝이라는 단어를 들어보지 못한 사람은 아마 없을 것이다.
최근 몇 년간 인공지능 분야가 무서운 속도로 발전하면서
오래 전에는 영화에서나 가능한 줄 알았던 것들이 현실로 다가오고 있고,
심지어는 이미 어느 정도 보급화되고있다.
대표적으로 지능형 챗봇, 자율주행 자동차, 가상 비서 같은 것들 말이다.
(테슬라사고싶다)
이제는 어느 정도 상식의 영역으로 들어온 만큼
인공지능의 기본적은 개념은 알아두는 게 좋을 것 같다 :)
1. 인공지능, 머신러닝, 딥러닝: 뭐가 다른거죠?
AI 에 대해 알고 싶다면 반드시 짚고 넘어가야 할 내용!
인공지능, 머신러닝, 그리고 딥러닝 이 세 가지 용어의 정의를 구분할 줄 알아야 한다.
- 인공지능: 사람이 수행하는 일(intellectual task)을 기계가 수행(자동화)할 수 있도록 하는 것
간단히 말해서 사람의 일을 기계가 대신하도록 하는 것과 관련된 모든 연구분야라고 볼 수 있다.
세 가지 개념 중 가장 포괄적인 개념이다.
- 머신러닝: 기계가 스스로 학습하여 사람의 일을 자동화하는 것
이 개념을 이해하기 위해서는 머신러닝 이전의 프로그래밍(classical programming)이 어떠했는지 알아야 한다.
classical programming
체스 게임을 플레이하는 기계를 만들기 위해서는 두 가지가 필요하다.
1) 데이터 (ex. 말의 위치와 종류)
2) 규칙 (ex. 룩은 가로/세로 방향으로 원하는 만큼 이동 가능하다, 킹을 잡을 수 있는 방법이 최우선이다)
이것들이 주어지면 기계는 특정 상황에서 규칙에 따라 움직이며 체스 게임을 할 수 있게 된다.
이 때, 규칙을 얼마나 상세하게 적용했는지에 따라
자주 이기는 기계를 만들 수도 있고 그렇지 않은 기계를 만들 수도 있다.
여기서 중요한 점은 사람이 일일이 규칙(rules)을 집어넣었다는 점이다.
machine learning
머신러닝은 사람이 규칙을 정해주지 않는다.
머신러닝의 관점에서 체스 게임을 플레이하는 기계를 만들려면 다음 두 가지가 필요하다.
1) 데이터 (ex. 말의 위치와 종류)
2) 결과 (ex. 백이 이김/흑이 이김)
실제 있었던 체스 경기의 모든 말의 움직임을 데이터로 기록해두고
어느 쪽이 이겼는지 그 결과만 넣는다.
기계는 input(데이터)로부터 output(승부 결과)를 낼 수 있는
수천~수만가지(물론 훨씬 더 많겠지)의 연산을 스스로 찾아낸다.
우리가 배웠던 방정식과 유사하다.
2a+5b=14 a+2b=6 |
위 방정식에서 변수 a와 b 값을 찾아내듯
기계는 해당 input 으로부터 output 을 낼 수 있는 변수값들을 찾아내는 것이다.
(물논 이 정도 방정식의 수준과는 차원이 다른 연산식일 확률이 높음)
결과적으로, 머신러닝에서는 기계가 스스로 규칙을 찾아내는 셈이 된다.
이와 같은 특징 때문에 classical programming 처럼 '명시적으로 프로그래밍 된다'고 하지 않고
'학습된다(trained)' 고 표현한다.
classical programming 이나 machine learning 모두
인간의 일을 기계가 수행할 수 있게 자동화했다는 점에서 인공지능에 속한다고 볼 수 있다.
그러나 머신러닝은 인공지능 내에 속한 하나의 분야라고 할 수 있겠다.
머신러닝의 개념 자체는 탄생된 지 오래되었지만
아무래도 많은 데이터가 필요하다보니
(연산 속도가 빠른 하드웨어 + 대용량 데이터를 저장할 수 있는 storage)
이 두 가지 분야의 발전에 힘입어 최근에 빠르게 성장해나가고 있다.
- 딥러닝: 인공신경망(neural networks)과 같이 여러 계층(layers) 구조로 학습하는 머신러닝의 한 분야(subfield)
아무래도 좁은 범위의 개념으로 넘어올 수록 정의가 점점 어려워진다. (뭔소린가 싶쥬?^.^)
머신러닝은 주어진 input 과 output 에 대해 스스로 규칙을 찾아낸다고 설명했다.
그리고 그 규칙을 찾는 과정(연산 과정)을 방정식의 해를 구하는 것에 비유하여 설명했다.
딥러닝은 이 연산 과정에 관련된 subfield 라고 보면 된다.
그림 아래쪽과 같이 딥러닝에서는 연산이 계층(layers)구조로 연이어 진행된다.
한 번이 아닌 여러 차례의 연산을 거치기 때문에 구조가 보다 "deep" 하기에 딥러닝이라 부른다.
이렇게 계층적인 구조로 학습을 진행할 경우 더욱 정교한 연산이 이루어질 수 있고
input 데이터로부터 output 데이터를 더 잘 설명하는 모델(model)을 만들어낼 수 있다.
이러한 연달아 있는 계층 구조(successive layers) 의 가장 대표적인 예가 인공신경망(neural networks) 인데
인간 뇌의 뉴런을 본따서 만든 구조이다.
뉴런은 보통 단독으로 작용하지 않고 여러 뉴런이 작용하여 자극을 전달한다.
신경전달물질을 데이터로 입력받아 시냅스를 통해 다음 뉴런(layer)으로 전달하면서
때로는 자극을 증폭시키기도, 때로는 감축시키기도 하며 필요한 자극을 전달한다.
딥러닝도 이와 비슷한 맥락으로 이해하면 쉬울 것이다.
결국, 스스로 학습하는 머신러닝의 최종 목적지는
인간의 뇌를 대체할 수 있을 만큼의 뛰어난 성능을 내는 것일테니
딥러닝이 왜 그렇게 주목받는지 알 것 같은 대목이기도 하다.
2. 기계의 예측 프로세스: 생각하는 기계?
input, output 데이터를 가지고 머신러닝/딥러닝을 통해 기계를 학습시키면
기계는 해당 데이터를 가장 근접하게 설명할 수 있는 연산식을 찾아내게 될 것이다.
이를 고체화시키듯 저장해두면 그게 모델(model)이 되고,
이후에 이 모델에 새로운 데이터를 넣으면 해당 연산식에 따라 새로운 결과를 내뱉게 된다.
이 과정이 '예측' 이다.
AI 분야에서 매우 유명한 손글씨 데이터를 예로 들어보면
1) 데이터 준비
: 여러 사람들의 손글씨 사진 데이터(data), 각각이 어떤 글씨인지(result)
2) 기계 학습(train)
3) 모델 생성
4) 생성된 모델에 새로운 손글씨 사진 입력
5) 입력한 손글씨 사진에 대한 결과 출력(예측)
전체 과정은 이와 같다고 볼 수 있다.
음성인식, 안면인식 모두 같은 방법으로 가능하다.
그러므로 좋은 품질의 인식 시스템을 만들기 위해서는
어떤 데이터를 활용하는지, 그리고 그 데이터로 어떤 모델을 만들어내는지가 중요할 것이다. :D