深層学習におけるOverconfidence という問題

##Overconfidenceって？
　Overconfidenceとは、分類タスクにおいてモデルの予測が正しくないにもかかわらず、大きな値を出力してしまう問題である。これはモデルの出力がそのまま確率的な意味として捉えることはできないことを意味している。例えば、犬と猫を分類するタスクを考える。犬の確率が0.9で猫の確率が0.1であるとモデルが予測をした場合に、入力が90%の確率で犬であるとは言えないという問題である。
　分類モデルの実世界での応用を考えると、単にモデルが正しい予測をするだけでなく、どんなときに予測を誤ってしまうかを予測することは重要であるが、C.Guoらの研究[1]によると、深層学習のモデルは上記の問題があるとし、出力の値を確率的な意味として考えることはできないとしている。その根拠としてResNet110にCIFAR-100を学習させた実験を下に示す。
              　　　　　<img width="432" alt="IMG_3154.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184688/4c81de38-1b67-6066-c3bc-76797fcaa853.jpeg">

左の結果はLeNet、右がResNetの結果である。上の図は最終出力の最大値(以下信頼度と呼ぶ)のヒストグラムを表している。ResNetの精度がおよそ70%程度であるにもかかわらず信頼度の多くが0.9以上に分布していることが分かる。下の図は例えば一番右の軸は、信頼度が0.9~1.0であるテストデータを集めたときに、実際にどれくらい正解しているのかを表している。本来信頼度が0.9~1.0であるならば精度は0.9~1.0になることが期待されるが（赤色の斜線が理想的な状態）、実際の精度は0.8程度（青軸）になっていることがわかる。この実験からわかるように、モデルの出力はそのまま確率的な意味として捉えることができないとしている。

##Temperature Scalingという較正手法
Overconfidenceという問題があるならば、その出力をうまく較正することができればいいと考えるのは自然である。そこで、[1]では様々な較正手法のうち、どれが最も良いのかについて実験を行なっている。その結果Temperature Scacling[2]と呼ばれる方法が最もシンプルかつ効果的であると結論づけている。Temperature Scalingとは、Softmax関数の入力をT(>0)で割る手法のことである。Softmax関数の入力を$z$(以下ロジットと呼ぶ)とすると、Nクラス分類の信頼度$p$は次のように得られる。
$$ p =  \max_{k}\frac{exp({z_{k}/T})}{\sum_{i=1}^{N}exp({z_{i}}/T)}$$

どんなT割れば良いのかについては、データごとに調整する必要があり、何を目安に調整したら良いのかについては後述するが、たったこれだけで信頼度の較正ができるのは魅力的である。

###ちなみに、Temperature Scalingの性質
1. 予測クラスは変わらない
2. T=1ならば通常のSoftmax関数と同じ
3. Tを大きくしていくと、全てのクラスの予測は同じ値に近づいていく

証明は簡単なので省略する。

##どんなTで割ったら良いのか
目標は、信頼度がそのまま確率的な意味として解釈できるようにすることである。上記の例で言えば、信頼度が0.9~1.0である犬のテストデータを集めた際に、実際の精度が0.9~1.0程度になることであり、他の区間についても同様になることである。[1]では、各手法の較正効果を比較するためにECEと呼ばれる評価指標を導入している。これは上記の例を数式に置き換えただけであり、理解するのは難しくない。
　まず、$B_m$を信頼度が$I_m=(\frac{m-1}{M},\frac{m}{M}]$に含まれるインデックスの集合と定義する。つまり、信頼度が$I_m$に含まれているようなテストデータをかき集めたものが$B_m$ということである。ここで、Mとは0~1をどれだけのグループに分けるかを意味しており、この論文ではM=15で評価している。次に精度accを次のように定義している。
$$acc(B_m)=\frac{1}{|B_m|}\sum_{i\in B_m}1(\hat{y_i}=y_i)$$
これはかき集めたデータの精度を計算している。ここで、$\hat{y_i}$とはデータ$i$の予測クラスであり、$y_i$とは正解ラベルである。また$1(\hat{y_i}=y_i)$とは、正解していれば1を、不正解ならば0を返す関数である。
　次に信頼度confを定義する。
$$conf(B_m)=\frac{1}{|B_m|}\sum_{i\in B_m}\hat{p_i}$$
ここで$\hat{p_i}$とは、データ$i$の信頼度である。
　各区間の精度と信頼度が定義できた。この二つが一致することが理想的な状態なので、その状態を定量化するために次のECEを定義している。
$$ECE=\sum_{m=1}^{M}\frac{|B_m|}{n}\left|acc(B_m)-conf(B_m)\right|$$
ここでnとはテストデータの数である。前述の通り、精度と信頼度が一致することが理想的なのでECEは小さければ小さいほどよく、出力が確率的な意味として解釈することができる。従って、このECEが最も小さくなるようなTを選べば良いことがわかる。

##実験結果
　このECEを使った実験結果を下に示す。
<img width="834" alt="IMG_3155.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184688/8eb00cc6-6c7b-ce7d-452f-a2074470712b.jpeg">

左から二番目がTemperature Scalingの結果であり、他の手法に比べECEが小さくなっていることがわかる。

##まとめ
分類タスクにおいてOverconfidenceと呼ばれる問題があるものの、Temperature Scalingによってうまく較正することによって改善させることができることがわかった。Temperature Scalingに関して言えば、単にそのような効果があるだけでなく学習したデータとは異なるデータが入力された場合に弾けるとする論文[3]もあり、シンプルながらその効果は大きく個人的にはかなり有望視している。


##参考文献
[1] Y. Sun Q．Weinberger C. Guo, G. Pleiss. On Calibration of Modern Neural Net-works. In Proceedings of International Conference on Learning Representations,2017.
[2] G. Hinton, O. Vinyals, J. Dean Distilling the Knowledge in a Neural Network. arXiv preprint arXiv:1503.02531,2015.
[3] R. Srikant S. Liang, L. Yixuan.Enhancing The Reliability of Out-of-distribution Image Detection in Neural Networks. In Proceedings of International Conferenceon Learning Representations, 2018.