SABI: 불확실성과 클래스 불균형을 함께 보는 미니배치 샘플링
2026-11-09
이 글은 Applied Sciences 16(11), 2026에 실린 논문 "SABI: Self-Adaptive Bias for Imbalanced Data Classification" (Suchan Choi, Jinyoung Oh, Jeong-Won Cha)을 소개합니다.
왜 이 연구를 했나
클래스마다 개수가 크게 다른 데이터로 학습하면, 모델이 많은 클래스 쪽으로 기울고 드문 클래스를 잘 맞히지 못합니다.
흔한 해결책은 Oversampling입니다. 드문 클래스의 샘플을 반복해서 더 넣어 개수를 맞추는 방법입니다. 하지만 이 방법은 샘플 하나하나가 학습에 얼마나 도움이 되는지는 따지지 않습니다. 그래서 별 도움이 안 되는 샘플을 계속 뽑을 수 있습니다.
반대로 우리 연구실의 이전 방법인 SAB는 "불확실한" 샘플을 우선 뽑습니다. 그런데 SAB는 클래스 분포를 직접 보지 않습니다. 많은 클래스는 샘플 수 자체가 많아서, 불확실한 샘플도 많이 나옵니다. 그 결과 long-tail 데이터에서는 여전히 많은 클래스가 미니배치를 차지할 수 있습니다.
핵심 아이디어
SABI는 두 가지 신호를 섞어서 각 샘플이 뽑힐 확률을 정합니다.
- 샘플 단위 불확실성 (SAB에서 가져옴): 각 샘플에 대해 최근 q번의 예측 라벨을 기록합니다. 이 중 정답과 다르게 예측한 경우만 모아 normalized entropy를 계산합니다. 예측이 자주 틀리거나 흔들리는 샘플일수록 점수가 높고, 더 자주 뽑힙니다. 이것이 P_SAB입니다.
- 클래스 단위 불균형 보정: 샘플이 속한 클래스의 크기에 반비례하는 확률 P_imb를 둡니다. 드문 클래스의 샘플일수록 값이 커집니다.
두 확률은 Gini coefficient G로 섞습니다.
P_SABI = (1 − G) · P_SAB + G · P_imb
G는 클래스 개수 차이로 계산한 불균형 지표입니다. 0에 가까우면 균형, 클수록 불균형입니다. 데이터가 균형이면 G ≈ 0이라 SABI는 SAB와 거의 같습니다. 불균형이 심하면 드문 클래스 쪽 보정이 커집니다. 이 설계는 credal set 이론에서 아이디어를 얻었지만, 완전한 credal 분류기가 아니라 실용적인 샘플링 방법입니다.
그 밖에 SAB의 adaptive warming-up과 adaptive selection pressure를 그대로 씁니다. G는 학습 전에 한 번만 계산합니다.
실험 설정
- 데이터: 텍스트 11개(AG News, Biomedical, Google S/T/TS, IMDB, PAN 19-1/19-5, Query Wellformedness, SST2, 20News)와 이미지 8개(CIFAR-10, CIFAR-100과 각각의 LT 10/50/100 버전). Google 데이터셋(G = 0.508)과 CIFAR LT 버전이 long-tail 분포입니다.
- 모델: 텍스트는 bert-base-uncased, 이미지는 BEIT.
- 비교 방법: Baseline, Active Bias, Recency Bias, Oversample, SAB.
- 설정: learning rate 1×10⁻⁵, Adam, early stopping(5회), 이미지는 224×224. 시드 5개(40–44)의 평균을 보고했습니다.
- 평가 지표: accuracy, macro F1. paired t-test로 p < 0.05인지 확인했습니다.
결과
아래 표는 논문 표에서 long-tail 데이터 위주로 일부 행만 옮긴 것입니다(표준편차 생략). 괄호 안은 Gini coefficient, 굵은 글씨는 최고 성능, *는 두 번째 방법 대비 통계적으로 유의(p < 0.05)함을 뜻합니다.
텍스트 데이터셋 (일부)
| Dataset (Gini) | Metric | Baseline | Active Bias | Recency Bias | Oversample | SAB | SABI |
|---|---|---|---|---|---|---|---|
| GoogleS (0.508) | Acc | 91.25 | 91.44 | 92.12 | 92.56 | 92.40 | 92.68 |
| GoogleS (0.508) | Macro F1 | 89.22 | 89.30 | 89.64 | 90.44 | 89.89 | 90.29 |
| GoogleTS (0.508) | Acc | 96.24 | 96.18 | 95.38 | 96.41 | 96.12 | 96.52* |
| GoogleTS (0.508) | Macro F1 | 93.92 | 94.10 | 94.17 | 94.44 | 94.26 | 94.51* |
| 20News (0.04) | Acc | 84.48 | 84.26 | 84.92 | 84.40 | 85.22 | 85.88* |
| 20News (0.04) | Macro F1 | 83.81 | 84.35 | 83.65 | 84.24 | 84.53 | 85.14* |
이미지 데이터셋 (일부)
| Dataset (Gini) | Metric | Baseline | Active Bias | Recency Bias | Oversample | SAB | SABI |
|---|---|---|---|---|---|---|---|
| CIFAR-10 LT 100 (0.612) | Acc | 83.32 | 79.22 | 83.76 | 85.59 | 84.50 | 85.78* |
| CIFAR-10 LT 100 (0.612) | Macro F1 | 83.16 | 79.03 | 83.69 | 85.44 | 83.34 | 85.61* |
| CIFAR-100 LT 10 (0.35) | Acc | 63.96 | 64.52 | 64.91 | 67.11 | 67.32 | 67.49* |
| CIFAR-100 LT 10 (0.35) | Macro F1 | 62.68 | 63.31 | 63.83 | 66.71 | 66.81 | 67.05* |
| CIFAR-100 LT 100 (0.591) | Acc | 44.71 | 45.67 | 44.52 | 50.33 | 49.80 | 50.09 |
| CIFAR-100 LT 100 (0.591) | Macro F1 | 38.23 | 39.58 | 39.62 | 47.10 | 43.09 | 46.53 |
평균으로 보면 SABI는 SAB보다 accuracy 0.22%, macro F1 0.75% 높았습니다. Oversampling보다는 각각 0.98%, 0.17% 높았습니다. Oversampling은 불균형이 심한 일부 데이터에서는 강하지만, 균형에 가까운 데이터에서는 SABI보다 낮았습니다.
GoogleTS를 Head/Body/Tail(30/92/30 라벨)로 나눠 macro F1을 보면, SABI는 Head(0.9959)와 Body(0.9402)에서 가장 높았습니다. Tail은 Oversampling(0.7563)이 가장 높았지만, SABI(0.7516)는 SAB(0.7200)보다 크게 올라 Oversampling에 가까워졌습니다. 즉 드문 클래스를 챙기면서도 많은 클래스의 성능을 잃지 않았습니다.
비용도 작습니다. 메모리는 4165.77 MB로 baseline(4157.88 MB) 대비 0.19% 늘었습니다. 샘플링에 78.5초가 더 들지만, 순수 학습 시간은 233.4초로 baseline(242.2초)보다 3.6% 짧았습니다.
한계와 다음 단계
- SABI가 모든 경우에 가장 좋은 것은 아닙니다. 불균형이 매우 심한 일부 데이터(예: CIFAR-100 LT 100, Google S/T의 macro F1)에서는 드문 클래스를 강하게 밀어주는 Oversampling이 더 높았습니다. 논문은 SABI의 장점을 "모든 기준을 이기는 것"이 아니라 "여러 분포에서 균형 잡힌 성능"으로 설명합니다.
- 샘플링 시간 때문에 전체 wall-clock 시간(311.9초)은 baseline(242.2초)보다 조금 깁니다.
- 앞으로는 라벨 사이에 의존성이 있고 불균형이 더 심한 multi-label classification으로 확장할 계획입니다.
