다음은 핸즈온 머신러닝 책 1장 한눈에 보는 머신러닝을 기반으로 작성하였습니다.
머신러닝이란?
머신러닝은 데이터를 이용하여 명시적인 프로그래밍 없이 컴퓨터가 스스로 학습하는 능력을 갖추게하는 것이다. 이때 명시적인 프로그래밍이라는 것이 무엇인지 감이 안온다면 스팸 필터를 예시로 생각했을 때 잘 알 수 있다.
위 정의는 아서 새뮤얼 Arthur Samuel, 1959 말을 인용한 것으로 일반적인 머신러닝 정의이다.
머신러닝이 필요한 이유
스팸 필터는 첫 번째 머신러닝 애플리케이션으로 1990년대에 시작했다. 이는 사용자가 스팸이라고 지정한 스팸 메일과 일반 메일의 데이터를 이용해서 스팸 메일인지 아닌지를 구분하는 머신러닝 프로그램이다.
Figure 1
전통적인 프로그래밍 기법 즉, 명시적인 프로그래밍으로 스팸필터를 구현한다면 스팸에 어떤 단어들이 자주 나타나는지 그 규칙을 개발자가 직접 정의를 해줘야한다. 예를 들어 ‘신용 카드’, ‘무료’ 단어가 포함되어있을 때 대부분 스팸이라고 규칙을 찾았다면 그 단어가 메일 안에 있을 때 스팸으로 간주하는 것이다. 이는 If 조건문으로 간단하게 구현할 수 있다. 하지만 현실적으로 생각했을 때 스팸에 자주 나타나는 단어들의 규칙을 모두 다 알기는 어렵고 그리고 그거를 명시적인 프로그래밍을 하다보면 코드와 규칙이 점점 길어질 것이다. 그리고 스팸 메일 발송자가 스팸 필터에 대항해서 계속 단어를 바꾸게 되면 새로운 규칙을 또 추가해야되기 때문에 유지보수는 더 어려워진다.
이를 해결하는 것이 ‘머신러닝’이라 할 수 있다.
공학적인 머신러닝 정의
앞서 일반적인 머신러닝 정의를 살펴보았는데 공학적인 정의는 다음과 같다.
어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 P에 대해 경험 E로 학습할 것이다.
- 톰 미첼 Tom Mitchell, 1997
글을 보면 처음에는 무슨 말인지 이해가 안될 수 있는데 스팸 필터를 예시로 생각하면 생각보다 이해하기 쉽다.
•
작업 T는 새로운 메일이 스팸인지 아닌지를 구분하는 작업을 말한다.
•
성능 P는 직접 정의해야하며 예를 들어 정확히 분류된 메일의 비율 정확도 accuracy 로 정할 수 있다.
•
경험 E는 학습 데이터를 의미한다.
따라서 스팸필터 Task의 정확도를 측정했을 때 학습 데이터 E로 성능이 향상됐다면, 이 스팸필터는 학습 데이터 E로 학습시킬 것이라는 거다. MNIST 데이터에 대한 분류를 예시로 들면, 작업 T는 0~9까지의 숫자를 예측하는 것이고 P는 accuracy, E는 MNIST 데이터셋이 되는 것이다.
용어
훈련 세트 training set | 학습하는 데 사용하는 데이터 |
훈련 사례/샘플 training instance/sample | 각각의 훈련 데이터. 예를 들어, MNIST 데이터셋으로 치면 (숫자 9 이미지 1개, 라벨 9) 를 의미한다. |
모델 model | 학습하고 예측을 만드는 부분. |
정확도 accuracy | 성능 측정 측도이다. |
접근방법: 전통적 vs 머신러닝 vs 데이터마이닝
“머신러닝이 필요한 이유”에서 전통적인 방법(명시적인 프로그래밍)을 사용했을 때의 문제점을 언급했었다. 이를 통해 머신러닝이 필요하다고 하였는데 구체적으로 머신러닝 접근 방법은 어떠한지 살펴보자.
머신러닝 접근방법
Figure 2
Figure 2를 살펴보았을 때, 전통적인 접근 방법의 경우 2. 규칙 작성에서 문제가 발생한다. 이를 머신러닝 모델 훈련으로 전환하게 되면 스팸 메일의 기준을 자동으로 학습하기 때문에 우리가 명시적인 프로그래밍을 할 필요가 없어지게 된다. 이로써 코드는 짧아지고 유지보수하기 쉬워진다. 또한, 대부분 정확도가 더 높다.
그리고, 스팸 메일 발송자가 스팸 필터에 대항해 계속 단어를 바꾼다고 하더라도 데이터를 업데이트해서 다시 모델을 훈련시키며 대응할 수 있다.
데이터마이닝 접근 방법
데이터마이닝이란 무엇일까? 이번에도 스팸 필터를 예시로 들어보자. 스팸 필터는 학습이 끝난 후에 받은 새로운 메일이 스팸 메일인지 아닌지를 구분할 것이다. 근데 그 뿐만 아니라 스팸을 예측하는데 가장 좋은 단어 또는 단어의 조합이 무엇인지를 분석해볼 수 있다.
예를 들어, 다음과 같은 결과를 얻어낼 수 있는 것이다.
•
데이터: "Congratulations! You have won a free iPhone. Click here to claim it now."
•
중요한 단어: "free", "win", "click", "now"
•
중요한 단어 조합: "win free", "click now"
중요한 단어를 추출할 수 있는 방법에는 여러가지 방법이 있겠지만 우선 하나의 예시를 들자면 모델의 가중치를 활용할 수 있다. Logistic Regression 와 같은 선형 모델은 각 단어(Feature)에 대한 가중치를 제공한다. 이떄, 가중치가 높을수록 해당 단어가 스팸 여부를 결정하는 데 중요한 역할을 할 것이라는 것을 알 수 있다. 예를 들어, 단어 “free”의 가중치가 3.5, “click” 가중치가 2.8이라면 “free”가 스팸 여부를 더 강하게 예측한다고 판단할 수 있다. 이를 통해, 예상치 못한 상관관계나 새로운 추세를 발견할 수 있으며 해당 문제를 더 잘 이해할 수 있다.
이처럼 대용량의 데이터를 분석하여 숨겨진 패턴을 발견하는 것을 ‘데이터마이닝’이라고 한다.
그런데 이러한 분석이 매번 가능한 것은 아니다. 예를 들어, 복잡한 딥러닝 모델은 입력 데이터를 학습한 후 높은 정확도로 결과를 제공할 수는 있겠지만, 그 내부 과정이 블랙박스처럼 작동하기 때문에 학습된 패턴이나 중요한 조합을 명확히 확인하기는 어렵다. 여기서 블랙박스라는 것은 모델 내부의 메커니즘을 몰라 사람이 직접 이해하거나 해석하기 어렵다는 것을 의미한다.
딥러닝을 원래 각광을 받았을까?
원래부터 딥러닝이 각광을 받았던 것은 아니다. 2006년 전까지는 심층 신경망을 훈련시키는 것이 불가능하다고 생각했고 대부분의 연구자가 1990년대부터 심층 신경망을 연구하지 않았다고 한다. 그런데 2006년 제프리 힌턴 Geoffrey Hinton 등이 최고 수준의 정확도인 >98%로 손글씨 숫자를 인식할 수 있는 심층 신경망 훈련 기법에 관한 논문을 발표했는데 이 이후부터 딥러닝이 각광받기 시작했다.