himkt / survey

3 stars 0 forks source link

[Reading] Long-Tail Learning via Logit Adjustment #59

Open himkt opened 3 years ago

himkt commented 3 years ago

理論的な枠組みはちゃんと追えていないので表層的な部分だけ.ラベルが不均衡な場合の多いクラス分類において,モデルの logit もしくはロスの補正によってモデルのパフォーマンスを上げるテクニックの導入.

Post-hoc (logit) 補正

正であるハイパーパラメータ \tau とクラス分布の統計量 \pi を用いて以下のような補正をする.

スクリーンショット 2021-05-06 1 09 38

Ad-hoc (loss) 補正

Post-hoc と同じパラメータを用いて以下のようにクロスエントロピーを補正する.

スクリーンショット 2021-05-06 1 14 21

post-hoc な補正と ad-hoc な補正には密接な関係がある. ad-hoc はもとのモデルを f_y(x) としたときに g_y(x) = f_y(x) + \tau \cdot \log \pi というモデルを学習しているのと等価である.ロス関数が凸な場合には等価で非凸な場合はバイアスが導入されて実際には等価ではない.(= ニューラルネットの学習時はおおよそ等価ではない)

実験

スクリーンショット 2021-05-06 1 20 10

人工的に生成したデータの上で実験をしたところ, weight normalization と比較して提案手法を用いて補正されたモデル(or モデルの logit)を採用した場合に性能の向上が見られた.post-hoc な補正については \tau を 1 とした場合について,同じ設定の weight normalization よりも良い性能となっている(が,やはりデータセットの上で \tau を最適化する必要がありそうな気もする結果).一方で ad-hoc な補正については \tau を 1 とした場合でも \tau を最適化した weight normalization よりも性能が良くなっている.


実装が簡単なので手元で試してみようと思う.ロス関数に補正を加える手法は無意識にお世話になっている(sklearn の class_weight="balanced" とか)ので,これを期にどういう枠組みが存在しているのか・今自分はどういう補正を利用しているのかを調べてみようかなと思った.