はじめに
先日、LLM Securityコンペ(#21 atmaCup)に参加し、35位/244チームとなりました!
コンペの内容紹介・自身の取り組み・最終結果発表後の考察 は下記の記事をご覧頂ければと思います。
この記事では、コンペに参加した際に遭遇した「進研ゼミ現象」についてまとめます!
Nano Banana Proにより作成
『LLM Prompt Recovery』: 手元評価をLBに近づける
自身のソリューションの一番のアピールポイントは、LBで使われている隠された評価システムを手元で上手く模倣したことでした。
この、「手元評価をLBに近づける」という目標に対してのアプローチとしては、『LLM Prompt Recovery』の3位ソリューションを参考にさせて頂きました。同コンペはtrainデータセットが数レコードしか提供されず、参加者自身でデータセットを生成する必要がありました。その際に、Public LBの値をいくつかサンプリングし、手元評価をLBに近づけることが有力でした。特に3位チームは、スクリプトを公開しているため大変勉強になりました。私にとって初めてのLLMコンペでしたが、『LLMコンペの戦い方』の基礎を学ぶことができました。
『Konwinski Prize』: 離散的なスコアから組み合わせを復元する
#21 atmaCupのLBは、連続値に見えますが、実は有限の組み合わせからなる離散値でした。この離散的なLBスコアから有限の組み合わせをリバースエンジニアリングするアプローチですが、『Konwinski Prize』のこちらのディスカッションで見かけた方法を参考にしました。こちらのTipsも、先述の手元評価をLBに近づける目標達成に大いに参考になりました。
以下はコンペ参加中の自身のメモです。
『NeurIPS 2025 - Google Code Golf Championship』: 各社のLLM APIの使い方
『NeurIPS 2025 - Google Code Golf Championship』では、Pythonコードを動作を変えずになるべく短くすることを競いました。その際に、LLM APIを叩きまくる必要があり、各社のLLM APIの使い方に詳しくなりました。登場したばかりのモデルや触ったことがないLLM APIであっても、経験を積んだおかげで上手く使いこなせる自信が付きました。
#21 atmaCupでは、いくつかのLLM APIを使い分ける必要があり、上記の経験が活用できました。
下記記事に主要LLM APIの基本的な使い方をまとめたので、興味がある方はご覧いただければと思います。
『Santa 2024 - The Perplexity Permutation Puzzle』, 『Drawing with LLMs』: モデルベーススコアの最適化
『Santa 2024 - The Perplexity Permutation Puzzle』と『Drawing with LLMs』のメトリクスは、LLM-as-a-Judgeによるモデルベーススコアでした。モデルベーススコアの計算は一定のコストがかかることや、どれくらいの歩幅で改善していけば良いかなどの勘所を理解した状態で、攻撃プロンプトの改善に着手することができました。
『LLM 20 Questions』: 対戦型LLMコンペの大局観
最後に、『LLM 20 Questions』です。こちらのコンペは、私が9位・ソロ金メダルを獲得しKaggleマスターへの昇格を決めた思い入れ深いコンペです。このコンペは#21 atmaCupの問題設定と同じく、対戦型LLMコンペで、勝負における大局観の参考になりました。メタゲームを考えて、問題設定のモデル化などを効果的に行うことができました。
#21 atmaCupの最初のサブミッションに「絵文字ハックプロンプト」(🤣を文字数制限まで敷き詰めた攻撃プロンプト)を採用しましたが、こちらは26位ソリューションで使用されていた手法を参考に思いつきました。
まとめ
#21 atmaCupは、これまでの参加したLLMコンペで培った技術が幅広く活きました。コンペに参加中は、一人で「進研ゼミ現象」にテンションが上がっていました。そのため、こちらの記事で共有させて頂きました。
コンペでは過去の類似問題のソリューションを体系的に学ぶことの重要性を実感しました。
最後に、本文では言及しきれなかったものの、間接的に影響を与えたコンペたちを挙げて締めくくりたいと思います。
▼ 知見が役立ったその他のコンペ
▼ 知見が役立ったその他のハッカソン
▼ 関連性が高く参考になったコンペ(未参加でソリューションの勉強のみ)


