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

atmaCup#5 solutionまとめ

atmaCup#5 solutionまとめ

atmaCup#5 の解法サーベイです。https://www.guruguru.ml/competitions/10

Yamaguchi Takahiro

June 14, 2020
Tweet

More Decks by Yamaguchi Takahiro

Other Decks in Technology

Transcript

  1. atmaCup#5 Solutions
    2020/06/14 nyk510・atma株式会社

    View full-size slide

  2. もくじ
    ● はじめに
    ● 上位陣手法まとめ
    ● NeuralNetwork
    ● Gradient Boosted Decision Tree
    ● その他の話題

    View full-size slide

  3. はじめに
    今回のコンペでdiscussionで共有されたソリュー
    ションについて紹介していきます。
    atmaCup#5ではなんと31人も!!ソリューションを
    共有してくださいました ありがとうございま
    す!!
    個別具体的なものを見ていると無限に時間がか
    かるのでキーワード的に紹介していきたいと思
    います。
    ソリューションタグで検索を
    かけると便利です

    View full-size slide

  4. データの整理
    スペクトル観測データ + 観測条件から結合
    かどうかを予測する問題
    結合しているかどうかの特徴はスペクトルの
    ピーク部分に現れる. この特徴をうまく捉えら
    れるかどうかが鍵.
    positiveデータの数が少ない不均衡データ
    Positive
    (Target==1)
    Negative
    (Target=0)

    View full-size slide

  5. 上位陣モデルのまとめ
    ● CV は stratified (or stratified group)
    ● NNは必須
    ○ 1~9位(private/publicともに)は全員NNが何かしらで使用されている
    ○ 多いのは 1DCNN ついで wavenet / 2d-cnn / transformer
    ● GBDT (多いのは LightGBM )とのアンサンブルが多い. たまに NN 単体。
    coupledかどうかの判定は波形のピークとその周辺の情報が必要なため
    いかにうまく特徴化・NNに認識させられるかが勝負になったと推察

    View full-size slide

  6. Neural Network (1DCNN)
    ● モデル構造
    ● 入力データ
    ● Lossの設計
    ● Optimizer
    ● その他のモデル・工夫

    View full-size slide

  7. 1DCNNとは
    1次元の入力に対して畳み込み(局所的な情報だけを使った情報抽出)を行なう構造を
    持ったNetwork。前後関係に意味があるテキスト分類などで使用されることが多い。
    今回の波形データではピーク周辺などの情報が大事 → CNNでの情報抽出が有効
    参考
    1D-CNN & Extract Feature Vectors
    https://www.guruguru.ml/competitions/10/discussions
    /2f89df26-e5ad-4398-a2fe-df22512fa6ec/
    kerasを使ったシンプルな1DCNN
    https://www.guruguru.ml/competitions/10/discussions/b85
    f3167-efd6-4411-8baa-8d5ffda51fac/

    View full-size slide

  8. モデル構造 > 大きい Kernel Size
    shimishige / amaotone / Moro / tereka114 / ほか多数
    ● 入力に近い層で大きいカーネルサイズを採用 (11, 15 など)
    ● おそらく波形の局所的な特徴よりも、ピークの幅や鋭さの情報を利用することが
    大切でそれを組み込むために大きめのカーネルが必要なのではないかと推察

    View full-size slide

  9. 入力データ
    生波形をそのまま入れるだけでなく、何らかの加工をしたものを chennel 方向に追加
    して利用しているsolutionが多く見られました。
    波形情報を再構成して追加
    ● Denoising Auto Encoder/と残差 (nejumiさん)
    ● Lorentzian Fitting から復元した波形/元との残差 (nyanpさん, e-toppoさん,
    shimishigeさん)
    ● savitzky-golay filter で平滑化したもの + 微分 (amaotome さん)
    正規化
    ● sample wize normalization (amaotomeさん, yukiさん)
    ● sample wize min-max scaling (e-toppoさn)

    View full-size slide

  10. 入力データ
    Augmentation
    データの水増し。画像では回転・反転などが一般的
    [note] 上位陣でもやっている人がいたりいなかったりする。効果は限定的?
    ● flip/gaussian noise/shift
    ● manifold mixup (CVは上がったが LB は向上せず: teraka)
    ● fitting/ground(背景ノイズ)からtarget==1のデータを人工的に作成(HanDog1)
    という大技も
    その他
    ● fittingなどのテーブル情報をマージ (多数)

    View full-size slide

  11. Lossの設計
    Focal Loss (inoichi/ishikei/)
    Focal Loss for Dense Object Detection: https://arxiv.org/abs/1708.02002
    ● 簡単に分類できるデータのロスを小さくする(無視する)ことで分類が難しいデータ
    をより注意して最適化することが狙いのLoss
    ● 良かった (CVの安定性に寄与) という意見がある (ishikei) 一方であまりワークし
    ない (upura) という意見も。アーキテクチャ依存?
    その他
    ● BCE+RMSE (yCarbon)
    ● target以外の情報を予測するマルチタスクのloss, 学習済みモデルの予測値を
    soft target として利用 (oct_path)

    View full-size slide

  12. Optimizer
    Stochastic Weight Averaging
    (SWA)
    Averaging Weights Leads to Wider Optima
    and Better Generalization:
    https://arxiv.org/abs/1803.05407
    katsu1110 / copasta
    最適化途中の重みを保存してその平均値
    を使う手法
    ● Foldごとに学習が不安定になるのを
    防ぐ効果があった
    (copastaさん)

    View full-size slide

  13. Optimizer
    Lookahead
    Lookahead Optimizer: k steps forward, 1
    step back https://arxiv.org/abs/1907.08610
    たまにちょっと前の重みとの算術平均点
    に戻るフェーズを加えたoptimizer.
    NIPS2019.
    ● SWAと同様に学習の安定性に寄与し
    た (agatanさん)

    View full-size slide

  14. その他のモデル
    Wavenet (copasta / lain / takoi / e-toppo 他)
    ● private 1st/3rd で利用されている
    ● kernel_sizeは 1DCNN と違って 3 程度で十分で大きくしても性能はよくならな
    い (copast)
    ○ [note] 畳み込むノードを離す(=Dilation)処理が入っているので小さくても
    十分遠くの情報を使えている?
    ● ためしたがうまく行かなかったとの報告も複数あるため、アーキテクチャ・入力
    データになんらかの工夫は必要か

    View full-size slide

  15. その他のモデル
    Transformer (inoichi)
    ● 1D-CNNの出力をtransformerでまとめ上げるような構成
    2DCNN
    ● 元波形・DAEの再構成・残差の3chennelを入力画像とみなして2DCNN
    (nejumi_dqx)
    Bidirectional LSTM
    ● 1DCNNと組み合わせたInception likeな構造(shimishige)

    View full-size slide

  16. GBDT
    (Gradient Boosted Decision Tree)
    ● Overview
    ● 特徴量

    View full-size slide

  17. GBDT (Gradient Boosted Decision Tree)
    ご存知勾配ブースティング木。テーブルデータでは鉄板。
    NNメインで補助的に使用している人が多い印象。
    が、単体でprivate10th (public=0.9122/private=0.8704) のチームもある
    (rookzeno)のでやりようによっては単体でも戦える
    アルゴリズム
    ● LightGBM が一番人気・次に Catboost
    ● LightGBM→Catboostで大幅にスコアが伸びたとの報告あり(yCarbon). データ
    が少ない分 Catboostのカテゴリ変数の取り扱いが有意に働いている?

    View full-size slide

  18. GBDT > 特徴量
    ● tsfresh利用者多数
    ○ たくさん作ってimportanceで絞るパターンが一般的
    ○ あたたかみ特徴量がtsfreshに敗北してなくなった (nino_pira)
    ● フーリエ変換 (やメルスペクトログラム変換)
    ○ fitting param2 より imporatnce が高く出ている (kaerururu) 事例も報告さ
    れており相当強力か
    ● ピーク周辺の特徴
    ○ peak_near_sum (nyk510 チュートリアルver2) とその亜種 (見る幅を変える
    など)
    ○ ピーク前後の情報をそのまま入れる (takoi)

    View full-size slide

  19. GBDT > 特徴量
    ● CNNのembeddingを入れる
    ○ DAEの hidden layer (nejumi_dqx)
    ● その他気になったもの
    ○ 生波形のgradientの統計量 (rookzeno)
    ○ ピーク点周辺の左右対称性 / セカンドピークの情報 (kurupical)
    ○ 数値特徴と光強度値の四則演算 (nasuka)
    ○ 効いている特徴量を exec_wl などカテゴリ系カラムでgroupby (kurupical)
    ○ lowpass後tsfresh

    View full-size slide

  20. その他の話題
    ● CV戦略
    ● Pseudo Labeling

    View full-size slide

  21. CV 戦略
    不均衡データゆえ悩ましいところが多い部分
    多いのは stratified / ついで stratified group / group はなし
    ● groupはCV/LBの相関が見られなかったため不採用 (amaotone)
    ● discussion で camaro さんが共有してくださったおかげで group stratified も3,4

    fold間でのスコアのブレが小さくなるようなシードを探る (nyanp)
    (Foldごとの難易度が揃うように調整しているイメージ?)

    View full-size slide

  22. Pseudo Labeling
    学習したモデルのtestデータへの予測値を擬似的なラベルとみなし、テストデータ+擬
    似ラベルを学習データに追加して学習する手法
    効果の有無がケースバイケース / ありなし同数程度報告されている
    ● 効果あり
    ○ katsu1110/hakubishin3/upura/rookzeno
    ● 効果なし (あっても限定的)
    ○ copasta: public上昇には寄与したがprivateでは限定的
    ○ tereka: 最初だけ成功・運用が難しいとのコメント

    View full-size slide

  23. Pseudo Labeling
    やり方が微妙に違うので良いやり方があるのかも?
    効果があったチームの方法
    ● 閾値を定めてそれ以上のデータをpositiveとみなす (upura/katsu1110)
    ● 予測ラベルの上位100個・下位3000個をそれぞれpos/negとみなす(rookzeno)
    擬似ラベルデータの使い方
    ● 事前学習に擬似ラベルとテストデータを使う (hakubishin3)

    View full-size slide

  24. まとめ
    ● 上位入賞の鍵はNNにあったコンペ
    ● 単に1DCNNを使うのではなく入力データや構造に工夫が必要
    ○ large kernel size やフィルタ・残差の追加
    ● GBDTを使う場合にも波形からの特徴をうまく入れる必要がある
    ○ tsfreshは便利

    View full-size slide