2014년 5월 8일 목요일

기계학습(Machine Learning)이란 무엇인가

안녕하세요! 이번에 "T-Robotics"에 처음으로 기고를 하게 된 최성준입니다^^ 제가 전공하고 있는 분야는 데이터로부터 유용한 지식을 추출 해 이를 통해 판단을 이끌어내는 기계학습(Machine Learning)이란 분야인데요, 공학의 전 분야를 통틀어 가장 핫한 분야 중 하나이지요. 구글이 여러분에게 최적화된 검색결과를 내놓는 것도, 온라인 쇼핑몰이 여러분이 끌릴만한 상품을 사이드바에 광고하는 것도, 페이스북이 여러분이 좋아할만한 소식을 뉴스피드에 띄우는 것도 모두 사용자의 데이터를 분석해 판단을 내려주는 기계학습의 혜택 덕분이라고 할 수 있습니다.

영상처리, 스팸차단, 경제분석, 판매, 병 진단, 데이터 분석, 로봇, 게임 등 machine learning은 데이터를 처리해야하는 거의 모든 분야에서 유용하게 쓰이고 있다. 과장해서 말하자면 "big data의 시대"란 말은 곧 "machine learning의 시대"란 말과 동의어라고도 할 수 있을 것이다. (출처 : KAIST SLSP 연구실)

사실 T-Robotics에서도 이미 패턴인식에 대해 다루면서 기계학습에 대한 개념을 조금 다루었었는데요, 앞으로는 기계학습에 쓰이는 여러 알고리즘들에 관해서 하나하나씩 다루어보도록 하겠습니다. 오늘은 그 시작으로 기계학습의 정의와 분류, 그리고 간단한 예제를 알아보도록 하죠.

기계학습(Machine Learning)의 정의 

앞에서도 밝혔지만 기계학습은 데이터로부터 우리에게 유용한 지식을 추출 해 새로운 데이터에 대한 판단에 적용하는 것을 의미합니다. "기계"란 말이 들어가긴 하지만 사실 기계와는 큰 상관이 없고 오히려 통계나 확률의 공대스러운 해석이라고 할 수 있겠죠. (통계학과 기계학습의 접근 방식 차이는 다음을 참고해주세요.) 기계학습에 대한 보다 엄밀한 정의는 다음과 같습니다
"만약 작업 T에 대해 기준 P로 측정한 성능이 경험 E로 인해 향상되었다면, 그 프로그램은 작업 T에 대해 기준 P의 관점에서 경험 E로부터 "배웠다"라고 말할 수 있다." - 톰 미첼,  Machine Learning, (1998)
"A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E" - Tom M. Mitchell, Machine Learning, (1998)
간단히 말하자면 "경험(데이터)"을 가공하여 목표 작업의 성능을 향상시키는 것이지요. 기계학습은 통계학을 기반으로 접근하는 Frequentist와 확률을 기반으로 접근하는 Bayesian의 두 가지 시각이 있는데요, 이것에 대해서는 다음에 다루어보도록 하고, 오늘은 기계학습의 큰 그림을 먼저 그려보도록 하죠.

패턴인식 글에서도 소개했지만, 기계학습은 주어진 데이터를 훈련시켜(training), 훈련된 지식을 기반으로 새로운 입력(test input)에 대해 적절한 답(test output)을 찾고자하는 일련의 과정입니다. 이 때 훈련시키는 데이터가 질문(training input)과 정답(training output)이 모두 주어진 경우가 있고, 질문만 주어진 경우도 있는데요, 전자의 경우를 라벨링(labeling)이 되어있다고 말합니다. 기계학습의 문제는 이 라벨링의 유무에 따라 다음의 네가지로 분류할 수 있죠.

너무나 유명한 Stanford대학 Andrew Ng 교수의 기계학습 강좌. Ng교수는 coursera라는 온라인 공개강좌(Massive Open Online Course, MOOC) 기업을 세워 이 분야에서도 선두를 달리고 있다. 최근에는 결혼 발표까지 IEEE 기사에 났다는...ㅎㅎ

Supervised Learning
: 훈련 데이터에 라벨링이 되어있는 경우. 즉, 각 질문(input)에 대해 무엇이 정답(output)인지 훈련데이터가 알고있는 경우입니다. 예를 들면 (2,4)->(8), (4,3)->(12), 이런 식으로 훈련데이터가 주어져 있다는 것이죠.
e.g.) regression - (x,y)들의 데이터를 가지고 모함수 y=f(x)의 관계를 예측하는 방법
classification - 각 그룹별 특징을 학습하여 새로운 데이터가 어느 그룹에 속해야 하는지 판단하는 방법

Unsupervised Learning
: 데이터만 잔뜩 주어진다. 즉 문제는 있는데 답은 없다. 우리가 할 수 있는건, 문제 유형 정도 구분할 수 있겠다. 이를 clustering이라고 한다. 
e.g.) clustering - 어떠한 데이터끼리 군집으로 묶을 수 있는지 판단하는 방법.
dimension reduction - 독립적인 특징(축)들을 추출해 이를 중심으로 데이터를 압축하는 저차원으로 압축하는 방법

Reinforcement Learning
: 미리 정답이 주어져있진 않고, 시행마다 잘한 정도를 보상(reward)하여 줍니다. (이는 동물들이 학습하는 방법과 유사하죠.)
e.g.) 엘레베이터 스케쥴링, 컴퓨터 체스, 복잡한 로봇의 제어 등등

그 외?
일부만 라벨링이 되어있는 경우도 있고, 정보가 점진적으로(incremental) 주어지는 경우도 있고, 데이터가 너무 많은 경우 적은 경우 등등등 다양한 기계학습 문제가 존재합니다.

그렇다면 다음의 은행원의 업무 예제를 통해서 기계학습 문제가 수식적으로 어떻게 정의되는지 알아보도록 하겠습니다.


Classification 예제 - 은행원의 업무

대출조건을 살펴봤는데, 과연 돈을 빌려줘야할까? 말아야할까?

우리가 은행에서 대출을 담당하고 있다고 가정해보죠. 우리는 그 사람의 다양한 정보, 예를들면 나이, 수입, 직장, 자산, 채무 등을 알 수 있습니다(test input).  그리고 또한 이전에 다른 사람들에겐 어떤 조건(training input)에서 어떤 판단(training output)을 내렸는지에 대한 데이터를 가지고 있죠.

이 문제는 대출자들의 조건은 물론 그들에게 대출을 해줬는지 안해줬는지의 결과까지 모두 알고 있으므로 라벨링이 완벽한 supervised learning 문제라고 할 수 있습니다. 더 나아가서는 대출Yes 그룹과 대출No 그룹을 나누는 classification 문제라고 할 수 있죠. 이것을 수학적으로 정의해 볼까요?

input x는 고객의 대출 조건입니다. 그리고 output y는 빌려줬는지(+1) 혹은 않았는지(-1)이죠. 그리고 N명에 대한 (x,y)의 쌍을 합쳐서 training data라고 합니다.


우리의 목적은 DN을 통해서 f:X→Y를 만족하는 함수 f를 찾는 것이지요. 이렇게 한번 생각을 해보시죠. 세상의 온갖 함수가 모두 담긴 항아리가 있습니다. 이것들을 하나하나씩 뽑아서 DN을 검증하여 그 중 가장 잘 맞는(fit) 함수를 우리가 원하는 함수 f로 쓰겠다는 것이죠. (통안에 함수가 없으면...? 그럼 망...ㅎㅎ)

이렇게 여러가지 함수가 담겨있는 항아리를  가설(hypothesis)이라고 합니다. 예를 들어 '우리가 원하는 답은 y=ax+b의 꼴을 가지고 있어!'라고 하는 것이 바로 가설의 한 예이지요. 자, 그럼 이 문제를 간략화해서 주어진 조건은 대출자의 나이(x1)와 월급(x2), 그리고 대출 여부는 O/X로 표시했다고 해보죠.


O/X의 분포를 보면 대충 월급이 높은 사람에게 대출을 잘해주는 경향이 보이네요. 이것을 구분지으려면 적당한 구분선(decisioin boundary)이 필요할 것 같습니다. 가장 간단한 형태인 1차 선형함수 g를 한번 생각해본다면, 이에 대한 가정은 다음과 같이 나타낼 수 있을 것 입니다. (sign(z)는 z>=0 이면 +1을, z<0 이면 -1을 반환)


우리가 예전에 주어진 데이터를 가장 잘 표현하는(fitting) 선형함수를 찾는 방법인 Least Square Method를 공부한 적이 있었는데요, 이것도 그것과 유사한 방법을 사용한다고 생각하시면 될 것입니다 ^^

ㅎㅎ 너무 길게 달려왔네요. 이 이후의 이야기는 다음 글에서 전해드리도록 하죠. 마지막으로 reinforcement learning의 예제인 팬케이크 뒤집기를 보면서 마치도록 하죠. 이 동영상에선 처음엔 로봇이 팬케이크 뒤집기에 실패하지만 "잘했어" "잘못했어" 등의 reward를 줌으로써 점점 로봇이 팬케이크 뒤집기에 성공하는 모습을 보실 수 있습니다. 그럼 다음 시간에 이어서 이야기하도록 하죠 ^^

reinforcement learning은 각 시행에 대해 잘하고 못한 정도를 reward로써 줌으로써 잘한 행동을 강화(reinforcement), 결국 성공에 이르게끔 만드는 machine learning 방법이다.

이 글은 최성준님의 블로그 "Laziness teaches Machine Learning"에 게재된 글을 재편집하여 발행한 글입니다. 감사합니다. (편집자 Terry) 
[원문] http://enginius.tistory.com/474

* T-Robotics의 글은 facebook과 rss reader로도 받아보실 수 있습니다.