기계학습(Machine Learning)에 대한 최근의 관심이 뜨겁습니다.  R을 활용해서 기계학습 하는 방법을 블로그에 연재해보려고 합니다. 


저는 예전에 데이터마이닝(Data Mining) 책에서 k-NN (k Nearest Neighbor), Decision Tree, ANN (Artificial Neural Network), Association Rules, k-Means Clustering 등을 배웠었습니다.  그때와 비교하면... 최근에는 데이터마이닝이라는 용어 대신에 기계학습(Machine Learning)이라는 용어를 더 선호하는것 같고(유행?), 앙상블(Ensemble), 특히 Random Forest!!!, SVM(Support Vector Machine)!!, (이세돌과 알파고의 대국 이후) Deep Learning!!!!! 등이 많이 회자되고 있으며, 상용툴 SAS나 SPSS 사용하던걸 오픈소스 R, Python, 더 나아가서는 Big Data 시스템에서 분산병렬처리 적용(Spark MLlib, H2O, Tensor flow 등) 도 활발하게 활용 중이네요.  ANN(Artificial Neural Network)은 블랙박스 모델이어서 설명력이 부족하여 저는 실전에서는 안써봤는데요, 구글이 고양이, 개 이미지를 인식하는데 성공한거라든지(feature selection, feature extraction 없이 지가 알아서 학습을 척척...헐...), 알파고가 이세돌 이겼다든지 해서 최근에 기계학습, 인공지능 한다하는 커뮤니티에서는 Deep learning이 정말 Hot 한거 같아요. 


기계학습으로 할 수 있는 것들이 무척 많습니다. 상품/컨텐츠 추천, 신용카드 사기거래 탐지, 암 유발 DNA 패턴 탐지, 음성/영상/이미지 인식, 스팸 이메일 분류, 주가 예측, 날씨 예측, 구매행동 기반 고객세분화, 제조업 불량 패턴 분류 및 원인 자동 분석, 최근 뉴스에 종종 나오는 자율주행 자동차....등 이미 우리 실생활에 헤아리기 힘들 만큼 깊숙이 스며들어 기계학습이 사용되고 있습니다. 



서두가 길었는데요, 기계학습이 무엇인지부터 얘기를 시작해보겠습니다. 

위키피디아에서 좀 찾아보니 Arthur Samuel과 Tom M. Mitchell 이 정의해놓은 것이 있네요. 


Arthur Samuel 은 기계학습을 정의하기를 "컴퓨터에게 명시적으로 프로그래밍 하는 것 없이 배울 수 있는 능력을 주는 학문 분야"라고 했네요. 

(In 1959, Arthur Samuel defined machine learning as a "Field of study that gives computers the ability to learn without being explicitly programmed".)


Tom M. Mitchell 은 기계학습을 정의하기를 "컴퓨터 프로그램이 어떤 유형의 과업(T, Task)들에 대해 성과평가 지표(P, Performance measure)의 관점에서 경험(E, Experience)으로 부터 배워서, 만약 성과평가 지표(P)의 값이 향상이 된다면 컴퓨터 프로그램은 학습을 할 수 있다"고 말할 수 있다고 합니다. 

(Tom M. Mitchell provided a widely quoted, more formal definition: "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E".)


- from Wikipedia -



좀더 부언설명을 하자면, Arthur Samuel 이 말한 것 중에 보면 기계학습은 명시적으로 프로그래밍하는 것이 아니라고 했는데요, 명시적으로 프로그래밍하는 것을 들라면 전문가 시스템(Expert System)을 있겠습니다.  전문가 시스템 하나 만들려면 업 전문가(domain expert)와 프로그래머가 긴 시간을 들여 협업해야 하므로 비용이 많이 드는 한계가 있지요. 


Tom M. Mitchell 은 Experience, Task, Performance measure를 가지고 기계학습을 정의했는데요, Arthur Samuel의 정의보다는 기계학습에 필요한 요소에 대해서 좀더 자세하게 설명하였습니다. Experience는 Data 로 보면 되겠습니다. 예전엔 데이터가 귀했지만 요즘은 데이터가 넘쳐나서 그걸 어떻게 제 시간에 처리하느냐가 문제가 되어버렸습니다.  Task 는 예측, 분류, 패턴 발견, 그룹핑 등을 들 수 있겠네요.  Performance measure 는 컴퓨터가 학습을 잘 하고 있는지 아닌지 평가, 판단, 제어할 때 사용하는 지표들인데요, 정확도, 민감도, 오분류율, recall rate ... 등을 훈련 집단, 테스트 집단과 비교해가면서 훈련을 진행하게 됩니다. 


컴퓨터의 아버지, 2차 세계 대전 시 독일군의 암호 이니그마를 풀었던 천재 수학자 Alan Turing은 제안하기를 "기계가 생각을 할 수 있는가?"라는 질문을 "우리가 할 수 있는 일들을 기계가 할 수 있는가?"라는 질문으로 바꾸어야 한다고 했는데요, Tom M. Mitchell의 기계학습 정의와도 일맥상통하는 면이 있습니다. 

(Alan Turing's proposal in his paper "Computing Machinery and Intelligence" that the question "Can machines think?" be replaced with the question "Can machines do what we (as thinking entities) can do?", from Wikipedia)



기계학습은 과업을 학습하는데 필요한 신호와 피드백(signal and feedback)에 따라서 크게 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning)의 3개 유형으로 구분할 수 있습니다. 





지도학습(Supervised Learning)은 훈련 데이터(Training Data)로 부터 예측/추정(prediction, estimation), 분류(classification) 함수를 만들어 내는 기계학습 방법입니다.  독립변수(x1, x2, ...)들과 종속변수(y)를 가지고 있고, 선생님의 지도 하에 독립변수와 종속변수 간에 관계를 일반화하는 학습을 하게 됩니다.  Y값을 가지고 있으니 학습이 끝나고 나면 성적표가 적나라하게 나옵니다.  과거의 데이터를 가지고 학습을 시키고 나면, 학습 모델에 새로운 데이터에 적용해서 예측/추정, 분류 등의 과업을 수행합니다. 



반면에 비지도학습(Unsupervised Learning)은 관찰한 데이터로 부터 숨겨진 패턴/규칙을 탐색, 찾아내는 기계학습 방법입니다.  비지도학습에서는 종속변수(y) 값이 없습니다. 선생님도 없습니다.  그냥 Input 변수 (x1, x2, ...) 만 주고 컴퓨터보고 수많은 데이터 속에 숨겨져 있는 패턴을 찾으라고 합니다. 연관/순차규칙 분석(association rule, sequence analysis), 군집화(clustering, affinity grouping), 차원 축소(dimension reduction), 네트워크 분석(network analysis, link analysis) 등이 비지도학습에 속합니다.  비지도학습은 Y값이 없으니 학습이 끝나고 나서 몇 점을 받았는지 객관적으로 평가하기가 애매하며 분석가의 주관이 들어갑니다.  비지도학습은 데이터로 숨겨진 패턴/규칙을 발견하고 나면 그걸로 끝납니다. 비지도학습은 지도학습처럼 새로운 데이터에 학습모델을 적용하는거 없습니다. 

(영상, 이미지 처리/분석을 비지도학습에 넣기는 했는데요, 데이터마이닝이나 머신러닝 책들에서는 보통 언급을 안하더군요. feature extraction 하는데 유용하게 쓰곤 하는데요, 성격상 비지도학습에 넣어도 괜찮은거 같아서 일단 넣어봤습니다) 

 


비지도학습은 분석의 초기에 탐색적분석(EDA, Exploratory Data Analysis) 단계에서 많이 사용되곤 합니다.  비즈니스 과업의 많은 경우 비지도학습과 지도학습을 서로 연계해서 사용하는 경우가 많습니다. 




* 그림 출처 : http://prooffreaderswhimsy.blogspot.kr/2014/11/machine-learning.html




과업의 종류별로 지도학습과 비지도학습의 대표적인 알고리즘을 소개하면 아래와 같습니다 (통계기법도 포함함).  분석기법/알고리즘은 과업의 종류와 데이터의 특성에 맞게 적합한 것을 선별하면 됩니다.  앞으로 R 기계학습 패키지를 가지고 하나씩 예제를 들어가면서 소개하도록 하겠습니다. 


 


강화학습(Reinforcement Learning)은 위키피디아에서 소개하고 있는 내용을 번역해서 소개하는 걸로 하겠습니다.  이세돌과 바둑 대결했던 알파고와 구글의 무인자동차에 적용된 기계학습 기법이 강화학습인만큼 소위 뜨고 있는 핫한 분야인거 같습니다.  위키피디아에서 소개하길, 


강화학습(Reinforcement Learning)은 명시적으로 선생님이 가르치는 것 없이도 동적으로 변화하는 환경과 상호작용하면서 특정 목적(예: 자동차 운전)을 수행할 수 있는 컴퓨터 프로그램을 말합니다. 

(Reinforcement learning: A computer program interacts with a dynamic environment in which it must perform a certain goal (such as driving a vehicle), without a teacher explicitly telling it whether it has come close to its goal.)   


또다른 예로는 대전 게임하는 방법을 배우는 것을 들 수 있습니다. 강화학습은 장기관점의 보상(long-term reward)을 최대화하기 위해서 agent가 변화하는 환경 속에서 무슨 행동을 취해야 하는지에 대해서 주목합니다. (Another example is learning to play a game by playing against an opponent. Reinforcement learning is concerned with how an agent ought to take actions in an environment so as to maximize some notion of long-term reward.). 


강화학습 알고리즘은 세상(환경)의 상태(변화)에 따라 agent가 취해야 할 행동을 매핑(선택)하는 정책을 찾는 시도를 합니다.  강화학습은 지도학습과는 달리 정확한 input/output 쌍의 데이터라든지 최적의 행동 집합을 필요로 하지 않습니다. (Reinforcement learning algorithms attempt to find a policy that maps states of the world to the actions the agent ought to take in those states. Reinforcement learning differs from the supervised learning problem in that correct input/output pairs are never presented, nor sub-optimal actions explicitly corrected.)


* 출처 : 위키피디아(https://en.wikipedia.org/wiki/Machine_learning)



우리가 보통 (강한) 인공지능(AI, Artificial Intelligence) 이라고 말할 때 생각하는 기계학습은 강화학습(Reinforcement Learning)과 많이 관련이 있어보이지요?  Deep Learning이 Feature selection을 사람이 개입해서 해주지 않아도 알아서 해주니 Deep Learning + 강화학습(Reinforcement Learning)이 강한 인공지능의 핵심으로 부상하고 있는거 같습니다.  제약조건(constraints) 을 만족하는 하에서 최대화(maximization) 혹은 최소화(minimization)하는 최적화(optimization)가 역동적으로 변화하는 환경에 대응해서 실시간으로 계산해서 적용하고 실시간으로 피드백 받는 동적인 시스템을 생각하면 되겠습니다. 


많은 도움 되었기를 바랍니다. 


다음번 포스팅에서는 일반화(Generalization)과 과적합(Over-fitting)에 대해서 알아보겠습니다. 


이번 포스팅이 도움이 되었다면 아래의 '공감 ♡'를 꾸욱~ 눌러주세요. 



728x90
반응형
Posted by Rfriend
,