Slide 1

Slide 1 text

MoAコンペで気づいたこと fkubota https://www.kaggle.com/fkubota

Slide 2

Slide 2 text

さっそくですが モデルの性能をtarget_columnごとで評価したことありますか? 僕はあります。 今回のコンペのmetricを見てみましょう。 これを変形してみます。 https://www.kaggle.com/c/lish-moa/overview/evaluation

Slide 3

Slide 3 text

row方向 column方向 mのみに依存

Slide 4

Slide 4 text

各カラム毎にscoreを出力できた!

Slide 5

Slide 5 text

ターゲットカラム毎に評価はできました。 1つ1つ結果を確認するのもいいですが、 もう少しおもしろいことをしましょう。

Slide 6

Slide 6 text

1の数(n)を数えてみる 17 18 24 190 301 仮説: nが小さいほど(学習が困難になって)lossが大きいのでは? n =

Slide 7

Slide 7 text

n vs logloss でプロット nが小さいほどうまく学習ができていない? ---> nが小さいほどloglossは大きくなる? 右のグラフを見る限りそうでもない。 仮説は否定された。なんでこうなるの? あと、右上に単調増加する意味ありげな形 これはなにかあるぞ。。。

Slide 8

Slide 8 text

そもそも、nが1とかだったら、 モデルに予測させるのではなく、 全部0埋めすればいいのでは? こいつら学習させることで きるんですか?

Slide 9

Slide 9 text

0で埋めるのが最適かはわからない。 0に近い値で埋めたほうがいいのは確か。 どの程度の一定値で埋めればいい? n=1, 2, 3, 4, 5のときに、様々な一定値で埋めて score_colを計算した。 横軸は、埋めた一定値の値。 縦軸はscore_col の値。 最適な一定値はnによって変わる。

Slide 10

Slide 10 text

実はこの最適な一定値は解析的に計算できる。 簡単に紹介(自分で計算してみてね)。

Slide 11

Slide 11 text

score_colを最小とするようなCをC_0とする (記号の雑さ、数学的な厳密性の欠如は今は目を瞑ってください m(_ _)m) これを解くと... 美しい感じの解出た! 直感的!!

Slide 12

Slide 12 text

求めた解を使って、nごとにプロットしてみる おっ??

Slide 13

Slide 13 text

いっしょにプロット おおおおおおお!

Slide 14

Slide 14 text

つまり? 計算したloglossを赤色でプロットした。 見事に一致している部分が多くある。 赤色と重なっている青い部分はこう解釈できる。 「1は予測できないが、たまに1がtargetにある。すべて0 にpredictしてしまうとペナルティが大きくなってしまうの で、ちょうどいい感じの値を出しておこう」 モデルは、1を頑張って予測しようとしているのではな く、ペナルティが最小限になるような値を出力しているに 過ぎないと言える。 赤い線に近い値を取っているカラムは 全く学習していない!!!

Slide 15

Slide 15 text

シェイクの予感 - ほとんどの参加者は、この事に気づいていない - スコアに大きな影響があるのはnが大きいターゲット - おそらくほとんどのモデルはnが小さいターゲットはほとんど学習で きていない - モデルは、nが小さなターゲットではn(1が何個含まれているか?)し か見ていない。 - testとtrainでnの数に大きな差があれば性能は極端に落ちる。 nが小さいtargetで性能を出せればシェイクアップはできる!!

Slide 16

Slide 16 text

コンペ後半は、n<200の部分だけの性能アップに注力 - focal loss - mixup - LabelSmoothing - etc…. mixupが一番効く!!

Slide 17

Slide 17 text

cool_rabbitさんによる実験 黄色: mixup なし 青色: mixupあり 良くなってる 悪くなってる アンサンブルの時、 このモデルはN<200 の部分だけを使うなどの工 夫をした

Slide 18

Slide 18 text

シェイクアップ!!!!

Slide 19

Slide 19 text

No content