オーバーフィットについての雑感
オーバーフィットが良く分からない。 オーバーフィットを理解するのは現在の機械学習の重要なグランドクエストのようなものなので、 分からないのは当然なのだが。
conv S2Sベースのモデルで、accが0.86くらいまで行ったあとにvalidation lossが下がらなくなり、traniningのロスはそこからも下がり続ける、という事があった。 これは理解出来る。
そのあと、エンコーダだけself attentionのもの(ただしアテンションはmultiheadじゃなくてそれまで使ってたもの)に変えてみた。 すると、accが0.78くらいのところでvalidation lossが下がらなくなり、trianingのロスはそこからも下がり続けた。 なぜこういう事が起こるのだろう?
モデルの形状次第でよりオーバーフィットしやすい、という事があるのだろう。 問題の非本質的なところを暗記する事によってスコアを上げる、というような。 だが、どういう時にオーバーフィットしやすくてどういう時がそうでも無いのかが分からない。 もっというとself attentionはオーバーフィットしやすいのかが良く分からない。
residual connectionが入るのだから、問題文のどこかを暗記しやすい、という傾向はあるかもしれない。 一方でfeature extractorは間に咬ますのだから、生の座標データとかを見ている訳でも無い。
パラメータ数もちゃんと計算してないがconvolutionの方が多いと思う。カーネルの幅の分があるので。
dropoutを強めにかけると、多少スコアは上がったが、それでも0.82くらいでオーバーフィットし始めてしまう。convolutionでは0.86くらいまで行くのに、この違いはなんなのだろう?
そもそもに、自分がやっている事というのはトレーニングの誤差を下げる、という事だ。 で、トレーニングの誤差はまだまだ下がる。けれどそれが望ましくない。 これは何が悪いのだろうか?
データは50万件くらいある。相当に多い。元になったシンボルのデータ自体はそこまで多くも無いのでオーバーフィットしうる余地はあるのだが、多少は乱数でちらしてもいるし、組み合わせはそれなりに多いしで、簡単には答えを暗記出来る気はしない。 でもself attentionをエンコーダにしたモデルは、トレーニングの誤差だけを下げる事に成功している。 どうやったらそんな事が出来るんだろう?
そもそもに、オーバーフィットとはなんなのだろう? 本質的にトレーニングセットからは類推出来ないようなパターンがあるものに関して、そこよりも良いスコアにならない、という原理的な限界は理解出来る。 そこよりも先に行った時に、見たデータに過度に適応しすぎる、という事も理解は出来る。
ただ、過度とはなんだろう?なんでvalidationのスコアが十分に高くなる前に過度に適応しすぎるという事が起こるのか?起こらない場合との違いはなんなのだろう?
いまいちオーバーフィットというのが何が起きているのかが良く分からないなぁ。