2024年夏 関西Kaggler会 振り返り
初めに
コンテンツの密度が濃く、非常に充実した時間を過ごすことができました。また様々な方とお話しできてよかったです。
運営、登壇者及びスポンサーの方々、ありがとうございました!
今回は関西Kaggler会のセッションの振り返りをします。
全セッションは書ききれなかったので、kaggleへの具体的な取り組みに関するものをいくつか抜粋しました。
はたさん
セッションのトップバッターでした。
主にkaggleへの取り組み方と、kaggle友達を作ることについてお話ししていました。
kaggleへの取り組み
Q 強強Kaggerをボコボコにする方法
A ハンマーで殴る
ハンマー(形容)とは?
kaggle以外の特化部分(ドメイン知識、エンジニアリング、継続力、データレイク、DWH、MLOps、プロジェクト推進が上手い等)を伸ばして、そういった分野から攻めることが大切。
友達を作ろう
社会人になってから利害関係のない友達を作ることは難しい。
今回のkaggler会ではぜひ友達を作って欲しい。
たかいとさん
データ分析コンペへの向き合い方
バイアスを理解する。
仕事終わりにkaggleしてるだけで偉い!
強い人たちがチームを組んでいるので、ソロ上位に行くことは難しい。
おすすめは
・成長にフォーカスすること
・チームを組むこと(モチベにもなるし、アンサンブルも多様化する)
ぐちやまさん
IMCコンペの失敗を振り返る
IMCに参加しておらず理解しきれなかったので教訓だけ...
教訓
- Discussionをちゃんと読む
ローカルの実験がうまくいっていると疎かにしがちなので、定期的に更新を確認する - 信じたアイデアと向き合う
心中できるアイデアを見つける - 微妙なアイデアも一旦試してみる
あとで後悔しないように。実装速度も重要!
T88さん(チームkansai-kagglerの方々)
HMSは以前解法紹介をしているので、コンペ概要など知りたい方はご覧ください。
HMSの11th解法解説
TRチーム:
フーリエ変換によるスペクトログラムではなくCWT変換によるスカログラムを採用(少しスコアが良かった)。
スカログラムをtimmモデル→sigmoidに通す。
序盤
医者のvote数に偏りがあるので、voteが8以上(8人以上の医者が検査した)ものを抜粋すると、当時のLB4位に。
中盤
voteが少ないデータでのpretrainを実施。
全データ学習(10epoch)→そのまま8votes以上で学習(10epoch)
※pretrain→fine-tuningではなく途中でデータセットを切り替える方法がよかった。(なぜ?:LRのチューニングが難しかったとのこと)
終盤
チームマージ。アンサンブルモデル作成とシングルモデル改良。終盤はスタッキングの恩恵が大きかった
P-SHAチーム:
raw波形を1DCNN, STFT, MFCC, LFCC, RMSにかけてぞれぞれtimmとGRUに入力。別でkaggleから与えられたスペクトログラムもtimmに入力して、それらをconcatしてLinear層を通して出力とする。
波形の特徴(1DCNN, RMS(GRU))とスペクル変換(STFT, MFCC, LFCC, RMS)した画像の特徴を活かす試み。
上記の様々な変換方法に対して個別にlossを設定し、
loss = loss + (loss1+loss2+loss3+loss4+loss5+loss6) / 6
とすることで精度向上に寄与。
単純平均のblendingでスコアが向上したのでアンサンブルを深掘り、1x3 kernelを使用したstackingによってスコア向上。
さらにスタッキングに組み込むモデルとハイパラをoptunaでチューニング。
ktmさん
LLM Prompt Recoveryコンペの振り返り
LLMコンペに参加したことがなく、理解が及ばなかったのでまとめは省略します..
kamiさん
推薦系コンペの戦い方
-
手法
ルールベース
協調フィルタリング: matrix factorization, GNN , etc.
2stage 推薦システム(候補生成→re-ranking): 実装は大変だがLGBMなどで良い性能を出せる。 -
特徴量の作り方
user特長
item特長
user x item特長
コンペによっては
session特長、impression特長やこれら x 他の特徴など
学習
-
目標
2値分類
lambdarank
など -
訓練
なるべく未来のデータを使用。full trainぽく学習
その他
他手法:協調フィルタリングやGNNなど
tips:CV/LBが相関するなら20%とかfewで回しても良いかも
charmさん
画像系コンペの知見
-
Pytorch lightningを使用
自分でtrain loopを実装しなくて良い
ampや分散学習が引数を切り替えるだけで使える
(デメリット:破壊的変更が多い) -
モデル設定(基本的に変更しない)
scheduler: from transformers import get_cosine_schedule_with_warmup
optimizer: AdamW
albumentations
lr: 1e-4~1e-3 effinet/resnet 系は大きめ(1e-3) convnext, swintrans, ViTは小さめが良さそう(1e-4)。(lrはbackboneとheadで別の値にすることもある。)
model: timm(poolingはGeMやAdaptiveAvgPool2dをよく使う。バックボーンのみtimm利用。logitsはheadのpool指定して作成) -
よく使うbackbone
・初手
resnet200dとはseresnext50など。lossが下がらないことが少ない。
efficientnetは_nsがついているものがおすすめ。tf_eff~net_b0_ns to b7_ns, tf_effinet_l2_ns(超でかいけど強い)
tf_effinetv2(s,m,l)
・convnext系(一番よく使う)
tiny, small, base(初手), large, xxlarge
lrは1e-4ぐらい。e-3だと収束しない
・swintransformer系
timmだと384のswin largeが強い
実装そのままだと224 or 384で固定
lrは1e-4ぐらい
・maxvit系
baseとlargeが強い
改造なしでsmpで使えるのでsegmentationで最近よく使われる
baseとlargeはamp使うとamp使った時にlossが吹っ飛ぶことが多いので渋々fp32で使用
lrは1e-4ぐらいがおすすめ
・eva系
eva02_large_patch12_448.mim_m38m_ft_in22k_in1k
timmのREADMEを見ると圧倒的スコア
lrは1e-4ぐらいから試すのがおすすめ(もっと小さくてもいいかも)
stable diffusionコンペで使いたかった -
有用な手法(auxiliary loss)
補助lossとかaux lossとも呼んだり。
画像データ以外にメタデータが存在することが多々ある。医療だったら年齢とか問診の内容とか
そのメタデータを予測するためのheadを追加してlabelと一緒に予測。contrastive lossとかもたまに使う。 -
なぜ補助lossが有効か?
メタデータをNNに入力する方法は結構非自明でこれやっとけばいいというものはない。
testデータにメタデータがなくても、そのまま流用が可能。パイプラインに組み込むとtest時に困る。
なんかわからんが効く。
実装コストも安いし実質無料 -
Kaggleで勝つ方法は?
A:めっちゃ頑張る(no magic)
勝つのは難しい(周囲が命懸けでやってる)が、コツコツ頑張ろう
まとめ
大雑把にですが、セッションについてまとめてみました。
みなさん発表ありがとうございました!
また参加しようと思います。
Discussion