Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2023-NIPS-Active Negative Loss Functions for Learning with Noisy Labels

https://nips.cc/virtual/2023/poster/71501

Introduction

先行研究はこちら

📄Arrow icon of a page link2017-AAAIAI-Robust Loss Functions under Label Noise for Deep Neural Networks.

📄Arrow icon of a page link2020-ICML-[APL]Normalized Loss Functions for Deep Learning with Noisy Labels

クラスkkに対して、与えられる正解の分布はq(kx)q(k|x)であり、識別器の予測分布はf(x)p(kx)f(x) \to p(k|x)である。

いろんな損失関数をNoisy Labelの場合で試して検証してみた。

Image in a image block

また、損失関数を以下のようにNormalizeするとNoisy Labelに強くなる。すべてのクラスについての損失の和が1になるように正規化する

理由としては、不明。極端な値をとる場合はほかの項も極端な値をとっているので、結果的に釣り合う?

Lnorm=L(f(x),y)kKL(f(x),y)L_{norm} = \frac{L(f(\mathbf{x}), y)}{\sum_{k}^K L(f(\mathbf{x}), y)}

ただ、これではUnderfittingの問題があるという。例えば、

損失関数の2種類

損失関数にはActiveとPassiveがある。

  • Active Pr(yx)Pr(y|\mathbf{x})(所属するクラスの確率)を最大化する。
    • 例えば、Cross Entropy、Focal Loss、Normalized CE/FL
    • 具体的に言うと、正解クラスyy以外のクラスkkが正解だったら、と擬して損失を考えないつまりl(f(x),k)=0l(f(x),k)=0
      • 実際Cross Entropy損失では以下のようになる。ラベルはone-hotならば、q(yx)=1,q(kx)=0q(y|x)=1, q(k|x)=0であるので、以下のようになる
      l(f(x),k)=q(kx)logp(kx)L(f(x),y)=k=1Kl(f(x),k)k,ky,q(kx)=0l(f(x),k)= -q(k|x) \log p(k|x) \\ L(f(x),y)=- \sum_{k=1}^K l(f(x),k) \\ \forall k, k \neq y, q(k|x)=0
  • Passive Pr(kyx)Pr(k \neq y | \mathbf{x})をすべてのkkについて最小化する
    • 例えば、MAE, Reverse Cross Entropy, Normalized MAE/RCE
    • 具体的に言うと、正解クラスyy以外のクラスkkについても、と擬して損失を考えるつまりl(f(x),k)0l(f(x),k)\neq0
      • MAEは以下のようになる。
      l(f(x),k)=p(kx)q(kx)2k,ky,p(kx)q(kx)0l(f(x),k) = |p(k|x) - q(k|x)|^2 \\ \exist k, k \neq y, |p(k|x) - q(k|x)| \neq 0

Active Passive Loss(APL)

先行研究で提案したように、Active LossとPassive Lossを組み合わせたもの。これにより、Underfittingが抑制されるらしい。謎…?

LAPL=αLactive+βLpassiveL_{APL} = \alpha L_{active} + \beta L_{passive}

Passive Loss実はすべてMAEと同族

MAE, RCE, NMAE, NRCEの4種類があるが、RCEも以下のように、与えられるのはHard Label出ることから、MAEになる。

Image in a image block

なので、新しいPassive Loss Functionの開発を考えたい。

提案手法 Active Negative Loss Function

Method

既存の手法では達成できないようなMinimizingができる、Passive Lossである、Noisy Labelに強いの3要件を兼ね備えたものにしたい。それぞれ

  • 達成できないような最小化=Complementary Label Learning
    • 正解のラベル以外が与えられる感じ。
  • Passive Loss=垂直フリップ
    • 単純に以下のようにある定数AAを使って、最適化を最大化から最小化にしていること。
    Image in a image block
    • Passive Lossの具体例として、Hard Labelに対するCross Entropy LossはLCE(f(x),y)=logp(yx)L_{CE}(f(x),y)=-\log p(y|x)である。これに対して、ALCE(f(x),y)=A+logp(yx)A - L_{CE}(f(x),y)=A + \log p(y|x)を考える。
      • p(yx)p(y|x)が大きくなると、元の損失関数は小さくなるが、符号をひっくり返したVertical Flippedした損失は大きくなる
      • 損失関数を最小化したい、という大枠の目的は変わらないので、「もともとの損失でのp(yx)p(y|x)の最大化」を「Flipした損失でのp(yx)p(y|x)の最小化」にすることができる。これ自体がPassive Lossの非該当クラスの要件を満たす。
  • Noisy Labelに強い=正規化 これは 📄Arrow icon of a page link2020-ICML-[APL]Normalized Loss Functions for Deep Learning with Noisy Labels にあるように。

で実現している。

これらを踏まえてまず、Negative Loss Functionを提案する。

Vertical Flipを使うことで、任意のPositiveの関数をk,ky,p(kx)\forall k, k \neq y, p(k|x)の最小化の目的関数にできるので、できるだけクラスkkに合致しないようにするためAL(f(x),k)A - L(f(\mathbf{x}),k)を最小化するNegative Loss Functionを考える。

各クラスkkについては、より与えられたラベルの中であり得ないようなクラスほど(つまり1q(kx)1-q(k|\mathbf{x})が重み)、合致しないようにするNegative Loss Functionの項を重くする。これによって、あり得ない度が高いほど、うまくAL(f(x),k)A-L(f(\mathbf{x}),k)を最小化していくインセンティブが生まれる。

Image in a image block

この時、log0=\log 0=\inftyになるみたいなことが起きるので、最も低い予測確率でも1×1071 \times 10^{-7}としている。うまいこと上限をcaptionする必要がある!

あとはこれを正規化すればよい。クロスエントロピー損失である場合の実例も示す。

Image in a image block

Active Negative Lossへの組み合わせ

これもActive Passive Lossに倣い、Active Negative Lossというのを考える。Negativeは補ラベルを使って考えたから

Image in a image block

前は正規化されたActive Loss。後ろは正規化されたNegative Loss(補ラベルベースの)。

このように考えた正規化されたNegative Lossも、対称である。以下の証明では、全クラスに対しての損失の和を加算したっけか定数となるので、これは対称的な損失であると示せた

Image in a image block

そして対称的な損失は、Noisy Labelに強い。

微分した際の勾配

デフォルトの唯一のPassive LossだったMAEでは、微分した際は以下のようになる。

Image in a image block

正規化されたNegative Lossの一例である、Cross Entropy LossのGradientは以下のようになる。

Image in a image block

定数であったMAEと違い、こちらでは

  1. aby,p(ax)<p(bx)a\neq b \neq y, p(a|x) < p(b|x) \Rightarrowaa時点の勾配はbb時点の勾配より大きい。
    1. 正解から遠い=確率が低いほど、Gradientが大きくなる。
  2. 同じクラスyyに属する2つのサンプルx1,x2x_1, x_2に対して、ある別のクラスjjについてはp(jx1)=p(jx2)p(j|x_1)=p(j|x_2)であり、それ以外では
    1. p(yx1)>p(yx2)p(y|x_1) > p(y|x_2)。つまり、x1x_1のほうが確信度が高い。
    2. p(kx1)<p(kx2)p(k|x_1)<p(k|x_2)。つまり、正解のyyや等しいjj以外ではやはりx1x_1のほうが誤った判断をしていない。

    これらの条件を満たすとき、x1x_1のGradientはx2x_2より大きい。

    他と比べて正解に近く、所属してはいけないクラスの確率自体も低いほどGradientが大きくなり、正直うれしくないかも。

実験や結果

Loss Function Correctionだけなのに、Small Loss Trickなどと比べて高いノイズ率でもちゃんと学習できている普通はLoss Function Correctionは高いノイズ率には無力なので、これは非常にびっくり

過学習については、正規化したNegative Loss Functionが原因で、非常に少数のCleanなサンプルだけで学習をするモデルの場合、非常に大きい勾配が生じてその結果過学習するという考察。

過学習の軽減にはL1正則化が有効。L2やヤコビアンの正則化は不適当である。