손실 함수·연습 문제

Weighted BCE with pos_weight [medium]

문제 설명PROBLEM

preview

Weighted BCE with pos_weight [medium]

v1 BCE 는 양/음성 샘플을 동등 취급. 클래스 불균형 (ex. 이상 탐지: 양성 1%) 에서는 양성을 놓치는 비용이 훨씬 큼. pos_weight ww 로 양성 항을 증폭:

L=1Ni[wyilogpi+(1yi)log(1pi)]L = -\frac{1}{N} \sum_i \big[ w \cdot y_i \log p_i + (1 - y_i) \log(1 - p_i) \big]

  • w=1w = 1 → 일반 BCE (v1).
  • w=N/N+w = N_-/N_+ → 이론적으로 양/음 loss 가 균형 (PyTorch 관례).

언제 쓰이나

  • 의료 영상 (segmentation): 병변 픽셀이 소수.
  • 이상 탐지, 스팸 분류.
  • PyTorch BCEWithLogitsLoss(pos_weight=...) 내장.

수치 안정 + 가중치 적용

기본 BCE 처럼 clip 필요 (log(0) 방지):

p = np.clip(p, eps, 1 - eps)
bce_per_sample = -(w * y * np.log(p) + (1 - y) * np.log(1 - p))
return bce_per_sample.mean()

과제

함수 weighted_bce(p, y, pos_weight) 를 완성하세요.

  • p, y shape (N,), 스칼라 pos_weight.
  • 반환: Python float.
  • eps = 1e-7 로 clip.

테스트 케이스

#이름검증
1float 반환
2pos_weight=1 → v1 BCE 와 동일
3완벽 예측 → ~0
4pos_weight 클수록 양성 오분류 페널티 ↑
5pos_weight 는 음성 loss 는 안 건드림
6clip → log(0) 방지p=0, y=1 이어도 finite
개념 노트와 실수 포인트

손실 함수

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