머신러닝이란?
머신러닝의 주요 도전 과제
[나쁜 데이터의 사례]
- 충분하지 않은 양의 훈련 데이터
대부분의 머신러닝 알고리즘이 잘 작동하려면 데이터가 많아야 한다. 아주 간단한 문제에서도 수천 개의 데이터가 필요하고 이미지나 음성 인식 같은 복잡한 문제라면 수백만 개가 필요할지도 모른다.
- 대표성 없는 훈련 데이터
일반화가 잘 되려면 훈련 데이터가 일반화하고 싶은 새로운 사례를 잘 대표하는 것이 중요하며, 이는 사례 기반 학습이나 모델 기반 학습 모두 마찬가지이다.
- 샘플이 작으면 샘플링 잡음 (우연에 의한 대표성 없는 데이터)
- 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띄지 못할 수 있으며, 이를 샘플링 편향이라고 한다.
- 낮은 품질의 데이터
훈련 데이터가 오류, 이상치, 잡음으로 가득하다면 머신러닝 시스템이 내재된 패턴을 찾기 어려워 제대로 작동하지 않을 것이다. 그렇기 때문에 훈련 데이터 정제에 시간을 투자해야 한다.
- 일부 샘플이 이상치라는 게 명확하면 간단히 해당 샘플들을 무시하거나 수동으로 잘못된 것을 고치는 것이 좋다
- 일부 샘플에 특성 몇 개가 빠져 있다면 이 특성을 모두 무사할지, 이 샘플을 무사할지, 빠진 값을 채울지, 또는 이 특성을 넣은 모델과 제외한 모델을 따로 훈련시킬 것인지 결정해야 한다
- 관련없는 특성
성공적인 머신러닝 프로젝트의 핵심 요소는 훈련에 사용할 좋은 특성들을 찾는 것이며, 이 과정을 특성 공학이라 한다.
- 특성 선택: 가지고 있는 특성 중에서 훈련에 가장 유용한 특성 선택
- 특성 추출: 특성을 결합하여 더 유용한 특성을 만든다. 차원 축소 알고리즘이 도움이 될 수 있다
- 데이터 수집: 새로운 데이터를 수집해 새 특성을 만든다
[나쁜 알고리즘의 예]
- 훈련 데이터 과대적합
모델이 훈련 데이터에는 너무 잘 맞지만 일반성이 떨어지는 것.
심층 신경망 같은 복잡한 모델은 데이터에서 미묘한 패턴을 감지할 수 있지만, 훈련 데이터 세트에 잡음이 많거나 데이터셋이 너무 작으면 샘플링 잡음이 발생하므로 잡음이 섞인 패턴을 감지하게 되며, 당연히 이런 패턴은 새로운 샘플에 일반화되지 못한다.
규제: 모델을 단순하게 하고 과대적합의 위험을 줄이기 위해 모델에 제약을 가하는 것.
학습하는 동안 적용할 규제의 양은 하이퍼파라미터가 결정하는데, 하이퍼파라미터는 학습 알고리즘의 파라미터라 학습 알고리즘으로부터 영향을 받지 않으며, 훈련 전에 미리 지정되고, 훈련하는 동안에는 상수로 남아있다.
규제 하이퍼 파라미터를 매우 큰 값으로 지정하면 기울기가 0에 가까운 거의 평편한 모델을 얻게 되며, 학습 알고리즘이 훈련 데이터에 과대적합될 가능성은 거의 없겠지만 좋은 모델을 찾지 못하기 때문에 머신러닝 시스템을 구축할 때 하이퍼파라미터 튜닝은 매우 중요한 과정이다.
- 훈련 데이터 과소적합
과소적합은 과대적합의 반대 의미로, 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못할 때 일어난다.
과소적합을 해결하는 주요 기법
- 모델 파라미터가 더 많은 강력한 모델 선택
- 학습 알고리즘에 더 좋은 특성 제공 (특성 공학)
- 모델의 제약을 줄인다 (규제 하이퍼파라미터 감소 등)
테스트와 검증
모델이 새로운 샘플에 얼마나 잘 일반화될지 알 수 있는 유일한 방법은 새로운 샘플에 실제로 적용해보는 것이며, 이를 위해 실제 서비스에 모델을 넣고 잘 작동하는지 모니터링 하는 방법이 있다.
더 나은 방법은 훈련 데이터를 훈련 세트와 테스트 세트 두 개로 나눠 훈련 세트를 사용해 모델을 훈련하고 테스트 세트를 사용해 모델을 테스트하는 것이다.
새로운 샘플에 대한 오차 비율을 일반화 오차 또는 외부 샘플 오차라고 하며, 테스트 세트에서 모델을 평가함으로써 이 오차에 대한 추정값을 얻는데, 이 값은 이전에 본 적이 없는 새로운 샘플에 모델이 얼마나 잘 작동할지 알려준다.
훈련 오차가 작지만 일반화 오차가 크다면 이는 모델이 훈련 데이터에 과대적합되었다는 뜻이다.
[하이퍼파라미터 튜닝과 모델 선택]
일반화 오차를 테스트 세트에서 여러 번 측정하면 모델과 하이퍼파라미터가 테스트 세트에 최적화된 모델을 만들어 모델이 새로운 데이터에 잘 작동하지 않을 수 있다. 이 문제에 대한 해결 방법은 홀드아웃 검증으로, 훈련 세트의 일부를 떼어내어 여러 후보 모델을 평가하고 가장 좋은 하나를 선택하는 방법이다. 여기서 새로운 홀드아웃 세트를 검증 세트(validation set)라고 부른다.
이를 구체적으로 말하면, 줄어든 훈련 세트 (전체 훈련 세트 - 검증 세트)에서 다양한 하이퍼파라미터 값을 가진 여러 모델을 훈련하고, 검증 세트에서 가장 높은 성능을 내는 모델을 선택한다. 홀드아웃 검증 과정이 끝나면 최선의 모델을 검증 세트를 포함한 전체 훈련 세트에서 다시 훈련하여 최종 모델을 만들고, 최종 모델을 테스트 세트에서 평가하여 일반화 오차를 추정한다.
이 방법은 검증 세트가 너무 작으면 모델이 정확하게 평가 되지 않아 최적이 아닌 모델을 잘못 선택할 수 있고, 검증 세트가 너무 크면 남은 훈련 세트가 전체 훈련 세트보다 훨씬 작아진다. 이 문제를 해결하는 방법은 작은 검증 세트를 여러 개를 사용해 반복적인 교차 검증을 수행하는 것인데, 검증 세트마다 나머지 데이터에서 훈련한 모델을 해당 검증 세트에서 평가하고, 모든 모델의 평가를 평균하면 훨씬 정확한 성능을 측정할 수 있다. 다만 훈련 시간이 검증 세트의 개수에 비례해 늘어난다는 단점이 있다.
[데이터 불일치]
어떤 경우에는 쉽게 많은 양의 훈련 데이터를 얻을 수 있지만 이 데이터가 실제 제품에 사용될 데이터를 완벽하게 대표하지 못할 수도 있다. 이 경우 가장 중요한 규칙은 검증 세트와 테스트 세트가 실전에서 기대하는 데이터를 가능한한 잘 대표해야 한다는 것이며, 검증 세트와 테스트 세트는 대표성을 가진 사진으로만 구성되어야 한다는 것이다.
만약 웹에서 다운로드한 사진에 모델을 훈련한 다음 검증 세트에서 모델의 성능을 측정했더니 결과가 매우 실망스럽다고 가정할 때, 이 경우 모델이 훈련 세트에 과대적합되었기 때문인지, 웹과 모바일 사진의 데이터가 불일치하기 때문인지 알기 어려우므로 웹에서 다운로드한 훈련 사진의 일부를 떼어내 또 다른 세트 (훈련-개발 세트)를 만들어 모델을 훈련 세트에서 훈련한 다음 훈련-개발 세트에서 평가한다.
만약 모델이 잘 작동하지 않으면 훈련 세트에 과대적합된 것이므로 모델을 규제하거나, 더 많은 훈련 데이터를 모으거나, 훈련 데이터 정제를 시도해봐야 한다.
만약 모델이 훈련-개발 세트에서 잘 작동한다면 검증 세트에서 평가할 수 있는데, 성능이 나쁘다면 이 문제는 데이터 불일치에서 오는 것이므로 웹 이미지를 모바일 앱에서 찍은 사진처럼 보이도록 전처리한 다음 이 모델을 다시 훈련하여 이 문제를 해결할 수 있다.
훈련-개발 세트와 검증 세트에서 모두 잘 작동하는 모델을 얻은 다음 마지막으로 테스트 세트에서 평가하여 제품에 사용될 때 얼마나 잘 작동할지 알 수 있다.
다음 내용
[출처]
핸즈온 머신러닝
'[파이썬 Projects] > <파이썬 머신러닝>' 카테고리의 다른 글
[머신러닝] 데이터셋을 구하기 좋은 사이트 모음 (1) | 2024.11.08 |
---|---|
[머신러닝] 캘리포니아 주택 가격 프로젝트-1 (4) | 2024.11.07 |
[머신러닝] 추천 시스템: Surprise를 이용한 영화 시스템 구축 (8) | 2024.11.06 |
[머신러닝] 추천 시스템: 파이썬 패키지 Surprise (0) | 2024.11.04 |
[머신러닝] 추천 시스템: 잠재 요인 협업 필터링 실습 (3) | 2024.11.03 |