Survey : Long-Tailed Classification by Keeping the Good and Removing the Bad Momentum Causal Effect
Tags: datascience, machinelearning
Published: 2022-05-30 08:15:08

## 選定理由

Alibabaグループが大好きな(Computer Visionの)Causal Machine Learning、Nanyang大学との共同研究、NIPS2020。この分野のサーベイ論文はこちら: [[Liu2022](https://arxiv.org/abs/2204.12037)]

Paper: https://proceedings.neurips.cc/paper/2020/hash/1091660f3dff84fd648efe31391c5524-Abstract.html

Code: https://github.com/KaihuaTang/Long-Tailed-Recognition.pytorch

Slides: https://github.com/KaihuaTang/Long-Tailed-Recognition.pytorch/blob/master/NeurIPS%202020%20Presentation%20-%20Full%20(1hr).pptx

https://github.com/KaihuaTang/Long-Tailed-Recognition.pytorch/blob/master/NeurIPS%202020%20Presentation%20-%20Short%20(5min).pptx

## 概要

[ビジネス課題]現実世界のデータはロングテール(クラス間不均衡)であることが一般的である。特に対象となるクラス数が多い場合は、１サンプルに多くのクラスが入り込むため、どんなに収集コストを上げても必ずロングテールとならざるを得ない(Zipf’s lawと呼ばれる)。
[技術課題]ロングテールなデータセットでの学習時の確率的勾配降下法の[モメンタム](https://watlab-blog.com/2020/03/01/gd-momentum/)(M)は交絡因子となりうる。少数派クラス(tail class)を学習する際も多数派クラス(head class)に対して学習した特徴表現(D)への射影はモメンタムの影響を受けたバックドアパスによる学習になってしまう。(以下図)

![causal graph](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bnbrt7b8y5duny2s68ok.png)
 
[従来]weighting/re-samplingを用いた学習時バイアス(背景の学習)の低減があるが、これらは根本的解決でなく多数派クラスにアンダーフィットし、少数派クラスにオーバーフィットする。結果、tail classはhead classに誤分類されやすい。又、クラス頻度が既知であるという前提はオンライン学習を困難にしてしまう。
[提案]学習時はバックドア基準による因果効果推定を行うことで(確率的勾配降下法の)モメンタムによる交絡因子(M)を排除し、一方で中間変数(D)によってクラス間の共起性を捉える効果は残しながら学習を行う。さらに推論時は直接効果を反事実の枠組みで計算する。
[効果] Long-tailed CIFAR-10/-100, ImageNet-LT などのロングテールな画像分類データセットでSOTA。又、セグメンテーションと物体検出タスク向けのLVIS にてSOTAの性能となった。

モメンタムの導入は[HMC](https://qiita.com/hiro5585/items/f50df506b208d37cdd7d)(ハミルトニアンモンテカルロ法)に近い概念に感じる。

## De-confounded学習とTDE推論

### 学習時：　De-confounded Training

![fig.3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xv056jxq1dv6kdl410lc.png)

モメンタムの交絡を排除するためにMからXへの依存を介入操作により除外する(上図左)。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b5mxfoox7ebtghyq24mr.png)

上記式のようにdoオペレータはバックドア基準による調整化公式により展開する。ここで確率的勾配降下法のモメンタムの数はほぼ無限であり、上記式も計算困難である。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lz6wtdjlrk90v20rkzls.png)

そこで調整化公式適用後は[逆確率重みづけの式](https://ja.wikipedia.org/wiki/%E9%80%86%E7%A2%BA%E7%8E%87%E9%87%8D%E3%81%BF%E4%BB%98%E3%81%91)により近似可能であり、モメンタムを排除できる。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mq0ti1h3ywbragjxehap.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9vord6ksgh0mknvliukm.png)

逆確率重みづけの式はエネルギーモデルに定式化することができ、最終的に因果効果はソフトマックスの出力から計算可能である。

### 推論時：　TDE Inference

![eq.2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kejy2qy276eezbpigxbf.png)

[Pearl2001]にて定義されている総合直接効果(TDE: Total Direct Effect)を最大にするクラスを推論結果とする。ここで x0 はヌル入力である。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7hgc00ak5p0v1jgr0pc.png) 

実際には上記式に展開される。αは直接効果と間接効果のバランスを調整するハイパーパラメータである。

## 実験

データセットは画像分類タスク向けに Long-tailed CIFAR-10/-100, ImageNet-LT、物体検出とセグメンテーション向けに LVIS を使用した。

![exp result](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o48i939criiq3xzuthy4.png)
 
様々な線形、非線形の分類モデルと比較した。De-confounded学習とTDE推論両方を組み合わせると多くの場合で性能が改善した。


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gf2qzyvzljf79o0khipg.png)

ImageNet-LTデータセットでの実験結果。few-shotでの改善効果が大きい。

![visualize result](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8v8s651632x55tp2r68x.png)

GradCAMにて可視化を行うと、提案手法はbaselineよりもクラス特有の領域が可視化されている。例えばdressはheadクラス、kimonoはtailクラスであり、baselineのkimonoの識別時にはheadクラスのdressの表現特徴に交絡してしまっているが、提案手法では着物の箇所のみ励起している。

## 実装

以下クラスにて実装されている。

https://github.com/KaihuaTang/Long-Tailed-Recognition.pytorch/blob/master/lvis1.0/mmdet/models/roi_heads/bbox_heads/convfc_bbox_head.py

BBoxHeadがmmdetが提供しているクラスで、ConvFCBBoxHeadに因果推論のロジックが実装されている。実際に使用されているのはパラメータ限定版がShared2FCBBoxHead、Shared4Conv1FCBBoxHeadで[configで使用されている例](https://github.com/KaihuaTang/Long-Tailed-Recognition.pytorch/blob/master/lvis1.0/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws-all_2x_coco.py)のように後者の方が使われている。

ConvFCBBoxHead内のhead部のforward計算に教師ラベルが前景か背景かが必要になる。よって以下のようにbbox_targetsをforwardに渡してあげる必要がある。
https://github.com/KaihuaTang/Long-Tailed-Recognition.pytorch/blob/master/lvis1.0/mmdet/models/roi_heads/htc_roi_head.py#L106