学習する天然ニューラルネット

主に機械学習に関する覚書や情報の整理。競プロ水色→Kaggle Master→?

チームメイトに恵まれKaggle Competitions Expertになった日記

はじめに

日記です。Kaggleを初めて2つのコンペに参加し無事Expertになったので、つれづれなるままにPCに向かひて、心にうつりゆくよしなしごとをそこはかとなく書くことにしました。 技術的に有用な情報はありません。運が強く味方してくれたため再現性はありません。

Expertになるまでの戦歴

kaggle戦歴。NBME 27位 で 銀メダル、PPPM 8位 で 金メダル。

NBME27位で銀メダル、PPPM8位で金メダルを取得したことにより、銅メダル以上2つというExpertの基準をクリアした。

これだけ見るとKaggle上手すぎぃ!次でMaster昇格か?という感じ。しかし後述するようにめちゃくちゃチームメイトに恵まれて運も良かったのが理由である。ソロだと銅メダルもかなり怪しい:pien:。

NBMEコンペの思い出

  • Kaggleそろそろやりてぇと騒いでいたら、社内の方に誘っていただき無事チーム結成。
  • なんやかんやあって(当時)社外2人社内2人でスタート。
  • 他の方々が pytorch と huggingface の経験がある中、どちらもほとんど経験がなかった自分は何もわからんからスタートする。
  • 計算資源もなかったのでkaggle notebookでbert系のbase modelを使って工夫をいろいろやっていた。がlargeモデルに乗っけた途端なにも効かなくなって深層学習なにもわからん期を迎える。
  • とりあえず colab pro+ を契約して計算資源を確保。なお、P100しかでなかったり使い勝手がわるかったりで、後に解約することになるのだがこれは別の話。
  • 1週間ぐらい前になって、ディスカッションから効きそうなことを発見(事前学習とpseudo labeling)。
  • 神チームメイトが事前学習やpseudo labelingのコードを爆速で用意したり、別の神チームメイトがGCP上でクソつよGPUを使う手順書をまとめてくれたりして、自分はまじでおんぶにだっこで学習を手伝っていた。
  • GCPのcompute engineについて色々教えてくださった方にはまじで頭が上がらない。A100を4枚借りなければ絶対に学習が終わらなかった。しかもこの知識はPPPMのコンペの方や業務の方でも生かされることになるがそれはまた別のお話。
  • 最後のアンサンブルは自分が結構実装したが、2日ぐらいほぼ徹夜でやったのはいい思い出。自分が頑張れば銀メダルの上位に食い込めそうという強い確信がなせるわざ。
  • 最終提出がdeadlineの数時間前にギリギリ推論が終わったり、それが今まで到達できなかったスコアの壁を超えたり最後の最後に熱かった。27位でfinish。

PPPMコンペの思い出

  • 元CTOの大ベテランエンジニアを恐縮ながら自分から誘ってスタート。この方、学習速度がバケモンでpytorchやhuggingfaceを初めて触るとは思えない速度で理解されていく。また最終的なアンサンブル時の重みを超高速に(一瞬で)最適化する手法を実装するという離れ業を見せてくれた(コンペ1位の方から勉強になるとコメントが来たぐらい)。
  • NBME時にコンペへの取り組み方や、序盤でやるべきことは教えていただいていたため、なかなか良いベースラインコードができたと思う。ベースラインなのにもうちょっとで銅メダルぐらいの位置までいた気がする。このときはまさかこのベースラインが最後のアンサンブル素材にも乗るとは思っていなかった。
  • が、終了1週間ぐらい前までlocal cvは伸びるがLBは伸びない長い暗黒期が訪れる。しかも完全にCVとLBが逆相関。
    逆相関のCVとLB。ヤバすぎだろ!
  • ここらへんで、個人で本コンペに取り組まれていた社内メンバーに自分がダダをこねてチームマージする。合計4人に。
  • チームマージしてなお、絶望的にスコアが伸びず、完全にお通夜ムードが漂う。
  • 私は頭が狂いました。食べるとKaggleで優勝できると噂のwodori(店名)を食したり、京都で学問成就のお参りをし始める。手を動かせ。
    wodori -> 【公式】をどり 大手町店 | ー大手町で人気の焼き鳥居酒屋ー
    学問成就の写経を行ったところ。これに関してもアメックスを持っているブルジョワな友人にフリーライド。 -> 高台寺塔頭 圓徳院 客殿(旧 京都特別観光ラウンジ)|クレジットカードはアメリカン・エキスプレス(アメックス)
  • お参りした直後、コンペ終了4日ぐらいまえにチームメイトに神アイデアが降臨する。突然銀圏に浮上。同日、シングルモデルで金圏まで浮上。適当にアンサンブルしたら4位まで来てしまった。引き寄せの法則か?
  • とりあえず残りの少ない時間でアンサンブル用のモデルを学習しまくる。領域展開!(GCPでA100を3枚借りる)
  • 時間がなさすぎて結局アンサンブル素材を載せきることはできなかったと思うが、最終的に8位でfinish。
  • 最終サブは双方ともに最高LBじゃないのに、双方ともに同点最高Private scoreだったので、全員がベストな選択ができたのは熱かった。
  • ちなみに最終サブはコンペ終了の2,3時間とかに回り終わったので今回もギリギリを攻め過ぎでワロタ。サブをミスってたら順位がいくらか下の方に位置していたかもしれない。無理をしないといいつつ最後の最後までチームで粘り強く諦めなかった結果だと思う。

Masterは目指そうかな

とりあえずもう1枚銀を取ってMasterにはなりたいなぁというお気持ち。 ただ称号に実力が見合っていないので、精進したいがどうやったら強くなれるのかイマイチ謎。AtCoderだったらとりあえず過去問を解きまくるというアプローチで水色まで行けたのだが。

今の所、自然言語コンペに全ブッパという感じ。画像系やテーブル、マルチモーダル系のコンペも参加してどういうふうに取り組むのか知りたいところであるがカス成績になることは明白なのでMaster取得前に参加するかMaster取得後に参加するかはかなり迷うところ。面白そうなコンペがあったらこっそり教えて下さい。

最後に一言、自分を team merge master にキャリーしてくれる方を募集中です。