こしあん
2022-11-24

論文まとめ:Extremely Simple Activation Shaping for Out-of-Distribution Detection


1.1k{icon} {views}

ざっくりいうと

  • ニューラルネットワークの学習データについて、分布内(ID)か、分布外(OOD)かを見分ける研究
  • 訓練済みネットワークのロジットの直前の値を使い、上位○%をマスクし、エネルギースコアを計算する
  • 非常に単純な仕組みながらSoTAの性能を達成

忙しい人向け

これでOODの検知ができる

OOD検知の流れ

  1. モデル(例:分類器)を訓練する。ここで学習したデータをin-distributionID)とする。
  2. モデルの係数を固定
  3. 推論時にout-of-distributionOOD)のデータを与える。
  4. モデルに与えられたデータがIDかOODかを区別するために、モデルの出力からスコアを出す検出器を作る
  5. OOD検知の性能を様々な指標で評価

スコアってどう出すの?

負のエネルギースコア(negative energy score)を求める。

分類モデルのロジットを使うだけで、OOD検知の部分で新たに訓練はしない。

ASH

ASHではASH-P、ASH-B、ASH-Sという3手法を検証。

  1. (共通)活性化関数の値の大部分を除去する。具体的には、表現全体(Global Abverage Poolingの値)のTop-p%にあたるしきい値tを求め、しきい値以下の部分を0で埋める
  2. 3つのアルゴリズムからなる
    1. ASH-P:何もしない。PruningのPで、「Pruning is all we need」
    2. ASH-B:しきい値以上の部分に定数値を埋める。BinaryのB
    3. ASH-S:しきい値で除去した割合に応じて、しきい値以上の値に定数倍をかける。ScaleのS

定量評価

SoTAだった。ASH-Pは悪い。

ID(in-distribution)の精度とpの関係

結局ASH-Sが一番安定する。削りすぎるとIDの精度が悪くなる

Energy Scoreとpの関係

pの値を大きくして削らないと、Energy ScoreのID/OODの差が小さくなる。ある程度削ったほうがROCは高くなる(=ヒストグラムでのIoUが小さくなる)

どこでASHをとるか?

IDの精度ベースで、Global Average Poolingの直前(4th)が良い。ネットワークの前の値を使うと明確に悪くなるので、セマンティックな空間で取るのが重要。

一方でID/OODのROCを見ると、Global Average Poolingのあとのほうが若干良い。

感想

  • 非常に単純ながら強力な性能で素晴らしい
  • OOD検知という点だけでなくいろんな応用ができそう
  • 画像以外でも応用できるかも?


Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です