深層学習

特殊な分類損失

標準の交差エントロピーでは学習が偏る場面で、例の難しさやラベルの確信度を調整する損失を使い分けます。

  • C|周辺
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

特殊な分類損失は、標準の交差エントロピーでは学習が偏る場面で、例の難しさやラベルの確信度を補正する選択肢です。

易しい小問を大量に採点すると難問の結果が埋もれます。易しい例を軽くし、難例や少数クラスへ学習の目を向けます。

なぜ必要か

極端な不均衡では、容易な負例が多数あるため損失がそれらに埋もれます。Focal Lossは容易な例の損失を下げます。

少数クラスの汎化にはクラス分布に応じたマージンを入れるLDAM、過信の抑制にはone-hot教師を一様分布との重みに置き換えるLabel Smoothingがあります。

損失を変えれば不均衡が自動的に解決するわけではありません。少数クラスを重視するのか、容易な例を軽くするのかを先に切り分けます。

仕組み

正解クラスの予測確率を ptp_t、集中度を決める γ\gamma とすると、Focal Lossは次です。

FL⁡(pt)=−(1−pt)γlog⁡(pt)\operatorname{FL}(p_t)=-(1-p_t)^\gamma\log(p_t)

ptp_t は正解クラスの確率、γ\gamma は非負の値です。ptp_t が大きい例ほど係数が小さくなります。

Label Smoothingでは、クラス数を KK、平滑化率を ε\varepsilon、one-hotラベルを yky_k として、教師値を次のように変えます。

y~k=(1−ε)yk+εK\tilde{y}_k=(1-\varepsilon)y_k+\frac{\varepsilon}{K}

正解を確率1と固定しないため、過信を抑え、予測の較正を改善する方向に働きます。LDAMはラベル分布を見たクラス依存のマージンを組み込みます。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
Focal Lossの係数易しい例ほど損失の重みが下がる難しい例を除外する、と断定する
Label Smoothingの効果過信を抑え、較正を改善する少数クラスだけを再重み付けする
損失の選択不均衡・難例集中・過信抑制で目的を分けるどの不均衡にも同じ損失を使う

実装で確かめる

確率が高い例ほどFocal Lossの係数が小さくなることだけをNumPyで確認します。

import numpy as np
p_t = np.array([0.99, 0.6, 0.1])
gamma = 2.0
focal = -(1 - p_t) ** gamma * np.log(p_t)
print(np.round(focal, 6))

取り違えやすいもの

手法主に調整するもの使う判断
Focal Loss例ごとの損失寄与易しい負例が多すぎる
LDAMクラス分布に応じたマージン少数クラスの汎化を重視する
Label Smoothing教師ラベルの確信度予測の過信や較正を扱う
クラス再重み付けクラスごとの損失係数不均衡を重みで補正する

想起チェック

Focal Lossは何の寄与を下げるか

正しく分類できた容易な例、特に大量の容易な負例の損失への寄与です。難しい例を学習対象から削除する手法ではありません。

出典