atmaCup#5 solutionまとめ

atmaCup#5 solutionまとめ

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

C4c6c7b4fdf9285bcf12c5caa58c8d53?s=128

Yamaguchi Takahiro

June 14, 2020
Tweet

Transcript

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

  2. もくじ • はじめに • 上位陣手法まとめ • NeuralNetwork • Gradient Boosted

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

    ソリューションタグで検索を かけると便利です
  4. データの整理 スペクトル観測データ + 観測条件から結合 かどうかを予測する問題 結合しているかどうかの特徴はスペクトルの ピーク部分に現れる. この特徴をうまく捉えら れるかどうかが鍵. positiveデータの数が少ない不均衡データ

    Positive (Target==1) Negative (Target=0)
  5. 上位陣モデルのまとめ • CV は stratified (or stratified group) • NNは必須

    ◦ 1~9位(private/publicともに)は全員NNが何かしらで使用されている ◦ 多いのは 1DCNN ついで wavenet / 2d-cnn / transformer • GBDT (多いのは LightGBM )とのアンサンブルが多い. たまに NN 単体。 coupledかどうかの判定は波形のピークとその周辺の情報が必要なため いかにうまく特徴化・NNに認識させられるかが勝負になったと推察
  6. Neural Network (1DCNN) • モデル構造 • 入力データ • Lossの設計 •

    Optimizer • その他のモデル・工夫
  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/
  8. モデル構造 > 大きい Kernel Size shimishige / amaotone / Moro

    / tereka114 / ほか多数 • 入力に近い層で大きいカーネルサイズを採用 (11, 15 など) • おそらく波形の局所的な特徴よりも、ピークの幅や鋭さの情報を利用することが 大切でそれを組み込むために大きめのカーネルが必要なのではないかと推察
  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)
  10. 入力データ Augmentation データの水増し。画像では回転・反転などが一般的 [note] 上位陣でもやっている人がいたりいなかったりする。効果は限定的? • flip/gaussian noise/shift • manifold

    mixup (CVは上がったが LB は向上せず: teraka) • fitting/ground(背景ノイズ)からtarget==1のデータを人工的に作成(HanDog1) という大技も その他 • fittingなどのテーブル情報をマージ (多数)
  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)
  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さん)
  13. Optimizer Lookahead Lookahead Optimizer: k steps forward, 1 step back

    https://arxiv.org/abs/1907.08610 たまにちょっと前の重みとの算術平均点 に戻るフェーズを加えたoptimizer. NIPS2019. • SWAと同様に学習の安定性に寄与し た (agatanさん)
  14. その他のモデル Wavenet (copasta / lain / takoi / e-toppo 他)

    • private 1st/3rd で利用されている • kernel_sizeは 1DCNN と違って 3 程度で十分で大きくしても性能はよくならな い (copast) ◦ [note] 畳み込むノードを離す(=Dilation)処理が入っているので小さくても 十分遠くの情報を使えている? • ためしたがうまく行かなかったとの報告も複数あるため、アーキテクチャ・入力 データになんらかの工夫は必要か
  15. その他のモデル Transformer (inoichi) • 1D-CNNの出力をtransformerでまとめ上げるような構成 2DCNN • 元波形・DAEの再構成・残差の3chennelを入力画像とみなして2DCNN (nejumi_dqx) Bidirectional

    LSTM • 1DCNNと組み合わせたInception likeな構造(shimishige)
  16. GBDT (Gradient Boosted Decision Tree) • Overview • 特徴量

  17. GBDT (Gradient Boosted Decision Tree) ご存知勾配ブースティング木。テーブルデータでは鉄板。 NNメインで補助的に使用している人が多い印象。 が、単体でprivate10th (public=0.9122/private=0.8704) のチームもある

    (rookzeno)のでやりようによっては単体でも戦える アルゴリズム • LightGBM が一番人気・次に Catboost • LightGBM→Catboostで大幅にスコアが伸びたとの報告あり(yCarbon). データ が少ない分 Catboostのカテゴリ変数の取り扱いが有意に働いている?
  18. GBDT > 特徴量 • tsfresh利用者多数 ◦ たくさん作ってimportanceで絞るパターンが一般的 ◦ あたたかみ特徴量がtsfreshに敗北してなくなった (nino_pira)

    • フーリエ変換 (やメルスペクトログラム変換) ◦ fitting param2 より imporatnce が高く出ている (kaerururu) 事例も報告さ れており相当強力か • ピーク周辺の特徴 ◦ peak_near_sum (nyk510 チュートリアルver2) とその亜種 (見る幅を変える など) ◦ ピーク前後の情報をそのまま入れる (takoi)
  19. GBDT > 特徴量 • CNNのembeddingを入れる ◦ DAEの hidden layer (nejumi_dqx)

    • その他気になったもの ◦ 生波形のgradientの統計量 (rookzeno) ◦ ピーク点周辺の左右対称性 / セカンドピークの情報 (kurupical) ◦ 数値特徴と光強度値の四則演算 (nasuka) ◦ 効いている特徴量を exec_wl などカテゴリ系カラムでgroupby (kurupical) ◦ lowpass後tsfresh
  20. その他の話題 • CV戦略 • Pseudo Labeling

  21. CV 戦略 不均衡データゆえ悩ましいところが多い部分 多いのは stratified / ついで stratified group /

    group はなし • groupはCV/LBの相関が見られなかったため不採用 (amaotone) • discussion で camaro さんが共有してくださったおかげで group stratified も3,4 個 fold間でのスコアのブレが小さくなるようなシードを探る (nyanp) (Foldごとの難易度が揃うように調整しているイメージ?)
  22. Pseudo Labeling 学習したモデルのtestデータへの予測値を擬似的なラベルとみなし、テストデータ+擬 似ラベルを学習データに追加して学習する手法 効果の有無がケースバイケース / ありなし同数程度報告されている • 効果あり ◦

    katsu1110/hakubishin3/upura/rookzeno • 効果なし (あっても限定的) ◦ copasta: public上昇には寄与したがprivateでは限定的 ◦ tereka: 最初だけ成功・運用が難しいとのコメント
  23. Pseudo Labeling やり方が微妙に違うので良いやり方があるのかも? 効果があったチームの方法 • 閾値を定めてそれ以上のデータをpositiveとみなす (upura/katsu1110) • 予測ラベルの上位100個・下位3000個をそれぞれpos/negとみなす(rookzeno) 擬似ラベルデータの使い方

    • 事前学習に擬似ラベルとテストデータを使う (hakubishin3)
  24. まとめ • 上位入賞の鍵はNNにあったコンペ • 単に1DCNNを使うのではなく入力データや構造に工夫が必要 ◦ large kernel size やフィルタ・残差の追加

    • GBDTを使う場合にも波形からの特徴をうまく入れる必要がある ◦ tsfreshは便利