모든 단일 모델은 자신만의 가정이 있다. 모델이 무엇을 가정하며 데이터가 그 가정을 실제로 충족하는지 이해한다면 유스 케이스에 가장 적합한 모델이 무엇인지 평가할 수 있다.
흔히 사용하는 가정 중 일부
| 예측 가정
Prediction assumption | 입력 X에서 출력 Y를 예측하는 것이 목표인 모델은 X를 기반으로 Y를 예측할 수 있다고 가정한다. |
---|---|
IID (Independent and Identically Distributed) | 신경망은 각각의 데이터 포인트가 독립적이고 분포가 동일하다고 가정한다. 이는 모든 데이터 포인트가 동일한 결합 분포에서 독립적으로 추출됐다는 의미이다. |
매끄러움 (Smoothness) | 모든 머신러닝 지도 학습 방법은 입력을 출력으로 변환하는 함수 집합을 가정한다. 이때 유사한 입력값은 유사한 출력값으로 변환된다. 입력 X가 출력 Y를 생성한다면 X에 가까운 입력값은 비례적으로 Y에 가까운 출력값을 생성한다. |
계산 가능성 (Tractability) | X는 입력이고 Z는 X의 잠재 표현이라고 할 때 생성 모델은 확률 P(Z |
경계 (Boudaries) | 선형 분류기는 결정 경계가 선형이라고 가정한다. |
조건부 독립 (Conditional independence) | 나이브 베이즈 분류기는 정해진 클래스에 대해 속성값들이 상호 독립이라고 가정한다. |
정규 분포 | |
(Normally distributed) | 많은 통계적 방법론은 데이터가 정규 분포를 따른다고 가정한다. |
ML 모델을 훈련할 때 학습 프로세스를 살펴보는 일은 큰 비중을 차지한다. 훈련 과정에는 다양한 문제가 발생하는데 이러한 문제를 감지해 해결하고 모델이 유용한 정보를 제대로 학습하고 있는지 평가하려면 훈련 중 발생하는 상황을 계속 추적하는 일이 중요하다.
훈련 과정에서 각 실험에 대해 고려할만한 추적 지표
손실 곡선 | 훈련 데이터셋과 각 평가 데이터셋에서 측정한 손실 곡선 |
---|---|
모델 성능 지표 | 정확도, F1, 퍼플렉서티 등 테스트를 제외한 데이터셋에서 주로 측정하는 모델 성능 지표 |
샘플, 예측값, Ground Truth 쌍에 대한 로그 | 임시로 빠르게 살펴보는 분석과 새너티 체크sanity check에 유용하다. |
모델 훈련 속도 | 초당 처리되는 단계수로 평가하거나, 데이터가 텍스트일 때는 초당처리되는 토큰 수로 평가한다. |
시스템 성능 지표 | 메모리 사용량, CPU/GPU 사용률 등으로, 병목 현상을 식별하고 시스템 자원 낭비를 방지하는 데 매우 중요하다. |
매개변수와 하이퍼파라미터 | 변경 시 모델 성능에 영향을 미치는 모든 매개변수와 하이퍼파리미터의 시간에 따른 값 |
실험 추적을 통해 다수의 실험에 대한 비교가 가능하다. 구성 요소가 변하면 모델 성능에 어떤 영향을 미치는지 관찰해 그 요소의 역할을 어느 정도 이해할 수 있다.
디버깅은 소프트웨어 개발의 본질적인 요소이다. ML 모델도 예외는 아니다. 디버깅은 결코 즐겁지 않지만 ML 모델 디버깅은 특히나 고통스러울 수 있다.
모델 실패 원인
이론상의 제약조건 | 모델이 학습하는 데이터가 그 가정에 부합하지 않아서 모델이 실패할 수 있다. |
---|---|
잘못된 모델 구현 | 모델에 구성 요소가 많을수록 문제가 생길 가능성이 높고 어디에 문제가 생겼는지 파악하기가 어렵다. |
잘못된 하이퍼파리미터 선택 | 모델이 데이터에 매우 적합하고 구현이 정확해도 하이퍼파라미터 집하빙 잘못되면 해당 모델은 쓸모없어질 수 있다. |
데이터 문제 | 데이터 수집과 전처리 단의 다양한 문제로 모델 성능이 저하될 수 있다. |
잘못된 피처 선택 | 모델 학습에 피처를 너무 많이 사용하면 모델이 후련 데이터에 과적합되거나 데이터 누수가 발생할 수 있다. 반대로 피처를 너무 적게 사용하면 모델이 예측을 제대로 못 하는 예측력 부족 현상이 발생한다. |
몇 가지 디버깅 기법
| 단순하게 시작하고 점진적으로 구성 요소를 추가하기 | 가장 단순한 모델에서 시작해 구성 요소를 천천히 추가하면서 성능이 향상되는지 혹은 하락하는지 확인한다. 많은 사람이 최신 모델의 오픈 소스 구현물을 복제한 다음 자신의 데이터를 연결하는 식으로 작업을 시작한다. 잘만 작동한다면 탁월한 선택이지만 그렇지 않다면 모델의 수많은 구성 요소로 인해 문제가 발생할 수 있으며 시스템을 디버깅하기 몹시 어려워진다. | | --- | --- | | 단일 배치에 과적합시키기 | 모델을 단순하게 구현해 소량의 훈련 데이터로 과적합시키고, 동일한 데이터를 평가해서 도달 가능한 최소 손실을 달성하는지 확인한다. 데이터가 적은데도 과적합이 안 된다면 구현에 문제가 있을 수 있다. | | 무작위 시드 값을 고정하기 | 가중치 초기화, 드롭아웃, 데이터 셔플링 등 모델이 무작위성을 가져오는 요인은 너무 많다. 무작위성은 다양한 실험 결과를 비교하기 어렵게 한다. 성능 변화가 모델 때문인지 달라진 무작위 시드 값 때문인지 알기 어렵다. 무작위 시드 값을 고정하면 서로 다른 실행 간에 일관성이 보장되며 오류 상황이나 다른 사람의 결과를 재현해낼 수 있다. |