Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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/

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

入力データ 生波形をそのまま入れるだけでなく、何らかの加工をしたものを 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)

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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)

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

CV 戦略 不均衡データゆえ悩ましいところが多い部分 多いのは stratified / ついで stratified group / group はなし ● groupはCV/LBの相関が見られなかったため不採用 (amaotone) ● discussion で camaro さんが共有してくださったおかげで group stratified も3,4 個 fold間でのスコアのブレが小さくなるようなシードを探る (nyanp) (Foldごとの難易度が揃うように調整しているイメージ?)

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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