⛩️

2024年夏 関西Kaggler会 振り返り 

2024/07/06に公開

初めに

https://kansaikaggler.connpass.com/event/316950/
7/5の関西Kaggler会に参加してきました。
コンテンツの密度が濃く、非常に充実した時間を過ごすことができました。また様々な方とお話しできてよかったです。
運営、登壇者及びスポンサーの方々、ありがとうございました!

今回は関西Kaggler会のセッションの振り返りをします。
全セッションは書ききれなかったので、kaggleへの具体的な取り組みに関するものをいくつか抜粋しました。

はたさん

セッションのトップバッターでした。
主にkaggleへの取り組み方と、kaggle友達を作ることについてお話ししていました。

kaggleへの取り組み

Q 強強Kaggerをボコボコにする方法
A ハンマーで殴る

ハンマー(形容)とは?
kaggle以外の特化部分(ドメイン知識、エンジニアリング、継続力、データレイク、DWH、MLOps、プロジェクト推進が上手い等)を伸ばして、そういった分野から攻めることが大切。

友達を作ろう

社会人になってから利害関係のない友達を作ることは難しい。
今回のkaggler会ではぜひ友達を作って欲しい。

たかいとさん

データ分析コンペへの向き合い方

バイアスを理解する。
仕事終わりにkaggleしてるだけで偉い!

強い人たちがチームを組んでいるので、ソロ上位に行くことは難しい。
おすすめは
・成長にフォーカスすること
・チームを組むこと(モチベにもなるし、アンサンブルも多様化する)

ぐちやまさん

https://speakerdeck.com/goosehaaan/sikuzirixian-sheng-image-matching-challenge-2024-bian

IMCコンペの失敗を振り返る

IMCに参加しておらず理解しきれなかったので教訓だけ...

教訓

  • Discussionをちゃんと読む
    ローカルの実験がうまくいっていると疎かにしがちなので、定期的に更新を確認する
  • 信じたアイデアと向き合う
    心中できるアイデアを見つける
  • 微妙なアイデアも一旦試してみる
    あとで後悔しないように。実装速度も重要!

T88さん(チームkansai-kagglerの方々)

https://speakerdeck.com/t88/hmskonpe-11th-solution-team-kansai-kaggler
TRチームとP-SHAチームそれぞれの解法について。
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さん

https://speakerdeck.com/ktm/llm-prompt-recoverykonpenozhen-rifan-ri

LLM Prompt Recoveryコンペの振り返り

LLMコンペに参加したことがなく、理解が及ばなかったのでまとめは省略します..

kamiさん

https://speakerdeck.com/unonao/n-equals-1-notui-jian-xi-konpenozhan-ifang

推薦系コンペの戦い方

  • 手法
    ルールベース
    協調フィルタリング: 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