
Binary α-balanced Focal Loss [medium]
v1 Focal (softmax) 는 다중 클래스 버전. 실무 객체 탐지 (RetinaNet) 에서 더 자주 쓰이는 것은 binary (sigmoid) 형태 — 각 anchor 에 대해 양성/음성 이진 예측에 적용.
공식
p=σ(z), y∈{0,1} 일 때:
pt={p1−py=1y=0,αt={α1−αy=1y=0
Lfocal=−αt(1−pt)γlogpt
- γ (focusing): 쉬운 음성 (p_t ≈ 1) 의 기여를 γ 승으로 감쇠.
- α (balancing): 양성이 희귀할 때 α<0.5 로 양성/음성 균형.
- 전형값: γ=2,α=0.25 (RetinaNet 논문).
수치적 안정성
- p=σ(z) 직접 계산 후 log 하면 큰 ∣z∣ 에서 underflow →
log p, log(1-p) 를 logsigmoid 로 계산:
- logσ(z)=−softplus(−z)
- log(1−σ(z))=−softplus(z)
softplus(x) = log(1 + exp(x)), 안정 구현: max(0, x) + log(1 + exp(-|x|)).
과제
함수 binary_focal_loss(logits, y_true, alpha=0.25, gamma=2.0) 를 완성하세요.
logits shape (N,), y_true shape (N,) with 0/1.
- 반환: Python
float (배치 평균).
- 극단 logit (∣z∣>100) 에서
NaN/inf 없이.
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | γ=0, α=0.5 → 일반 BCE (scale 1/2) | |
| 2 | 완벽 예측 → 0 | |
| 3 | γ 증가 → 쉬운 예제 loss 감소 | |
| 4 | α < 0.5: 양성 loss 비중 낮음 | |
| 5 | 큰 logit ( | z |
| 6 | torchvision.ops.sigmoid_focal_loss 일치 (있으면) | |
| 7 | per-sample loss 비음수 | |