Infの道も a += 1 から
現在、画像処理系のエンジニアとして医療業界に携わっているのですが、データ不均衡な画像をよく扱います。その改善方法の一つを取り上げます。
Focal Tversky Loss
(論文は2018年ごろ発表されました)
二つの特徴に分解できそうです。
- Focal Loss
- Tversky Loss
Focal Tversky Lossを理解するため、まずはこれらについて調べてみます。
Focal Loss
論文参照。(論文の内容と個人的な感想を混ぜて記載していきます。)
概要をざっとまとめます。
極端に小さいラベルと背景の差によるクラス不均衡に注目し、その環境下でも正しく物体検出が行われるよう工夫した。Focal Lossは、学習の焦点が、小さい対象にあてられるよう重みづけされる損失関数である。
まずは従来のデータ不均衡に対処する損失関数を示す。
重み付きクロスエントロピー(Focal Lossの比較対象)
$$CE(p_t) = -\alpha_t \log(p_t) \quad$$
$p_t$: 予測確率(0 ~ 1)
$\log(p_t)$: (-∞ ~ 0)確率が低くモデル的に自信がない予測に対して大きな値を示す。
$\alpha_t$: ハイパラ。計算する対象がラベルの時$\alpha_t = \alpha$, 背景の時$\alpha_t = 1 - \alpha$を用いる。例えば0.8としたとき、損失関数への影響を比較的高い割合で寄与させ、背景は 1 - 0.8 = 0.2 のように低くなる。
しかしこの対策だけでは、ラベルと背景の割合を考えることはできるが、ラベルの予測難易度に関する情報は含まれていない。
Focal Loss
$$FL(p_t) = -(1 - p_t)^\gamma \log(p_t)$$
$(1 - p_t)^\gamma$: 簡単に分類できる(確率が高い)ものは括弧内で小さくなり、かつ指数の影響で0に近づくことで損失への寄与が少なくなる。逆に難しいものは比較的その値の大きさを保つことで損失関数へ影響を与える。
γ: ハイパラ。0とするとCEと同じになる。
これにより、難しい症例と簡単な症例の差をつけることができ、難易度という情報を損失に加えることができた。
Tversky Loss
以下の論文を参照しました。
概要です。
不均衡なデータによる学習は、適合率(Precision)は高いが再現率(Recall)は低くなりやすい。これは、見逃しである偽陰性(陽性なのに陰性と判定)が偽陽性(陰性なのに陽性と判断)よりも高くなるということであり、医療現場において望ましくない。この問題を解決するために、従来いろいろな手法があるけど、私たちはこれらを凌ぐTversky Lossを提案する。
まずは、Dice係数の式を見てみます。
$$D(P, G) = \frac{2|P \cap G|}{|P| + |G|}$$
P: 予測領域 G: 正解領域
予測領域と正解領域の中で、どれだけ重なる領域が広いかを示します。
完全に重なっている時を考えると、分母分子が同値になるので1です。
ですが、この式は偽陽性(FP:誤検出)と偽陰性(FN:見逃し)を等しく扱います。
確かにこの式から偽陽性、偽陰性の情報を見ようとしても難しそうです。
Tversky 指数
$$S(P, G; \alpha, \beta) = \frac{|P \cap G|}{|P \cap G| + \alpha|P \setminus G| + \beta|G \setminus P|}$$
$|P \setminus G|$: FP(偽陽性)
$|G \setminus P|$: FN(偽陰性)
α, βは偽陰性と偽陽性どちらに注目すべきかを伝える重みです。
それぞれを0.5としたとき、Dice係数と同じ式になります。
Dice係数の式を基本とし、より細かく情報を得られるよう拡張した式という見方ができます。
$|P| = |P \cap G| + |P \setminus G|$ (重なり + Pだけにある部分)
$|G| = |P \cap G| + |G \setminus P|$ (重なり + Gだけにある部分)
Pの領域は正解(${|P \cap G|}$)と、本当は背景なのに間違えてラベルと予測してしまった領域($|P \setminus G|$)があります。Gにおいてもほぼ同様。
これらをTversky 指数に代入すると確かにDice係数と同じ式になります。
当論文の中のデータセットに対しては、α, βの組み合わせを0.5:0.5, 0.4:0.6, 0.3:0.7, 0.2:0.8, 0.1:0.9で試した結果、偽陰性を0.7, 偽陽性を0.3と設定するのが良いそうでした。
以下のサイトはこの式を図示しています。私には式をじっと見るよりもこちらの方が分かりやすかったです。
先ほどのTversky 指数の式を数式的に書くと以下になるようです。
$$T(\alpha, \beta) = \frac{\sum_{i=1}^{N} p_{0i}g_{0i}}{\sum_{i=1}^{N} p_{0i}g_{0i} + \alpha \sum_{i=1}^{N} p_{0i}g_{1i} + \beta \sum_{i=1}^{N} p_{1i}g_{0i}} \quad$$
以下はボクセル単位での値です。
$p_{0i}$: ターゲットと予想した確率
$p_{1i}$: 背景と予想した確率
$g_{0i}$: 病変なら1, 背景なら0
$g_{1i}$: 背景なら1, 病変なら0
ソフトマックス層を通って確率に変換された値を用いて計算します。
めっちゃ簡単にまとめると以下のような特徴がありそうです
- Focalは難易度という情報を加えることができる
- Tverskyは偽陰性(または偽陽性)に注目できる
Focal Tversky Loss
以下の論文を参照しました。
概要です!
データ不均衡問題をさらに解決できるよう、Focal Tversky Lossを提案する。
また、文脈的特徴を保持するための画像ピラミッドを組み込むことAttention U-Netモデルを改良し、既報よりも高いセグメンテーション精度を示した。
だそうです。本記事は損失関数にのみ注目します。
$$FTL_c = \sum_{c} (1 - TI_c)^{1/\gamma}$$
$TI_c$ : Tversky指数
例えば偽陰性(見逃し)を抑えたい事を目的とすると、$TI_c$で偽陰性に対する重みを増加させ、さらに指数による計算を加えることで小さい値がさらに小さくなります。
α, βを0.5。γを1とするとDice係数と同じ式になります。
私なりの結論
つまり、$TI_c$が1に近い値(簡単な症例)は括弧内で小さい値になります。
それが指数の影響でさらに小さくなります。逆に難しい対象は括弧内で0.5に近くなり、指数による影響も比較的小さいです。この差が、難しいものをより注目しようというFocal Lossの特徴を用いています。
その難しいものは何かと決めるために、α、βという重みがTversky指数内にあります。偽陰性と偽陽性、どちらを注目したいか(難しいとするか)を定めることができます。
以上です。お疲れ様でした。 訂正・改善・感想等ありましたらコメント頂けますと幸いです。