3. 머신러닝 주요 도전 과제
결과적으로 머신러닝은 학습 알고리즘을 선택해서 어떤 데이터에 훈련시키는 것이므로 문제가 될 수 있는 것은 "나쁜 알고리즘"과 "나쁜 데이터" 크게 두 가지로 살펴볼 수 있다.
1) 데이터
① 충분하지 않은 양의 훈련 데이터
머신러닝 알고리즘이 잘 작동하려면 데이터가 많아야 한다. 아주 간단한 문제에서조차도 수 천 개의 데이터가 필요하고 이미지나 음석 인식 같은 복잡한 문제라면 이미 만들어진 모델을 재사용하지 않는 이상 수 백만 개가 필요할지도 모른다.
② 대표성이 없는 훈련 데이터
일반화가 잘되려면 일반화하기를 원하는 새로운 사례를 훈련 데이터가 잘 대표하는 것이 중요하다. 즉 대표성이 있는 훈련 데이터를 사용해야 새로운 샘플에 대한 예측이 잘 이루어질 수 있는 것이다. 하지만 이는 생각보다 어려울 때가 많다. 샘플이 적으면 샘플림 잡음(sampling noise, 우연성에 의한 대표성 없는 데이터)이 생기고, 샘플이 많아도 표본 추출 방법이 잘못되면 샘플링 편향(sampling bias)이 생기면서 대표성을 띠지 못할 수도 있다.
③ 낮은 품질의 데이터
훈련 데이터가 에러, 이상치, 잡음으로 가득하다면 머신러닝 시스템이 내재된 패턴을 찾기 어려워 작동하지 않을 것이다. 그래서 훈련 데이터 정제에 충분히 많은 시간을 들여야 한다.
- 일부 샘플이 이상치라는 게 명확하면 무시하거나 수동으로 잘못된 것을 고치는 것이 좋다.
- 일부 샘플에 특성이 몇 개가 빠져있다면, 이 특성을 무시할지, 이 샘플을 무시할지, 빠진 값을 채울지, 아니면 이 특성을 넣은 모델과 제외한 모델로 따로 훈련시킬지 결정해야 한다.
④ 관련 없는 특성
훈련 데이터에 관련 없는 특성이 적고 관련 있는 특성이 충분해야 시스템이 잘 학습할 수 있다. 머신러닝 프로젝트를 성공적으로 수행하려면 그 핵심 요소는 훈련에 사용할 좋은 특성을 찾는 것이다. 이 과정을 특성 공학(feature engineering)이라고 하며 다음과 같은 작업을 통해 달성할 수 있다.
- 특성 선택 (feature selection) : 가지고 있는 특성 중 훈련에 가장 유용한 특성을 선택
- 특성 추출 (feature extraction) : 가지고 있는 특성을 결합하여 더 유용한 특성을 만든다.
- 새로운 데이터를 수집해 새 특성을 만든다.
2) 알고리즘
⑤ 훈련 데이터 과대 적합
과대 적합(overfitting)은 모델이 훈련 데이터에 너무 잘 맞아 일반성이 떨어진다는 것으로 모델의 융통성이 없어진다는 뜻이다. 훈련 세트에 잡음이 많거나 데이터셋이 너무 작으면(샘플링 잡음 발생) 잡음이 섞인 패턴을 감지하게 되며 이런 패턴은 새로운 샘플에 일반화되지 못한다. 훈련 데이터에 있는 잡음의 양에 비해 모델이 너무 복잡할 때 주로 발생하며 다음과 같은 방법을 통해 해결할 수 있다.
- 규제(regularization) : 과대 적합의 위험을 감소시키기 위해 모델에 제약을 가해 단순화하는 것
- 하이퍼 파라미터(hyper parameter) : 학습 알고리즘의 파라미터로 훈련 전에 미리 지정되는 상수. 모델의 과적합을 막고 예측 정확도를 높이기 위해 최적화하는 "하이퍼 파라미터 튜닝"과정은 머신러닝 시스템 구축에 매우 중요한 과정 중 하나이다.
- 파라미터 수가 적은 모델을 선택한다. (고차원 다항 모델보다 선형 모델)
- 훈련 데이터에 있는 특성의 수를 줄인다.
- 훈련 데이터를 더 많이 모은다.
- 훈련 데이터 정제를 통해 잡음을 줄인다.
하지만 그렇다고 해서 모델을 너무 단순화(과소 적합)하게 되면 오히려 훈련 데이터에서 알고리즘 학습이 제대로 되지 않을 수도 있다. 따라서 훈련 데이터에 완벽히 맞추는 것과 일반화를 위해 단순한 모델을 유지하는 것 사이의 올바른 균형을 찾는 것이 좋다.
⑥ 훈련 데이터 과소 적합
과소 적합(underfitting)은 과대 적합과의 반대의 특성을 가지고 있다. 이는 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못할 때 일어난다. 이 문제는 주로 다음과 같은 방법을 통해 해결한다.
- 모델 파라미터가 더 많은 강력한 모델 개발
- 학습 알고리즘에 더 좋은 특성 제공(특성 공학, feature engineering)
- 모델의 제약을 줄인다(하이퍼 파라미터 값 감소 등)
4. 테스트와 검증
1) 훈련 세트와 테스트 세트
모델이 새로운 샘플을 얼마나 잘 예측하는지 파악하는 방법 중 하나는 훈련 데이터를 훈련 세트(training set)와 테스트 세트(test set) 두 개로 나누는 것이다. 훈련 세트를 사용해 모델을 먼저 훈련하고 테스트 세트를 사용해 모델을 테스트한다. 새로운 샘플에 대한 오차율을 일반화 오차라고 하며, 테스트 세트에서 모델을 평가함으로써 이 오차에 대한 추정 값을 얻는다. 이 값은 새로운 샘플이 모델에 얼마나 잘 작동할지 알려준다. (만약, 훈련 오차는 낮지만 일반화 오차가 높다면 이는 모델이 훈련 데이터 세트에 과대 적합됐다는 것을 의미한다.)
2) 모델 선택, 하이퍼 파라미터 튜닝 그리고 검증 세트
모델에 대한 평가는 테스트 세트를 사용하여 얻은 오차 추정 값을 통해 정확도를 측정하면 된다. 만약 훈련 데이터는 동일하나 두 모델 중 어떤 것을 선택할지 갈등하고 있다면 두 모델 모두 훈련 세트로 훈련하고 테스트 세트를 사용해 얼마나 잘 일반화되는지 비교해보면 된다. 그렇게 모델을 선택했다고 가정하고 과대 적합을 피하기 위해 학습 알고리즘에 규제를 하려고 한다. 하이퍼 파라미터 튜닝을 통해 값을 계속 바꿔가면서 훈련 데이터를 학습한 후 일반화 오차를 가장 낮게 만드는 최적의 하이퍼 파라미터를 찾아 값을 지정해주었다. 하지만 이 모델에 실제로 새로운 샘플을 투입했을 때는 성능이 예상보다 낮게 나올 수도 있다. 왜냐하면 이 과정이 모두 훈련 세트와 테스트 세트를 포함한 훈련 데이터에 최적화된 모델이기 때문이다.
이 문제를 해결하기 위해 훈련 세트의 일부를 떼어 후보 모델을 평가하기 위한 세트를 하나 만들었는데 이것이 바로 검증 세트(validation set, 다른 말로 development set, dev set라고도 한다.)이며, 이 방법으로 후보 모델을 평가하고 가장 좋은 모델을 선택하는 것이 홀드아웃 검증(holdout validation) 과정이다. 구체적으로 훈련 세트(검증 세트를 제외한 나머지 훈련 세트)에서 다양한 하이퍼 파라미터 값을 가진 여러 모델을 훈련한다. 그다음 검증 세트에서 가장 높은 성능을 내는 모델을 선택한다. 이 홀드아웃 검증 과정이 끝나면 이 모델을 전체 훈련 세트(검증 세트를 포함한 훈련 세트)에서 훈련하여 최종 모델을 만든다. 마지막으로 이 최종 모델을 테스트 세트에서 평가하여 일반화 오차를 추정한다. 이 과정에서 검증 세트가 너무 작으면 모델이 제대로 평가되지 않기 때문에 훈련 데이터 세트를 여러 개의 검증 세트로 만든 뒤 각각의 검증 세트마다 평가를 진행하여 평균값을 내는 교차 검증(cross-validation)을 수행하는 방법도 있다.
3) 데이터 불일치
어떤 경우에는 쉽게 많은 양의 훈련 데이터를 얻을 수 있지만 이 데이터가 실제 제품에 사용될 데이터를 완벽하게 대표하지 못할 수도 있다. 예를 들어 꽃 사진을 찍으면 꽃 이름을 자동으로 찾아주는 모바일 앱을 만든다고 가정하자. 웹에서 수백만 개의 꽃 사진을 다운로드하여 모델을 학습시킬 수 있겠지만 이것이 모바일 앱을 사용해 실제로 찍을 사진을 대표하진 않는다. 만약 모바일 앱으로 찍은 사진이 있다고 가정하면, 이를 모델을 평가하는 검증 세트와 테스트 세트에 각각 독립적으로 포함시켜 새로운 샘플을 대입했을 때 좀 더 잘 맞게 해야 한다. 하지만 웹 사진으로만 이루어진 훈련 세트를 이용해 모델을 학습하고 이를 검증 세트와 테스트 세트로 모델을 평가한다면 모델이 훈련 데이터에 과대 적합되어있기 때문인지, 혹은 웹 사진과 모바일 앱 사진의 데이터가 일치하지 않아서 모델의 성능이 좋게 나오지 않는 것인지 알기 어렵다. 그래서 이를 알기 위해 훈련 세트 안에서 훈련-개발 세트(train-dev set)를 다시 만든다. 그다음 모델을 훈련(훈련-개발 세트를 제외한 나머지)한 다음 훈련-개발 세트에서 평가한다. 모델이 잘 작동한다면 훈련 세트에서 과대 적합이 된 것이 아니고, 이 모델이 만약 검증 세트에서 성능이 나쁘게 나온다면 그것은 웹 사진과 모바일 앱 사진의 데이터 불일치에서 오는 것이다. 이는 모델을 대표할 새로운 데이터를 찾거나 데이터를 정제하는 과정을 통해 극복할 수 있다. 만약 훈련-개발 세트에서 잘 작동하지 않는다면 모델이 훈련 세트에 과대 적합된 것이다. 따라서 모델의 하이퍼 파라미터 튜닝을 하거나 더 많은 데이터를 찾거나 훈련 데이터 정제를 통해 극복할 수 있다.
'기계학습 > Machine Learning' 카테고리의 다른 글
[Hands-on Machine Learning] 파이프라인(pipeline), 특성 스케일링(feature scaling), fit, transform, fit_transform() 메서드의 차이 - housing data (0) | 2020.07.10 |
---|---|
[Hands-on Machine Learning] 계층적 샘플링 (Stratified Sampling) - housing data (0) | 2020.07.09 |
[Hands-on Machine Learning] Machine Learning (의미와 종류) (0) | 2020.07.03 |
회귀분석 - 단순 선형 회귀분석 (0) | 2020.03.02 |
(JH) 선형회귀(Linear Regression) - Do it 딥러닝 입문 2 (0) | 2020.03.01 |
최근댓글