손실 함수·연습 문제

클래스 가중 Focal Loss

문제 설명PROBLEM

preview

클래스 가중 Focal Loss

51번 Focal Loss어려운 샘플 중심 ((1p)γ(1-p)^\gamma) 로 가중. 클래스 불균형이 더 심하면 클래스별 가중치 αc\alpha_c 까지 붙여 (Lin et al. 2017 원래 버전):

L=1Niαyi(1pyi)γlog(pyi)L = -\frac{1}{N} \sum_i \alpha_{y_i} \, (1 - p_{y_i})^\gamma \, \log(p_{y_i})

왜 두 가지 기전?

  • γ (focusing): 잘 분류된 쉬운 샘플의 기여도를 지수적으로 감소.
  • α (class weight): 희귀 클래스에 더 큰 가중치로 모델이 더 많이 학습하도록.
  • 함께 쓰면 extreme imbalance (예: object detection background vs foreground) 에서 효과.

과제

함수 focal_loss_alpha(logits, y_true, gamma, alpha) 를 완성하세요.

  • logits (N, C), y_true (N,) 정수.
  • alpha shape (C,) — 클래스별 가중치.
  • 반환: Python float 배치 평균.

테스트 케이스

#이름검증
1alpha = 1 ones → 51번과 일치
2shapefloat 반환
3완벽 예측 → 작은 손실
4큰 alpha 클래스의 샘플 → 손실 기여 ↑
5alpha 적용 확인손계산과 일치
개념 노트와 실수 포인트

손실 함수

  • MSE=평균제곱오차, MAE=평균절대오차, CrossEntropy=분류용.
  • ⚠️ CrossEntropy 의 log(0)-inf. 작은 epsilon 을 더해 방지.
  • 평균(mean) vs 합(sum) reduction, 예측·정답 인자 순서 확인.