서로 다른 세 전략을 필요에 따라 조합해
현실의 분류 문제는 클래스 분포가 치우친 경우가 많아. 예를 들어 정상 거래가 99%, 사기가 1%라면 단순히 학습한 모델은 모든 거래를 정상이라고 예측하는 법만 배울 수 있어. 정확도는 높아도 쓸모는 없지. 다음 세 도구는 갈수록 더 적극적으로 불균형을 보정해:
- 가중 표본 추출: DataLoader가 샘플을 뽑는 확률을 바꿔 표본이 적은 클래스를 더 자주 보여 줘.
- 손실의 클래스 가중치: 원래 표본 비율은 유지하되 표본이 적은 클래스를 틀렸을 때 더 큰 벌점을 줘.
nn.CrossEntropyLoss(weight=...)로 설정해. - 포컬 손실: 1:1000을 넘는 극단적인 불균형에서 이미 맞히기 쉬운 샘플의 비중을 낮춰. RetinaNet에서 처음 제안했어.
필요하면 조합할 수 있지만 먼저 클래스 가중치부터 시작해. 가장 간단하고 조정할 하이퍼파라미터도 적어. 부족하면 가중 표본 추출을 추가하고, 정말 극단적인 경우에 포컬 손실을 고려해.
피해야 할 함정
표본이 적은 클래스를 과표본 추출하면서 클래스 가중치까지 주면 같은 효과가 두 번 적용돼. 둘 중 하나를 고르거나 함께 쓸 때 전체 가중치를 신중히 조정해. 포컬 손실의 α 매개변수 자체도 클래스 가중치 역할을 한다는 점을 기억해.