일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 퍼셉트론
- 인공지능 겨울
- AI
- 편향
- 30 Day Challenge
- ANOVA
- 인공지능
- 조건부 확률
- 딥러닝
- Neural Network
- AI Winter
- 통계
- 베이즈 정리
- 컴퓨터 조립
- Bayes Rule
- 인공신경망
- p-value
- 확률
- knn
- 심층학습
- Stack
- LeetCode
- 컴퓨터
- Bayes Theorem
- 분산분석
- p 값
- Today
- Total
군더더기 없는 기계학습 백과사전
기계학습에 대해 알면 유용한 몇 가지 사실들 본문
해당 글은 기계학습 알고리즘 중 제일 성숙한 분야이며 널리 쓰이는 분류기에 초점을 맞춰 써진 글입니다.
이 글에서 분류기(Classifier)는 불연속 혹은 연속적인 피쳐 값들로 이루어진 벡터를 입력값으로 받아들이고 한 개의 클래스(class)라는 불연속 출력 값을 내놓는 시스템으로 정의됩니다. 예를 들어 이메일을 '스팸' 혹은 '스팸 아님'으로 분류하는 스팸 필터기가 있다고 할 때 입력값은 다음과 같을 것입니다: x=(x1,...,xj,...,xd). 여기서 xj=1이란 사전에 있는 j번째 단어가 이메일 글에 등장한다는 뜻이며 그렇지 않다면 xj=0입니다.
학습자(learner)는 (xi,yi)라는 예시들로 이루어진 훈련 집합을 입력값으로 받아들이고, 앞서 정의한 분류기를 출력 값으로 내놓습니다. 여기서 xi=(xi,1,xi,2,...,xi,d)로 정의되며 한 개의 관측에 해당되며 yi는 그에 상응하는 클래스 출력 값입니다. 학습자는 나중에 xt라는 본 적 없는 새로운 관측 개체에 대해 yt라는 올바른 출력을 내놓아 올바른 분류를 하는지 평가받아야 합니다.
학습(Learning) = 표현(Representation) + 평가(Evaluation) + 최적화(Optimization)
만약 여러분이 기계학습 알고리즘의 적용이 적합하다고 생각되는 응용 분야를 발견했다면, 여러분은 수많은 기계학습 알고리즘 사이에서 무엇을 사용해야 할지 갈피를 못 잡을 수 있습니다. 이런 상황을 벗어나긴 위해서는 대부분의 알고리즘은 다음과 같은 핵심 구조를 가진다는 것을 상기하세요.
1. 표현: 분류기는 컴퓨터가 이해하고 다룰 수 있는 용어로 표현되어야만 합니다. 반대로 학습자를 위한 표현 방법을 선택함이란 학습자가 배울 수 있는 분류기의 집합을 선택한다는 것입니다. 이 집합을 학습자의 가설 공간(hypothesis space)이라고 부릅니다.
2. 평가: 좋은 분류기를 나쁜 분류기로부터 분리하고자 한다면 목적 함수(Objective Function) 혹은 점수 함수(Scoring Function)라고도 불리는 평가 함수가 필요합니다. 기계학습 알고리즘이 내부적으로 사용하는 평가 함수는 외부적으로 우리가 최적화하고 싶은 함수와 다른 경우도 존재합니다.
3. 최적화: 최종적으로 우리는 평가 함수를 통해 제일 높은 점수를 얻는 분류기를 찾는 방법이 필요합니다. 여기서 최적화 방법론을 선택함이란 학습자의 최적화된 알고리즘 탐색을 위해 필수적입니다. 보통 기계학습에 입문하는 사람들은 이미 널리 배포된 최적화 알고리즘으로 시작한 뒤 나중에 맞춤 제작한 알고리즘으로 바꿉니다.

정말 중요한 건 일반화(Generalization)
기계학습의 핵심 목표는 훈련 집합 외의 예시들에 대해 일반화할 수 있는 것입니다. 이는 우리에게 데이터가 얼마나 많이 있든 똑같은 예시를 실전에서 다시 볼 수 있는 확률이 굉장히 낮기 때문입니다. (당장 앞서 말한 스팸 필터만 해도 사전에 100,000개의 단어가 들어있다고 했을 때 2100,000 가지 입력값이 존재합니다.)
초보자들이 자주 하는 실수 중 하나가 바로 훈련 데이터에 알고리즘을 적용시키고 성공적으로 알고리즘을 훈련시켰다는 착각에 빠지는 것입니다. 이 알고리즘을 실전에서 쓰면 사실상 그냥 동전 뒤집기보다도 안 좋은 성능이 나올 것입니다. 만약 여러분이 누군가를 고용해 분류기를 만든다면 반드시 데이터 전부를 제공하지 말고 일부만 제공한 뒤 그들이 내놓는 분류기를 평가하는 데 사용하십시오. 마찬가지로 여러분이 분류기 제작을 위해 고용되었다면 주어진 데이터를 훈련 집합과 시험 집합으로 나눈 뒤 최종적으로 선택한 분류기를 시험하기 위해 사용하십시오.
기계학습 분야에서 초기에는 표현 방식이 초평면 같은 것으로 한정되었기에 훈련/시험 집합으로 나누는 것이 두 집합에 대한 알고리즘의 오차(error) 차이가 크지 않았기에 딱히 주목받지 못했습니다. 그러나 현대로 넘어오면서 좀 더 유연한 결정 트리 같은 알고리즘이 등장하면서 해당 과정이 필수가 되었습니다.
데이터만으로는 불충분하다
관측된 적이 없는 데이터를 상대로 분류기를 일반화하는 것이 목적이 되면서 단순히 데이터만 많이 알고리즘에게 제공하는 것만으로는 좋은 분류기 제작에 도달하기엔 불충분해졌습니다. 따라서 모든 알고리즘에는 기본적으로 주어진 데이터 외에 어떤 지식이나 가정이 내재되어야 합니다.
겉으로 봤을 때 실제로는 무한한 함수들이 존재하기 때문에 알고리즘을 통해 무언가를 학습하고자 하는 것은 불가능해 보입니다. 그러나 실생활에서 우리가 배우고자(알고리즘을 통해서 찾고자)하는 함수들이 수학적으로 표현 가능한 모든 함수들에서 균등하게 추출하는 것이 아니고 제한되어 때문에 기계학습은 실용성이 있습니다. 예를 들어 매끄러움(smoothness), 비슷한 예제들이 비슷한 클래스에 포함되는 점, 모델의 제한된 복잡성 등 우리가 찾는 함수에 대해 내린 포괄적인 가정들을 내재함과 적은 데이터로 더 많은 출력을 얻을 수 있는 하나를 알고 열을 알아내는 유도적인 사고방식은 기계학습이 성공적인 분야가 된 원인 중 하나입니다.
여기에 추가로 우리가 데이터에 대한 사전 지식이 있고 이를 모델에 적용할 수 있다면 더 많은 것들을 얻어낼 수 있습니다. 이는 곧 이 사전 지식을 얼마나 잘 표현할 수 있느냐 앞서 말한 표현 방식을 채택할 때 기준점이 된다는 것입니다. 예를 들어 데이터에 확률적 의존성에 대한 지식이 있다면 이를 표현하기엔 확률론적 그래프 모델이 적당할 것입니다.
과적합 발생에는 다양한 원인이 존재한다
만약 우리가 데이터에 대해 가지고 있는 사전 지식이 올바른 분류기를 만들기에 충분하지 않다면 어떻게 될까요? 이런 경우에는 분류기에게 현실에 기반하지 않은 지식을 학습시키고 데이터에서 단순히 무작위로 등장하는 특이한 특징들을 패턴으로 인식하게 만드는 상황을 발생시킵니다. 기계학습에서는 이를 과적합(overfitting)이라고 부르고 이는 기계학습에서 항상 등장하는 제일 골치 아픈 문제입니다. 만약 당신의 학습자가 훈련/시험 데이터를 상대로 둘 다 정확도가 75%인 것 대신 훈련 데이터를 상대로 정확도가 100%이고 시험 데이터를 상대로 정확도가 50%인 분류기를 출력한다면 과적합이 발생한 것입니다.
기계학습 분야에서 일하는 모두가 과적합에 대해서 알고 있지만 이는 분명하지 않은 여러 가지 형태로 등장합니다. 과적합에 대해서 이해할 수 있는 한 가지 방법은 일반화 오차(generalization error)를 편향과 분산으로 나눠보는 것입니다. 편향은 학습자가 일정하게 틀린 것을 학습하는 경향을 말합니다. 분산은 실제 신호(signal)와 전혀 상관없는 것들을 무작위로 배우는 경향을 말합니다.

선형(linear) 학습자는 높은 편향을 가집니다. 왜냐하면 다른 클래스 간의 관계가 초평면으로 나눠지지 않는다면 학습자는 이를 전혀 반영하지 못하기 때문입니다. 반면 결정 트리는 아무 불리언 함수나 표현할 수 있기 때문에 이런 문제가 없습니다. 그러나 그런 특징이 있기 때문에 반대로 높은 분산을 가지는 경향이 있습니다. 이는 똑같은 현상에서 추출되는 다른 훈련 데이터들에 대해 각각 전혀 다른 결정 트리가 만들어지는 것을 보고 알 수 있습니다.

마찬가지로 최적화 방법론에도 비슷한 규칙이 적용됩니다. 빔(beam) 서치는 그리디(greedy) 서치보다 편향이 낮지만 다양한 가설들을 시범해보기 때문에 분산이 높습니다. 따라서 직관과는 달리 더 강력한 학습자라고 약한 학습자보다 무조건적으로 낫다는 것은 아니라는 것입니다. 이는 다음 그림에서도 볼 수 있습니다. 진짜 분류기가 그저 몇 가지 규칙임에도 불구하고 1,000개까지의 예시에서 나이브 베이즈 분류기가 더 정확도가 높습니다. 이는 데이터에 분류에 대한 나이브 베이즈의 잘못된 가정에도 불구하고도 일어납니다. 기계학습에서 이런 강한 거짓 가정을 가진 모델이 약한 참 가정을 가진 모델을 압도하는 상황은 후자가 과적합을 피하기 위해서 더 많은 데이터를 필요로 하기 때문에 자주 일어납니다.

교차검증(Cross Validation)은 과적합을 막는데 도움이 될 수 있습니다. 그러나 만능 해결책은 아닙니다. 예를 들어 교차검증은 결정 트리의 크기 결정에 도움을 줄 수도 있지만 매개변수를 너무나 많이 집어넣으면 결정 트리에 과적합이 일어나기 시작할 것입니다. 교차검증 말고도 평가 함수에 정규화 항(Regularization term)을 더하는 방법도 있습니다. 예를 들어, 이는 학습기가 너무 복잡한 분류기보다는 단순한 분류기를 선호하도록 만듭니다. 또 다른 방법으로 카이 제곱 검정 같은 통계적 유의미함을 평가하는 방법도 있습니다. 이 기술들은 데이터가 적을 때 특히나 유용합니다.
자주 하는 착각으로는 과적합이 잘못된 클래스로 레이블이 달린 훈련 데이터 같은 노이즈로 인해 발생한다는 것입니다. 이는 실제로 과적합을 악화시킬 수 있지만 노이즈가 없음에도 불구하고 심각한 과적합은 발생할 수 있습니다. 예를 들어 우리가 불리언 분류기를 학습시켰을 때 분류기는 그저 관측들의 특정 피처의 유무에만 반응해 훈련 데이터에 있는 양성 관측들만 분리해내고 있는 것일 수도 있습니다. 이는 훈련 데이터에 노이즈가 있든 말든 분류기가 시험 데이터의 양성 관측들을 상대로 모조리 틀리는 상황으로 이어질 수도 있습니다.
다중 비교(Multiple Testing) 또한 과적합과 밀접한 관련이 있습니다. 일반적인 통계 가설 검정은 단 한 개의 가설을 검정하고 있다고 가정합니다. 그러나 현대 학습자들은 손쉽게 수백만 개의 가설을 검정할 수 있습니다. 이는 통계적으로 유의미하지 않은 것들을 유의미하게 보일 수 있게 만드는 상황으로 이어질 수 있습니다. 예를 들어 시장을 10년 연속으로 능가하는 뮤추얼 펀드가 있다고 했을 때 뛰어나 보일 수 있지만, 따져보면 1,000개의 펀드가 있고 각 펀드의 시장 능가 확률이 50%라면 단순 운으로 10번 연속으로 시장을 능가하는 펀드가 등장할 확률은 꽤 높다는 것을 알 수 있습니다. 이는 가설의 개수를 고려하도록 통계적 유의성 검증을 고치는 방법이 있지만 이는 또 과소 적합(underfitting)이라는 문제로 이어질 수도 있습니다. 더 나은 방법은 귀무가설이 아닌 가설들에 대한 1종 오류를 줄이도록 False Discovery Rate를 보정하는 것입니다.
출처: Pedro Domingos. 2012. A few useful things to know about machine learning. Commun. ACM 55, 10 (October 2012), 78–87. DOI:https://doi.org/10.1145/2347736.2347755