修正、加筆しました
全国医療AIコンテスト1st place solution2021/03/27 チズチズ abap34team:🦾😢
View Slide
自己紹介越智優真(チズチズ)● 千葉大学教育学部附属中学校 3年● Kaggle Expert● 医学素人、機械学習素人● 最近は量子コンピュータとギターにお熱● 専攻分野 なんでも
自己紹介abap34- 東海高校二年生(春から受験生)- 機械学習に興味, 色々開発(コンペ少し)- 医学素人機械学習素人
モデリングのTips、全体的なアプローチ● Global Average Pooling○ 時間軸でたたむ● Multiple Input○ 年齢、性別○ concat→Dense● SWA○ 重みを平均化(≠局所最適)● SAM○ ロバスト性が高まる(≠局所最適)● 多様性を意識○ アンサンブルを想定○ 色々なアーキテクチャ 最終層でage, sexを入力
最終的なアンサンブルに使ったモデル- ResNet的機構を導入したConv1Dモデル(https://arxiv.org/abs/1805.00794v1)- それのoptimizerにSWAを適用したバージョン- それのPseudoLabelingなどを適用したバージョンのモデル- LSTM- よりResNet的なConv1dモデル- WaveNet
A Deep Transferable Representation Model(?)● ECG分類用に作られたアーキテクチャ● Kaggle Notebookにて発見● ResNet的なブロックがある● 深さ Is All You Need(Baselineがマッチョになったイメージ)https://arxiv.org/abs/1805.00794v1+ Pseudo Labeling, Label Smoothing(後述)でPrivate 4位相当のスコア
LSTM● 終盤、アンサンブルのため急遽作成(多様性のあるモデル作りの一貫)● あまり詰め切れていない(が、それなりのスコアが出たのでアンサンブルに採用)
ECG分類のためのコード(ResBlock)● 今回と同じ12誘導心電図を使ったモデル● とてもResNetっぽい● Paper with codeで漁ってたら発見kernel size:12 → 5層の数を数百まで減らしたらよく適合したhttps://www.nature.com/articles/s41467-020-15432-4
work approach- Cross Validation- Label Smoothing- WaveNet- Pseudo Labeling
label-typetrain test
CV構築 ~label typeと年齢の関係label typeによる分布の変化
label typeと性別train-autotesttrain-humanvs
CrossValidation- testデータは全てlabel_type==”human”(手動ラベリング)=> これにvalidationを近づけたい- trainをauto/humanで分離- validationはhumanのみから取り出すhuman autotrainここをStratifiedKFold常にtrain
label smoothing- autoでつけられたラベルは多少Noisyであると予想=> label smoothingでロバストなモデルに(↑0.002, 0.005)
結果shake up!
WaveNet- 層が深くなるにつれて、「とびとびで」畳み込みを行うネットワークhttps://qiita.com/MasaEguchi/items/cd5f7e9735a120f27e2a
WaveNetモデル全体入力付近 出力付近(age, sex入力部)
WaveNet- 単モデルでPublic5位/Private3位相当のスコア- 学習の安定性、速度、精度どれも良く、非常に強力
Pseudo Labeling● 0.05を閾値に○ 約6000データ を追加● 0.003程改善0.05 0.95Pseudo ありPseudo なしprivate public
Not worked● NN以外のアプローチ○ tsfresh○ その他特徴抽出● フィルタ○ 平滑化○ 微分○ 画像アプローチ(12方向からのデータを扱うのが難しい+ 事前学習済みモデル使用不可)=> NN以外は難しかった:ランダムフォレスト
役割分担など コンペの進め方- 寝たら、多分負ける=> 常に通話を繋ぎっぱなしにして作業連続的に相互に役割を割り振る- お互い機械学習・医学系の専門的な教育を受けているわけではない=> とにかく実験(理由づけは後からでも良い)反省点- 最終盤の流れだけは「きっちりと」決めておくべきだった(最終的にアンサンブルが雑になってしまった )- コードを共有する仕組みは短期間コンペでも整えておいた方が良い(バグを解決する一番の方法は、チームメイトに見せることかも )
まとめ - NNが強かった- 信頼できるCVで高速な実験- ロバストモデル +pseudo labeling +多様性のあるモデリング +でshake up!