タスクやモデルに依存しない新しい正則化手法: Flooding

タスクやモデルに依存しない新しい正則化手法: Flooding

3つの要点
✔️ 損失関数/入力空間/タスク/モデルに依存しない新しい正則化手法(flooding)を提案
✔️ 「training lossが0になるまで学習し続けると汎化性が低下する」という自然な仮定に基づく

✔️ floodingを使った副次的な効果として、早い段階(epoch数100前後)でdouble descentという現象が確認できる

Do We Need Zero Training Loss After Achieving Zero Training Error?
written by Takashi IshidaIkko YamaneTomoya SakaiGang NiuMasashi Sugiyama
(Submitted on 20 Feb 2020)

Comments: Published by arXiv
Subjects: Machine Learning (cs.LG); Machine Learning (stat.ML)

本文中の実装はこちらにあります。

背景

機械学習の大きな話題の一つとして、regularization(汎化性能)とmemorization(訓練データに対する予測性能)のトレードオフが挙げられます。汎化性能を考慮せずいたずらに学習を回し続けると過学習を起こし、「ありとあらゆる未知のデータ」に対応できない、使い勝手の悪い学習モデルが出来上がってしまいます、、、

ここで過学習とはなにか一度考えてみましょう。実は過去に発表された研究で「trainig error(訓練データに対する誤分類率)を0に近づけることは汎化性能の向上に直結する」ということが実験的に示されているのですが、一方でtraining loss(訓練データに対する損失の平均)を0に近づけた場合における汎化性能の挙動は明らかになっていません。本論文では、過学習を「training lossとtest lossに大きな開きがある状態」として定義しています。下の図に注目してみます。training lossが0付近(エリア[C])になるまで学習を続けていると、test lossがどんどん大きくなってしまうことがわかります。言い換えると、汎化性能の低下を防ぐためにweight decayやearly stoppingといった正則化手法でtraining lossの値が0に至らないよう制御する必要があります。

 

epochを回し続けた際のtrain/test lossの移り変わり(floodingなし)

本研究で提案された正則化手法floodingは、はtraining lossにflooding levelと呼ばれる定数 $b(>=0)$ を与えることでtrain lossが0に近づくことを直接的に防ぎます。目的関数を$J(\mathbf{\theta})$とすれば、次式で定義される関数$\tilde{J}(\mathbf{\theta})$を最小化することになります。

$\tilde{J}(\theta):=|J(\theta)-b|+b$

非常にシンプルですね!実際、実装も簡単でとても使いやすいように感じます。上式より$J({\theta})>b$なら$\frac{\partial \tilde{J}({\theta})}{\partial {\theta}} = \frac{\partial J({\theta})}{\partial {\theta}}$、$J({\theta})<b$なら$\frac{\partial \tilde{J}({\theta})}{\partial {\theta}} = -\frac{\partial J({\theta})}{\partial {\theta}}$となるため、最適なパラメータ$\mathbf{\theta}$を探索する過程でtraining lossが0に近づかないという仕組みです。training lossが水面にプカプカ浮いている様に似ているため、floodingという名前がついています(下図)。また、floodingを施すことによる副次的な結果として、test lossが下降→上昇→下降するというdouble descentと呼ばれる現象が確認できることが実験的に明らかになりました。従って、floodingを施すことによりtraining lossとtest loss間の開きが狭まり、過学習を防ぐことができます。

epochを回し続けた際のtrain/test lossの移り変わり(floodingあり)

Floodingを用いる利点として、次の3点が挙げられます。

  • 損失関数/入力空間/タスク/モデルに依存しない
  • 実装が簡単で使いやすい
  • 正則化のレベル(定数$b$)を直接的に指定できる

この記事をシェアする