Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
atmaCup#5 solutionまとめ
Search
Yamaguchi Takahiro
June 14, 2020
Technology
1
1.4k
atmaCup#5 solutionまとめ
atmaCup#5 の解法サーベイです。
https://www.guruguru.ml/competitions/10
Yamaguchi Takahiro
June 14, 2020
Tweet
Share
More Decks by Yamaguchi Takahiro
See All by Yamaguchi Takahiro
コンペを気楽に開催しよーぜ!@関西Kaggler会
nyk510
0
990
Django のセキュリティリリースを見る
nyk510
0
34
3分でMLアプリを作る 〜推論コードにちょっとのStreamlitを添えて〜
nyk510
1
990
硬派で真面目なグラフを描く
nyk510
0
440
CORSをちゃんと理解する atmaバックエンド勉強会#4
nyk510
0
340
pythonで気軽にパッケージを作るのは良いという話。
nyk510
14
9.4k
RestAPIのページネーション atma バックエンド勉強会 #3
nyk510
1
790
AWS CPU Credit を完全に理解する
nyk510
0
400
atmaCup#8 Opening
nyk510
0
200
Other Decks in Technology
See All in Technology
Autify Company Deck
autifyhq
1
39k
新卒1年目が向き合う生成AI事業の開発を加速させる技術選定 / ai-web-launcher
cyberagentdevelopers
PRO
7
1.5k
いまならこう作りたい AWSコンテナ[本格]入門ハンズオン 〜2024年版 ハンズオンの構想〜
horsewin
9
2.1k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
49k
「視座」の上げ方が成人発達理論にわかりやすくまとまってた / think_ perspective_hidden_dimensions
shuzon
2
1.5k
10分でわかるfreeeのQA
freee
1
3.4k
よくわからんサービスについての問い合わせが来たときの強い味方 Amazon Q について
kazzpapa3
0
220
生成AIの強みと弱みを理解して、生成AIがもたらすパワーをプロダクトの価値へ繋げるために実践したこと / advance-ai-generating
cyberagentdevelopers
PRO
1
180
一休.comレストランにおけるRustの活用
kymmt90
3
580
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
21
3.4k
【若手エンジニア応援LT会】AWS Security Hubの活用に苦労した話
kazushi_ohata
0
160
AIを駆使したゲーム開発戦略: 新設AI組織の取り組み / sge-ai-strategy
cyberagentdevelopers
PRO
1
130
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Visualization
eitanlees
144
15k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
Navigating Team Friction
lara
183
14k
We Have a Design System, Now What?
morganepeng
50
7.2k
Building Applications with DynamoDB
mza
90
6.1k
Fireside Chat
paigeccino
32
3k
Building Adaptive Systems
keathley
38
2.2k
Making Projects Easy
brettharned
115
5.9k
Transcript
atmaCup#5 Solutions 2020/06/14 nyk510・atma株式会社
もくじ • はじめに • 上位陣手法まとめ • NeuralNetwork • Gradient Boosted
Decision Tree • その他の話題
はじめに 今回のコンペでdiscussionで共有されたソリュー ションについて紹介していきます。 atmaCup#5ではなんと31人も!!ソリューションを 共有してくださいました ありがとうございま す!! 個別具体的なものを見ていると無限に時間がか かるのでキーワード的に紹介していきたいと思 います。
ソリューションタグで検索を かけると便利です
データの整理 スペクトル観測データ + 観測条件から結合 かどうかを予測する問題 結合しているかどうかの特徴はスペクトルの ピーク部分に現れる. この特徴をうまく捉えら れるかどうかが鍵. positiveデータの数が少ない不均衡データ
Positive (Target==1) Negative (Target=0)
上位陣モデルのまとめ • CV は stratified (or stratified group) • NNは必須
◦ 1~9位(private/publicともに)は全員NNが何かしらで使用されている ◦ 多いのは 1DCNN ついで wavenet / 2d-cnn / transformer • GBDT (多いのは LightGBM )とのアンサンブルが多い. たまに NN 単体。 coupledかどうかの判定は波形のピークとその周辺の情報が必要なため いかにうまく特徴化・NNに認識させられるかが勝負になったと推察
Neural Network (1DCNN) • モデル構造 • 入力データ • Lossの設計 •
Optimizer • その他のモデル・工夫
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/
モデル構造 > 大きい Kernel Size shimishige / amaotone / Moro
/ tereka114 / ほか多数 • 入力に近い層で大きいカーネルサイズを採用 (11, 15 など) • おそらく波形の局所的な特徴よりも、ピークの幅や鋭さの情報を利用することが 大切でそれを組み込むために大きめのカーネルが必要なのではないかと推察
入力データ 生波形をそのまま入れるだけでなく、何らかの加工をしたものを 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)
入力データ Augmentation データの水増し。画像では回転・反転などが一般的 [note] 上位陣でもやっている人がいたりいなかったりする。効果は限定的? • flip/gaussian noise/shift • manifold
mixup (CVは上がったが LB は向上せず: teraka) • fitting/ground(背景ノイズ)からtarget==1のデータを人工的に作成(HanDog1) という大技も その他 • fittingなどのテーブル情報をマージ (多数)
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)
Optimizer Stochastic Weight Averaging (SWA) Averaging Weights Leads to Wider
Optima and Better Generalization: https://arxiv.org/abs/1803.05407 katsu1110 / copasta 最適化途中の重みを保存してその平均値 を使う手法 • Foldごとに学習が不安定になるのを 防ぐ効果があった (copastaさん)
Optimizer Lookahead Lookahead Optimizer: k steps forward, 1 step back
https://arxiv.org/abs/1907.08610 たまにちょっと前の重みとの算術平均点 に戻るフェーズを加えたoptimizer. NIPS2019. • SWAと同様に学習の安定性に寄与し た (agatanさん)
その他のモデル Wavenet (copasta / lain / takoi / e-toppo 他)
• private 1st/3rd で利用されている • kernel_sizeは 1DCNN と違って 3 程度で十分で大きくしても性能はよくならな い (copast) ◦ [note] 畳み込むノードを離す(=Dilation)処理が入っているので小さくても 十分遠くの情報を使えている? • ためしたがうまく行かなかったとの報告も複数あるため、アーキテクチャ・入力 データになんらかの工夫は必要か
その他のモデル Transformer (inoichi) • 1D-CNNの出力をtransformerでまとめ上げるような構成 2DCNN • 元波形・DAEの再構成・残差の3chennelを入力画像とみなして2DCNN (nejumi_dqx) Bidirectional
LSTM • 1DCNNと組み合わせたInception likeな構造(shimishige)
GBDT (Gradient Boosted Decision Tree) • Overview • 特徴量
GBDT (Gradient Boosted Decision Tree) ご存知勾配ブースティング木。テーブルデータでは鉄板。 NNメインで補助的に使用している人が多い印象。 が、単体でprivate10th (public=0.9122/private=0.8704) のチームもある
(rookzeno)のでやりようによっては単体でも戦える アルゴリズム • LightGBM が一番人気・次に Catboost • LightGBM→Catboostで大幅にスコアが伸びたとの報告あり(yCarbon). データ が少ない分 Catboostのカテゴリ変数の取り扱いが有意に働いている?
GBDT > 特徴量 • tsfresh利用者多数 ◦ たくさん作ってimportanceで絞るパターンが一般的 ◦ あたたかみ特徴量がtsfreshに敗北してなくなった (nino_pira)
• フーリエ変換 (やメルスペクトログラム変換) ◦ fitting param2 より imporatnce が高く出ている (kaerururu) 事例も報告さ れており相当強力か • ピーク周辺の特徴 ◦ peak_near_sum (nyk510 チュートリアルver2) とその亜種 (見る幅を変える など) ◦ ピーク前後の情報をそのまま入れる (takoi)
GBDT > 特徴量 • CNNのembeddingを入れる ◦ DAEの hidden layer (nejumi_dqx)
• その他気になったもの ◦ 生波形のgradientの統計量 (rookzeno) ◦ ピーク点周辺の左右対称性 / セカンドピークの情報 (kurupical) ◦ 数値特徴と光強度値の四則演算 (nasuka) ◦ 効いている特徴量を exec_wl などカテゴリ系カラムでgroupby (kurupical) ◦ lowpass後tsfresh
その他の話題 • CV戦略 • Pseudo Labeling
CV 戦略 不均衡データゆえ悩ましいところが多い部分 多いのは stratified / ついで stratified group /
group はなし • groupはCV/LBの相関が見られなかったため不採用 (amaotone) • discussion で camaro さんが共有してくださったおかげで group stratified も3,4 個 fold間でのスコアのブレが小さくなるようなシードを探る (nyanp) (Foldごとの難易度が揃うように調整しているイメージ?)
Pseudo Labeling 学習したモデルのtestデータへの予測値を擬似的なラベルとみなし、テストデータ+擬 似ラベルを学習データに追加して学習する手法 効果の有無がケースバイケース / ありなし同数程度報告されている • 効果あり ◦
katsu1110/hakubishin3/upura/rookzeno • 効果なし (あっても限定的) ◦ copasta: public上昇には寄与したがprivateでは限定的 ◦ tereka: 最初だけ成功・運用が難しいとのコメント
Pseudo Labeling やり方が微妙に違うので良いやり方があるのかも? 効果があったチームの方法 • 閾値を定めてそれ以上のデータをpositiveとみなす (upura/katsu1110) • 予測ラベルの上位100個・下位3000個をそれぞれpos/negとみなす(rookzeno) 擬似ラベルデータの使い方
• 事前学習に擬似ラベルとテストデータを使う (hakubishin3)
まとめ • 上位入賞の鍵はNNにあったコンペ • 単に1DCNNを使うのではなく入力データや構造に工夫が必要 ◦ large kernel size やフィルタ・残差の追加
• GBDTを使う場合にも波形からの特徴をうまく入れる必要がある ◦ tsfreshは便利