Distributionally Robust Optimization
分布ロバスト最適化は、平均的なデータ分布ではなく、もっともらしい最悪のデータ分布に対応できるようモデルを学習させます。曖昧性集合またはグループDROを用います。
分布ロバスト最適化(DRO)は、学習データの分布だけに基づくのではなく、妥当なデータ分布の集合に含まれる最悪の分布のもとで期待損失を最小化する、学習および意思決定の手法です。経験リスク最小化(ERM)と呼ばれる標準的な学習方法では、将来のデータが学習データに似ていると仮定し、平均損失を最小化します。DROでは、実データが一定の範囲内で異なると想定し、その範囲内で最も難しいケースに対して最適化します。その結果、平均精度を少し犠牲にする代わりに、条件が変化したときの性能が安定します。たとえば、学習時に夜間より昼間の映像を大幅に多く扱ったカメラでの性能が安定します。
曖昧性集合#
DROが対象とする分布の集合は、曖昧性集合または不確実性集合と呼ばれ、その形状によってモデルが獲得するロバスト性の種類が決まります。
- ダイバージェンス球: 学習データからのKLダイバージェンスまたはカイ二乗ダイバージェンスが一定値以内の分布をすべて含みます。これらに対して最適化すると、損失が最も高い学習例の重みが増すため、モデルは最も難しいサンプルを無視できません。関連性の高い目的関数である条件付きバリュー・アット・リスクは、例ごとの損失のうち、最悪の割合に当たるものだけを平均します。
- Wasserstein球: 入力空間内で確率質量を限られた距離だけ移動させることで到達できる分布を含みます。距離は、どれだけの確率質量をどの程度移動させるかを測るため、入力自体への小さな摂動を含む集合になります。
- グループ混合: 昼夜の画像や異なる病院のスキャンなど、既知のサブグループを任意に再重み付けした分布を含みます。この場合、最悪のケースは単純に最も性能の低いグループです。
Wasserstein DROは、近傍の最悪ケース入力に対して最適化する点で、敵対的攻撃への敵対的学習と密接に関係しています。集合の大きさはDROの中心的なハイパーパラメーターです。集合を大きくしすぎると、非現実的なデータに備えることになり、通常の精度が低下します。一方、小さすぎると、実運用で重要な分布変化を捉えられません。
グループDRO#
Shiori Sagawa氏、Pang Wei Koh氏、Tatsunori Hashimoto氏、Percy Liang氏が提案し、2020年に発表されたGroup DROは、深層学習で最も広く使われている形式です。全サンプルの平均損失ではなく、最も性能の低いグループの損失を最小化します。実際には、グループごとの重みをバッチ間で保持し、その時点で損失が最も高いグループの重みを増やして、グループごとの重み付き損失を誤差逆伝播します。
import torch
# Per-image losses from one training batch and the condition each image came from
losses = torch.tensor([0.20, 0.30, 0.25, 0.90, 1.10, 0.15])
groups = torch.tensor([0, 0, 0, 1, 1, 0]) # 0 = daytime, 1 = nighttime
group_losses = torch.stack([losses[groups == g].mean() for g in (0, 1)])
# Empirical risk minimization optimizes the average loss over all images
print(f"ERM loss: {losses.mean():.2f}, daytime loss: {group_losses[0]:.2f}, nighttime loss: {group_losses[1]:.2f}")
# Group DRO shifts its group weights toward high-loss groups with an exponentiated-gradient step
group_weights = torch.tensor([0.5, 0.5]) # carried over from earlier batches
group_weights = group_weights * torch.exp(1.0 * group_losses) # step size 1.0
group_weights = group_weights / group_weights.sum()
dro_loss = (group_weights * group_losses).sum() # the loss that is backpropagated
print(f"Group weights: day {group_weights[0]:.2f}, night {group_weights[1]:.2f}, group DRO loss: {dro_loss:.2f}")平均損失は0.48で良好に見えますが、夜間画像2枚の平均損失は1.00で、昼間画像の0.22を上回っています。1回の更新でグループの重みは昼間が0.50から0.32に、夜間が0.50から0.68に変わります。そのため、誤差逆伝播される損失は0.76に上昇し、その勾配は主に夜間画像から得られます。多数のバッチを処理する間、性能が遅れているグループへ重みが流れ続けます。
Group DROはショートカット学習への直接的な対策です。Waterbirdsベンチマークでは、学習画像のうち水鳥の多くが水辺を背景としているため、標準的な学習では背景を手掛かりとして覚えてしまい、陸上で撮影された水鳥の画像で失敗します。強い正則化を用いることで、著者らはテスト時の最悪グループの精度を、ERMの21.3%からGroup DROの84.6%へ引き上げました。平均精度も95.7%から96.6%に上昇しました。大規模なネットワークはすべてのグループの学習損失をゼロにでき、その場合、DROの目的関数で優先すべき対象がなくなるため、正則化が重要です。
Group DROでは、学習例ごとのグループ情報が必要です。グループが不明な場合は、カイ二乗ダイバージェンス球を代わりに使えます。Tatsunori Hashimoto氏らは2018年に、この球の中で最悪ケースの損失を最小化すれば、誰がそのグループに属するか分からなくても、十分に大きな任意のサブグループを保護できることを示しました。
最悪のグループを見つける#
重要なグループは、多くの場合、誤りの分析から見つかります。保存済みデータセットのバージョンで学習したYOLO26物体検出モデルの場合、Ultralytics Platformは画像ごとの診断機能を提供します。この機能は、画像ごとの検証F1スコアで検証画像を順位付けし、F1と画像サイズ、アスペクト比、インスタンス数の相関を調べ、性能の低い画像によく現れるクラスを一覧表示します。これらを組み合わせると、単一の平均適合率(mAP)を、収集、オーバーサンプリング、または重み付けの候補となるグループに分解できます。
DROはビジョン以外にも幅広く活用されています。
- サブグループ間の公平性: グループが人口統計学的属性で定義される場合、最悪グループの損失を最小化することで、性能差を直接縮小できます。
- 現実世界での分布シフト: スタンフォード大学のWILDSベンチマークでは、異なる病院の組織画像や、異なる地域・年の衛星画像などのシフトに対するモデル性能を検証し、標準的なベースラインの一つとしてGroup DROを含めています。
- オペレーションズリサーチ: DROは、電力網の運用計画、サプライチェーン計画、ポートフォリオ選択に応用されています。こうした意思決定では需要や価格が不確実であり、過去の平均だけに合わせた計画では、異例の年に大きな失敗を招く可能性があります。
DRO、データ拡張、ドリフト監視#
データ拡張とDROは、同じ問題に対して反対側からアプローチします。データ拡張は学習画像に合成的な変化を加えてモデルが見るデータを増やす一方、DROは目的関数を変え、まれでも実際に存在する変化をより重視します。両者は相性がよく、データ拡張が多様な例を提供し、DROの目的関数が最も難しい例を平均化によって埋もれさせないようにします。ドメイン適応は、ラベルなしのデータを使って既知のターゲット分布に適応する、3つ目の方法です。デプロイ後にデータドリフトを監視すれば、どの曖昧性集合も想定していなかったシフトを検出できます。そうした新たな条件は、次に収集して重み付けするグループになります。










