크게 실패할 용기있는 자만이 크게 이룰 수 있다”
-존 F. 케네디(35대 미국 대통령)-
시작하며
사실 우리 주변에 머신러닝은 이미 오래전부터 존재해왔습니다. 그 시작은 1990년대에 등장한 스팸 필터(spam filter)입니다. 물론 성능이 완벽하진 않았겠지만, 기술적으로 머신러닝이 분명했고 시간이 흐르면서 이는 추천과 음성 검색으로 발전하였고, 현재는 더욱 다양한 분야에 머신러닝을 접목시키고자 많은 분들이 연구하고 있습니다.
그러면 이 머신러닝의 범주는 정확히 어디까지일까요? 기계가 학습한다는 것은 어떤 의미이며 머신러닝은 우리에게 왜 필요한 것일까요?
이번 포스팅에서 전체적인 머신러닝의 그림을 조망하며 본격적으로 구체적인 개념을 공부하기 전 머신러닝을 거시적으로 바라보는 시간을 가져보겠습니다.
머신러닝이란?
머신러닝은 데이터를 학습하도록 컴퓨터를 프로그래밍하는 과학입니다.
어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때, 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 P에 대한 경험 E로 학습한 것이다.
위는 인공지능의 대표적인 연구자인 '톰 미첼'이 내린 공학적인 정의로 머신러닝의 정의를 설명할 때 가장 일반적으로 인용되는 문구입니다.
작업 T는 메일이 스팸인지를 판단하는 것이고, 경험 E는 시스템 학습에 사용되는 훈련 데이터(Training data)이며, 성능 측정 P는 우리가 직접 정의내려야 합니다. 예를 들어 전체 메일 중 정확히 분류된 메일의 비율을 P로 사용할 수 있습니다.
머신러닝을 왜 사용해야할까?
머신러닝이 무엇인지를 알게 되었으니 이제 왜 머신러닝이어야만 하는지 스팸 필터를 만드는 과정을 일반적인 프로그래밍과 머신러닝을 이용한 프로그래밍 둘로 나누어 비교하면서 생각해보겠습니다.
'4U', '신용카드', '무료' 등 스팸 메일에 자주 등장하는 단어들이 있습니다. 일반적인 프로그래밍의 경우엔 이러한 단어의 패턴들을 찾아내는 알고리즘을 단어 하나당 하나씩 만들어 프로그램이 패턴을 발견 시 해당 메일을 스팸으로 분류하게 해야합니다.
그러나 머신러닝을 이용한다면, 스팸 메일에 자주 나타나는 패턴을 스스로 학습하기 때문에, 프로그램이 훨씬 짧아지고 유지보수도 훨씬 쉬워집니다.
만약 스팸 메일 발송자가 '4U' 단어가 포함된 메일은 모두 차단한다는 사실을 알게 되어 '4U' 대신 'For U'를 사용한다면 일반적인 프로그래밍의 경우 또 다시 이것에 대한 알고리즘을 만들거나 계속해서 수정해야합니다.
그러나 머신러닝을 이용한다면, 스팸 메일에 유독 'For U'가 자주 쓰인다는 것을 인식하여 프로그래머가 별도의 작업을 하지 않아도 단어가 자동으로 스팸으로 분류됩니다.
머신러닝을 통해 배울 수도 있습니다. 예를 들어 스펨 메일을 분류하는 머신러닝 모델이 있다면 이것을 분석하여 스팸 메일을 분류하는데 핵심이 되는 단어나 패턴이 무엇인지를 배울 수 있을 것입니다. 이렇게 머신러닝을 이용하여 빅데이터에서 보이지 않던 패턴을 발견하는 것을 데이터 마이닝이라고 합니다.
머신러닝 시스템의 종류
[ 지도학습 / 비지도학습 ]
1) 지도학습(Supervised Learning)
지도학습은 모델 학습에 사용되는 Training Data(훈련 데이터)에 Label이 붙어있습니다. 대표적인 지도 학습의 종류에는 분류와 회귀가 있습니다. 스팸 메일이 분류의 예, 집의 사이즈를 보고 가격을 예측하는 것이 회귀의 대표적인 예가 되겠습니다.
이외에 다음과 같은 알고리즘도 지도 학습에 포함됩니다.
- K-nearest neighbors, Linear regression, Logistic Regression, SVM(Support Vector Machine), Decision Tree and Random Forest, Neural Network
2) 비지도학습(Non-Supervised Learning)
비지도학습에 사용되는 Training set에는 Label이 없습니다. 그렇기 때문에 학습 모델이 보통 알고리즘을 통해 직접 특성을 찾아내야합니다. 다음은 비지도학습에 포함되는 알고리즘들입니다.
2 - 1) 군집(Clustering)
- 군집 : 비슷한 특성을 가지는 데이터끼리 묶어 특정한 패턴이나 규칙을 발견하기 위해 쓰입니다. 예를 들어 블로그 방문자에 대한 데이터가 있을 때, 이를 비슷한 특성을 가지는 데이터를 묶는 군집 알고리즘을 이용하여 60%의 방문자가 남성이며 저녁에 방문한다는 것을 알수도 있습니다.
- 이상치 탐지 : 전체 데이터에 비해 매우 작은 비율의 데이터를 찾아낼 때 쓰입니다. 예를 들어, 10만건중 10번 꼴로 발견되는 신용 사기의 패턴을 분석하여 사전에 이를 발견하기 위해 쓰일 수 있습니다.
- 특이치 탐지 : 이상치 탐지가 Training set에서 0.01%의 매우 작은 데이터를 발견하는데 쓰인다면, 특이치 탐지는 Training set과 아예 다른 새롭고 특이한 데이터를 찾는데 쓰입니다.
- K-means, DBSCAN, HCA, Anomaly Detection, novelty detection, one-SVM, isolation forest
2 - 2) 시각화(visualization) 및 차원 축소(dimension reduction)
- 시각화 : 고차원의 데이터를 넣으면 그 구조를 가능한 한 유지하면서 도식화가 가능한 2D나 3D로 표현해줍니다.
- 차원 축소 : 고차원의 데이터를 최대한 정보를 잃지 않으면서 차원을 낮추는 것으로, 데이터를 가볍게 해주는 역할을 합니다.
- PCA, Kernel-PCA, LLE, t-SNE
2 - 3) 연관 규칙 학습(Association Rule Leraning)
- 대량의 데이터에서 특성 간의 특별한 관계를 찾는데 유용하게 쓰입니다. 예를 들어, 슈퍼마켓 판매 기록 데이터를 연관 규칙 학습을 시켰더니 높은 비율로 스테이크를 살때 감자를 함께 산다는 것을 발견하여 이를 진열대 정리에 반영할 수도 있습니다.
- Apriori, Eclat
3) 준지도 학습(Semisupervised Learning)
준지도 학습은 Traning set의 Label이 일부에만 붙어있는 데이터가 쓰입니다. 예를 들어, 저의 증명사진에 대해서, 저라는 정보를 기입하지 않고 갤러리에 올렸을 때는 갤러리 내에 제가 포함된 사진이 있는지 자동으로 찾아줄 수 있습니다. 이것은 비지도학습입니다. 반대로 가족 사진을 갤러리에 올리며 사진 속 어떤 사람이 누군인지를 입력하면, 검색을 통해 해당 가족 인물이 포함된 사진을 쉽게 찾을 수 있습니다. 이는 지도학습입니다.
대부분의 준지도 학습 알고리즘은 지도 학습과 비지도 학습의 조합으로 이루어집니다. 심층 신뢰 신경망(DBN)은 비지도 학습 알고리즘인 제한된 볼츠만 머신(RBM)에 기초합니다. 여러 겹(Layer)의 RBM으로 구성된 DBN은 각 Layer의 RBM에서 이뤄진 비지도 학습 방식을 이용하여 전체 시스템을 지도 학습으로 조정합니다.
4) 강화 학습(Reinforcement Learning)
강화 학습은 에이전트(Agent)라고 부르는 학습 시스템이 환경을 관찰해서 행동을 실행하고 그에 따른 보상이나 벌점을 받습니다. 이를 통해 정책(Policy)라 부르는 최상의 전략을 스스로 학습하여 주어진 상황에서 에이전트가 어떻게 행동해야할지 정의합니다. 대표적인 예로, 알파고가 있습니다. 알파고는 별도의 바둑 규칙을 알려주지 않은 채 스스로 수없이 바둑을 두며 스스로 정책을 수립하였습니다.
[ 배치 학습(오프라인 학습)과 온라인 학습 ]
배치 학습은 데이터를 한번에 받아 학습하여 시스템을 만드는 것입니다. 즉 많은 양의 데이터를 한번에 학습해야 하기에 시간과 컴퓨팅 자원을 많이 소모하므로 오프라인에서 주로 수행되어 오프라인 학습으로 불리기도 합니다.
그리고 배치 학습은 새로운 데이터에 대해 학습하기 위해서는 새로운 데이터를 포함 시킨 전체 데이터를 다시 학습시킨 시스템과 기존 시스템을 교체하는 식으로 이뤄지기 때문에 굉장히 비효율적일 수 있습니다.
이에 비해 온라인 학습은 미니 배치(mini batch)라는 작은 묶음 단위로 주입되는 데이터로 점진적으로 학습합니다. 그렇기 때문에 매 학습 단계가 빠르고 컴퓨팅 자원이 많이 소모되지 않습니다. 이것은 주식과 같이 연속적인 데이터를 받으며 빠른 변화가 필요한 시스템에 적합합니다. 혹은 데이터셋이 메모리크기보다 큰 경우 온라인 학습을 통해 데이터의 일부를 조금씩 메모리에 가져와 점진적으로 학습할 수도 있습니다.
온라인 학습에서 제일 중요한 요소 중 하나는 학습률(Learning Rate)입니다. 이 학습률을 높게하면 시스템이 데이터에 빨리 적응하지만 예전 데이터는 금방 잊어버리게 됩니다. 반대로 학습률이 낮다면 새로운 데이터에 적응하는데 더 오랜 시간이 걸리게 되지만, 새로운 데이터의 잡음이나 이상한 데이터에 덜 민감해집니다.
온라인 학습의 가장 큰 문제점은 나쁜 데이터입니다. 예를 들어, 특정 음악 차트에 누군가 자신의 노래를 차트 상위권으로 올리기 위해 의도적으로 매크로를 돌리는 경우를 생각해볼 수 있습니다. 이 경우 관리자가 이를 걸러내는 시스템을 짜거나 지속적인 관리를 해야합니다.
[ 모델 기반 학습과 사례 기반 학습 ]
1) 모델 기반 학습
모델 기반 학습은 데이터를 대표할 수 있는 모델을 생성하여 이를 예측에 이용하는 것입니다. 우리가 앞으로 머신러닝에서 공부할 대부분의 알고리즘들이 바로 여기에 속하게 됩니다. 이러한 모델 기반 학습은 데이터 분석, 모델 선택, 모델 학습, 모델에 새로운 데이터를 적용하여 결과 평가하기 이렇게 보통 4단계로 이루어집니다.
2) 사례 기반 학습
사례 기반 학습은 유사도라는 것을 이용하여 데이터를 분류합니다. 예를 들어 스팸 메일 분류의 경우, 일치하는 단어를 유사도의 척도로 사용하여 어떤 메일이 일정 유사도를 넘으면 스팸을 분류합니다.
머신러닝 적용 시 유의할 점
1) Training data의 수가 충분한가?
우리가 생각하는 좋은 머신러닝 알고리즘이 만들어지기 위해서는 수천개에서 수백만개의 데이터가 필요합니다. 문제는 실제로 우리가 몸담게될 산업현장에서는 우리가 공부할 때 사용하는 예제처럼 예쁘게 정제된 데이터가 대부분 없습니다. 따라서 현재 인공지능을 접목하고자 하는 산업 곳곳에서는 이러한 데이터를 구하기 위해 데이터 파이프라인을 구축하고, 학습에 이용할 수 있도록 데이터를 정제하는 기술을 개발하는데 힘쓰고 있습니다.
2) Trainig data가 대표성을 지니고 있는가?
우리가 어떠한 머신러닝 알고리즘을 개발하여 특정 분야에 적용하고자 한다면 모델 학습에 사용되는 데이터는 대표성을 지녀야합니다. 예를 들어, 나라의 여러 특성을 이용하여 GDP를 예측하는 모델을 만들고자 할 때 특정 나라를 누락시킨다면 이러한 데이터를 학습한 알고리즘은 정확하다고 할 수 없을 것입니다. 이렇게 표본추출을 잘못하여 데이터가 대표성을 띄지 못하는 현상을 샘플링 편향(Sampling bias)라고 합니다. 이외에도 학습 데이터가 너무 작을 경우 샘플링 잡음(Sampling noise)라고 부르는 예외적인 데이터에 모델이 영향을 받을 수 있습니다.
3) Training data의 품질이 높은가?
Training data에 에러, 이상치(예외), 잡음(열악한 측정 장치로 인한)으로 가득찬다면 머신러닝 시스템이 잘 작동할리가 없습니다. 현재에도 다양한 산업군에서 '좋은' 데이터라는 것을 얻기 위해 데이터 사이언티스트의 역할이 더욱 중요해지고 있습니다.
데이터 사이언티스트는 데이터에 이상치가 들어있다면 이를 무시하거나 수동으로 뺄 수도 있고, 일부 데이터에 몇몇 특성이 빠져있다면 이를 그대로 진행할지 채울지를 고민해야합니다.
4) Training data에 필요없는 특성이 들어있진 않는가?
예를 들어 주어진 데이터를 통해 이 사람의 5년 후의 키를 예측하는 알고리즘을 짠다고 해보겠습니다. 그런데 뜬금없이 데이터의 특성으로 각 사람의 수학 점수가 들어간다면 당연히 좋은 알고리즘이 나올 수 없을 것입니다. 이처럼 Training set을 결정할 때는 알고리즘에 필요한 특성들로만 구성되어있는지 고민해야합니다.
5) 모델의 과대적합(Overfitting) / 과소적합(Underfitting)
우리가 머신러닝 학습을 통해 만들어진 모델은 데이터를 대표합니다. 그런데 모델의 대표성이 지나치게 높거나 낮으면 알고리즘의 정확도에 큰 영향을 끼칠 수 있습니다. 예를 들어 암을 발견하는 알고리즘에서 모델이 데이터에 너무 꽉끼는 바람에 99.7% 이상의 확률을 가진 사람만 암으로 판단한다고 하면 실제로 암인데도 불구하고 98%나 99.1%의 확률로 암이 아니라는 끔찍한 오진을 내리게 될수도 있습니다.
요약
- 머신러닝은 프로그래머가 명시적으로 하나하나 구현하는 것이 아닌, 주어진 데이터를 가지고 스스로 학습하면서 성능을 강화시켜나간다.
- 머신러닝 시스템에는 지도 학습과 비지도 학습, 배치 학습과 온라인 학습, 사례 기반 학습과 모델 기반 학습 등이 있다.
- 머신러닝 알고리즘 자체도 중요하지만, 학습에 사용될 데이터를 여러 기준에 따라 알맞게 정제하는 것 또한 매우 중요하다.