はじめに
私は、機械学習の本質は損失関数だと考えています。この記事では、Kaggleを通して成長するための損失関数、すなわち「コンペの復習方法」についてまとめます。
大前提ですが、私自身コンペの復習を完璧にできているかというと、できていないのが正直なところです。むしろ、この記事は自戒の念を込めて執筆しています。今年真剣に取り組んだ(≒1ヶ月以上コミットできた)コンペ6件の戦績を振り返ると、18位🥈 -> 15位🥈 -> 135位 -> 20位🥈 -> 7位🥇 -> 15位🥈でした。今年だけでKaggle Masterになれるくらいの好成績ではありますが、もしかしたら🥇5枚の世界線もあったのかなと少し悔しい気持ちもあります。来年こそは🥇を量産するために、自身の伸びしろポイントである「コンペの復習方法」について改めて考えてみようと思い、筆を執りました。
復習の基本方針
コンペの復習の目的は、
「知らないことを知っている状態にし、できないことをできる状態にする」
ことに尽きると思っています。
具体的には、次の遷移を目指します。
知らない・できない ⇨ 知ってる・できない ⇨ 知ってる・できる
また、AI時代特有の現象として、あまり理解していなくても動かせてしまうケースがあります。そのため、知らない・できる ⇨ 知ってる・できる という遷移も大切だと感じています。本質的な理解を伴った技術の習得を心がけたいです。
コンペの復習を進める上で、私が特に重視していることは以下の3つです。
- 長期的視点を持つ: 即効性を求めず、将来のコンペで活きる学びを意識する
- 要素に分解し、手札を増やす: ソリューションを要素に分解し、再利用可能な形で蓄積する
- 環境構築・実験管理・コンペのテンプレートに投資する: これらはROI(投資対効果)が極めて高い
コンペの復習をするタイミングは、①終わった直後、②類似コンペ参加中(ナンバリングなど)、③Kaggle関連書籍で勉強しているとき、などが多いです。
復習の目標は、次のコンペで「強くてニューゲーム」ができる状態を目指し、知識をチャンク化して、九九のように自然に引き出せるレベルまで定着させるようにします。
そして、コンペ終了後には必ず
「今の知識を持ってDay1に戻るとしたらどう動くか」
を考えるようにしています。これは点ではなく線として戦略を見直す作業で、大局観のトレーニングにもなります。
具体的なコンペの復習方法
この章では、実践的なコンペの復習方法についてまとめます。
ソリューションを読む・書く
コンペが終了すると、一部の参加者はソリューションを公開することが慣例となっています。終了後一週間以内くらいであれば、参加者もコンペページを見ていることが多いので、質問なども答えてもらいやすいです。
公開されたソリューションを読むことが、最も代表的なコンペの復習方法だと考えています。
復習の観点としては、ソリューションの要素を分解し、それぞれの要素に関して、①自分たちのチームができていたか否か、②上位チームができていたか否かの2軸で分類することがオススメです。
以下、OK = できていた、NG = できていなかった と表記します。実際にはグラデーションがありますが、便宜上Booleanで示します。
また、ソリューションの順位帯(メダル圏外・銅メダル・銀メダル・金メダル・Prize圏内)ごとにどのくらいまで取り組んでいるかを把握することも重要です。ソリューションを多読することで、目標の結果を達成するためにはどれだけやれば良いかを理解することを目指します。
これは個人的な思いですが、色々な順位帯のソリューションを読みたいです。結果に限らずソリューションを公開する方が増えてくれたら嬉しいです。自分は、真剣に取り組んだコンペは、結果に関わらず必ずソリューションを書くことを習慣にしています。
ソリューションを読むことに慣れてきた場合は、ソリューションを書くことに挑戦することが良いと思います。ソリューションを書く過程で、俯瞰して考える能力が磨かれます。私は、コンペ期間中であっても定期的にラフスケッチやマークダウンの箇条書きで簡易ソリューションをまとめ、伸びしろがどこにあるかを考えるようにしています。
有志による振り返り記事が公開されていることも多いので、積極的に参考にしましょう。
あるいは、金メダルを獲得した、Tierが上がったなど、思い入れ深いコンペの場合は、自身で振り返り記事を書くのも良いと思います。私がソロ金メダルを獲得してKaggle Masterに昇格した『LLM 20 Questions』は最も思い入れ深いコンペだったので、コンペの終了後に振り返り記事を2つ公開しました。おかげでコンペ全体を俯瞰することができました。
振り返りイベントに参加する
振り返りイベントが開催されている場合は参加することがオススメです。
先日開催された、『MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会』は最高のイベントでした。自身が参加していない場合であっても、上位Kagglerの考え方から学ぶことができるのが、振り返りイベントの良いところです。
また、関西Kaggler会や関東Kaggler会でも、上位ソリューションについての発表が聞けることがあります。
あるいは、発表者として参加することでコンペの復習のモチベーションを高めることに繋がるかもしれません。
Late Submissions / Late Experiments
最後の復習方法は、Late Submissions / Late Experimentsです。これをどれだけやりきれるかが、成長の試金石となると感じています。そして、私自身がまだまだ未熟だと感じている部分でもあります。
以前レジェンドKagglerのSenkinさんがXに投稿されていたポストに感銘を受けました。
多くのコンペでは、開催期間中のサブミッション制限は1日5回程度ですが、終了後は1日あたり100回まで可能になることが多いです。 これは計算リソースを考えると異例の措置ですが、「ほとんどのKagglerは復習をしない」という運営からの挑戦状とも受け取れます。
Late Submissions / Late Experimentsにより、Ablation Studyを行ったり、目標スコアまで伸ばせるかを確認することが大切と感じています。強いKagglerほど、納得いくまで(金圏内や1位超えまで)復習を続けている印象があります。
MAPコンペのチームメイトのしんちろさんが、関西Kaggler会で発表されていた資料は、理想的なAblation Studyの例だと感じました。この発表を聴講したことが、自分もコンペの復習をもっと頑張ろうと思うきっかけとなりました。
おわりに
余談ですが、2023年から、一人アドカレに挑戦することを毎年の恒例としています。3年目となる今年も一人アドカレに挑戦していて、この記事が25記事目になります。この記事が公開される頃には、全ての記事が出揃っているはずなので、興味がある方はご覧頂ければ嬉しいです。
一人アドカレまとめ記事
また、今年からは自作PCを導入して手元に計算リソースを確保しました。クラウドのような従量課金を気にせず実験を回せるオンプレGPU環境は、試行錯誤が必要な「復習」において最強の味方となり、学習が非常に捗りました。
Kaggleに参加することで、新しいことを日々学ぶことができました。冒頭でも触れた通り、今年は数多くのコンペに真剣に取り組むことができ、目標だったコンペ総合ランキングTop100入りも達成できました。コンペの開催期間は、得た知見を世に公開することが難しい(プライベートシェアリング禁止ルールに抵触する)ので、コンペ終了後や年末にまとめて公開するということをこれからも続けようと思います。とても良い復習にもなりました。
最後まで読んでいただき、ありがとうございました。皆様の良いKaggleライフを応援しております。
参考にしたもの
本文中で引用したものに加えて、記事執筆のために参考にした発表資料・記事・ブログ・動画・ツイートを下記に記します。
