均衡データで学習したモデルを不均衡データに適応させるFine-tuning手法
均衡データ(各クラス同数)で学習したモデルを、不均衡データ(自然分布)で評価すると精度が大幅に低下する。
# 実験用ディレクトリ作成
mkdir -p finetune_experiments/{baseline,sampler,ldam,head_only,temperature_scaling}
効果: 低い(決定境界は変わらない)
singularity exec --nv $SIF python3 finetune_experiments/temperature_scaling/temperature_scaling.py
効果: 中程度(バッチ均衡化のみ)
python3 finetune_multiclass.py --use_sampler
効果: 高い(決定境界を補正)
# margin = C / n_j^(1/4) で少数クラスほど大きなマージン
class LDAMLoss(nn.Module):
def __init__(self, cls_num_list, max_m=0.5, s=30):
m_list = 1.0 / np.power(np.array(cls_num_list), 0.25)
self.m_list = m_list * (max_m / np.max(m_list))
効果: 高い(特徴保持+境界調整)
# Backbone凍結、Headのみ学習
model.freeze_backbone()
optimizer = optim.AdamW(model.head.parameters(), lr=1e-4)
各戦略の結果は以下に保存:
predictions.csv: 予測結果results.json: Accuracy, QWK, Confusion Matrixconfusion_matrix.png: 可視化