Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MoAコンペで気づいたこと

fkubota
December 19, 2020

 MoAコンペで気づいたこと

fkubota

December 19, 2020
Tweet

More Decks by fkubota

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. シェイクアップ!!!!

    View Slide

  19. View Slide