- 複数のLLMを同条件でチェスに投入すると、その大半は序盤以降に崩れたが、gpt-3.5-turbo-instructだけがStockfishの最低難易度相手に非常に強い性能を示した
- 実験は、LLMが白を持ってStockfish最低難易度と対局し、各ターンの盤面状態をチェスエンジンのセンチポーン評価で採点する方式だった
llama-3.2-3b, llama-3.1-70b, Qwen-2.5-72b, command-r-v01, gemma-2-27b, gpt-3.5-turbo, gpt-4o-mini, gpt-4o, o1-miniはいずれもgpt-3.5-turbo-instructに近づけなかった
- 近い系統のモデル比較では、instruction/chatチューニングがチェス性能を下げる方向に見えたが、悪化の幅はモデルごとに小さい場合もあれば非常に大きい場合もあった
- オープンモデルでは、プロンプト末尾の空白1つが性能を大きく変えるトークナイザ問題が現れ、チェス記法入力はLLMの内部表現と生成制約に敏感に反応した
実験設定と評価方法
- LLMにはチェスのグランドマスターのように次の一手を選ぶよう求めるプロンプトが与えられ、入力は途中まで進んだ棋譜だった
- 表記には
e4, Rdf8, R1a3のような標準代数記法を使用
- 手番番号は書かず、選択理由も説明しないよう指示されていた
- すべての対局でLLMは白を持ち、相手は標準的なチェスAIであるStockfishの最低難易度だった
- 各ターン後の盤面状態をチェスエンジンで点数化し、モデル性能を比較した
- 単位はセンチポーンで、ポーン1つを100点とし、位置価値も反映する
- 対局終了時は、LLMの勝ちを+1500、引き分けを0、負けを-1500として扱った
序盤以降に急激に弱くなるモデル群
llama-3.2-3bは30億パラメータのbase modelで、50局すべてに敗れた
- 標準的なオープニングは数手こなせたが、すぐに駒を失い始めた
- 相手がStockfishの最低設定だったにもかかわらず全敗だった
- 700億パラメータの
llama-3.1-70bはやや改善しただけで、依然として非常に悪い結果だった
llama-3.1-70b-instruct, Qwen-2.5-72b, command-r-v01, gemma-2-27bも同様の方法で試験されたが、強いチェス性能は示さなかった
- 数局試した
llama-3.1-405bもgpt-3.5-turboより大きなモデルだったが、結果は依然として悪かった
例外的に強かったgpt-3.5-turbo-instruct
gpt-3.5-turbo-instructはOpenAIのクローズドモデルで詳細は不明だが、10回の試験で非常に良い性能を示した
- Stockfishの難易度を数段階上げても全局勝てるほど強かった
- 似た名前の
gpt-3.5-turboは、より対話向けにチューニングされたモデルであり、チェス性能はgpt-3.5-turbo-instructと大きく異なっていた
gpt-4o-mini, gpt-4o, o1-miniも試験対象で、gpt-4oはややゆっくり負けたものの全局敗北した
- インターネット上のLLMチェス実験の流れは、2023年9〜10月には上級アマチュア級という期待が高まった後、最近のモデルでは再び序盤以降に崩れる傾向へ戻った形だった
instruction/chatチューニングとチェス性能
- 近い系統でbaseに近いモデルと追加チューニング済みモデルを比べると、追加のinstructionチューニングはすべてチェス性能を悪化させる方向に出た
- 悪化の幅は一定ではなかった
- 2つのケースでは差は小さかった
- 1つのケースでは差が非常に大きかった
gpt-3.5-turbo-instructという名称は、一般的な命名慣例とは異なる解釈が必要
- ここでは
gpt-3.5-turboよりbase modelに近いモデルとして扱われる
- 通常
instructやitが対話・指示遂行チューニングの強さを意味するのとは逆である
考えられる原因候補
-
大きなbase modelはチェスを指せるが、instructionチューニングが壊している可能性
- 実験結果とは整合するが、より大きい
llama-3.1-405bも悪い結果だったという反例がある
-
gpt-3.5-turbo-instructがより多くのチェス対局で学習された可能性
- どのモデルも多くのチェス対局を学習している可能性は高いが、正確な量は分かりにくい
-
Transformerアーキテクチャの違いが影響した可能性
- Llama系モデルがチェスに特に弱い可能性も排除しにくい
-
異なるデータ型どうしで競合があった可能性
- チェス対局だけで訓練したTransformerはチェスを非常によく指せる
gpt-3.5-turbo-instructがチェス対局比率の高いデータで学習されていたなら、パラメータのより大きな比重がチェスに使われていた可能性がある
- この仮説が正しければ、十分に大きいモデルはチェス対局比率が低くても、十分なチェスデータを学習すれば上手く指せるはずである
実装詳細と制約
- オープンモデルは直接実行し、OpenAI以外のモデルをオープンモデルとして分類した
- オープンモデルの実行には
Q5_K_M量子化を使用した
- オープンモデルでは、現在可能な合法手を直接生成し、llama.cpp grammarsで出力を制約して常に合法手が出るようにした
- OpenAIモデルは完全なgrammarをサポートしていないため、最大10回生成させ、それでも合法手が出なければランダムに手を選んだ
- チャットモデルである
llama-3.1-70b-instruct, gemma-2-27b-it, gpt-3.5-turbo, gpt-4o-mini, gpt-4oには別個のsystem promptが使われた
o1-miniはsystem promptを変更できないため、そのまま実行された
- オープンモデルはtemperature 0.7、OpenAIモデルはデフォルト値で実行された
プロンプトの空白とトークナイザの奇妙な挙動
- オープンモデルでは、
1. e4 e5 2. のように末尾に空白があるプロンプトは、1 e4 e5 2.のように空白なしで終わるプロンプトよりはるかに悪い性能を示した
- 原因はトークナイザに関係していると考えられる
- Llamaトークナイザは
1.の後で eを1つのトークンとして生成する
- これは空白トークンの後に
eを生成するのと同じではない
- 入力末尾に空白を入れて次トークンを生成させると、モデルは混乱しやすい状況に置かれる
- 適切な処理方法は、入力の最後のトークンを削除し、削除された文字列で始まるすべての文字列に対して制約生成を行うtoken healingである
- 実装ではtoken healingの代わりに空白を外し、grammarが空白を生成してもしなくてもよいよう変更したうえで、現在の合法手と任意の空白を生成させた
- 更新では、この現象の原因は実際に特定されており、正しい説明はまだ誰も当てていないというヒントが追記されている
OpenAI最適化の可能性
- 1つの仮説として、OpenAIがチェス性能への関心を見て、
gpt-3.5-turbo-instructのチェス性能を高めるために学習データ、ファインチューニング、アルゴリズムのいずれかを最適化した可能性がある
- 同じ仮説では、その最適化はコストや他機能の低下といったトレードオフのため、後続モデルには維持されなかった可能性もある
- これは明確な根拠ではなく、「OpenAIが意図的にやったかもしれない」という水準の推測であり、タイミングが合っているかも確かではない
1件のコメント
Hacker News のコメント
この記事は、ひとつの明白な可能性を見落としているように思う。OpenAI がチェスを「勝つべき」ベンチマークと見なし、
gpt-3.5-turbo-instructの中でチェスだけを特別扱いしたが、その後のモデルでは継続的なメディアの関心を生めなかったため、その特別処理を入れなかったのかもしれないテストには重要な点がいくつかある。クローズドな OpenAI モデルは合法手が出なければ最大 10 回生成し、それでも駄目ならランダムに選んでいた。公開モデルは
Q5_K_M量子化で自前実行され、プロンプト末尾の空白の有無だけで公開モデルの性能が大きく変わり、公開モデルは温度 0.7、OpenAI モデルはデフォルト値を使っていたトークナイザの奇妙な挙動、温度、量子化、ランダム手、チェス用プロンプトがすべて混ざっていて、結果をどう解釈すべきか分からない。それでも記事は興味深い
もしかすると、本当に知的なモデルが欲しいなら、トークン化そのものをやめるべきなのかもしれない。モデルが何を見て世界をどう認識するかを、最初から入力情報フローの構造で制限している
生のビットやバイトとして扱うのが遅いのは分かるが、大きな問題がトークン化に起因しているかもしれないという仮説を反証するのは、比較的安くて簡単そうに見える。根本的に異なるトークン化の研究がもっと見当たらないのは驚きだ
例えば、LLM が基本的な数え上げをできない理由はトークン化のせいだと言われるが、同じ LLM でも思考過程プロンプトを使えばうまく数えられる。そうなるとトークン化では説明できない。問題は、段階的に解けば正確に解決できると人間が教える必要がある点で、その助けがなければただ推測しがちになることだ
画像をトークンにでき、音声もトークンにできるなら、モデルが自分で選んだ意味表現トークンの集合を作り、そのトークンをまたテキストにデコードすることもできるのではないかと考え続けている。欠点は、エンコードされたトークンをテキストに戻す過程が非可逆になるため、見たテキストを 1:1 で引用できなくなることだ
私の理解では、OpenAI は
gpt-4oレポートの画像でまさにこういうことをしたようだ。「Explorations of capabilities」を参照: https://openai.com/index/hello-gpt-4o/Karpathy も同じ考えに同意している。2時間かけてトークナイザを作り直しながら、トークナイザを嫌う動画だ
プロンプトと盤面をいろいろな方法で変えて実験してみる価値がある。ちなみにモデルに与えられた盤面はこの図だ: https://i.imgur.com/qRxalgH.png
この実験には奇妙な点が少なくともひとつあるかもしれない。例えば、指示チューニングされていない派生モデルに指示文を与えることが、かえって逆効果になる可能性がある。より重要なのは、切り詰められた PGN だけを与えたとき、この局面で白がグランドマスター級のプレイヤーに見えるのか疑問だという点だ。モデルがチェスをよく理解していたとしても、現在の局面で最もありそうな手を予測しようとするはずで、白が下手なプレイヤーだと判断すれば、悪手のほうが可能性が高いと予測するかもしれない
それでも Stockfish を最低レベルにして「非常に強い相手」のように対戦させたことが、モデルをある程度混乱させた可能性はある。チャートを私が正しく解釈しているなら、モデルの序盤の数手は問題なさそうで、その後から問題が生じるように見える。プロンプトのガイド、Stockfish の強さ、開始局面、仮想プレイヤー名などを変えて反復実験する価値がある
単一の一手を相手にしたのなら、「勝つ」とか「負ける」とは一体どういう意味になるのだろうか?
同意。プロンプトのバリエーションはいくつか試せる。モデルに思考過程を許可したらどうなるか。この実験では明示的に禁止されていた。さらに各手ごとに盤面のポジションをプロンプトで説明してやれば、モデルが内部で計算したり推定したりしなくて済む
モデルが違法手を試すことがあるのか気になる。原文の著者はそこに触れていないが、チェスのルールはかなり恣意的だし、LLMは難しい問題で答えがないと認めるより、もっともらしくでっち上げることで悪名高いので、少なくとも一度は必然的に起きそうに思える
教養のある人たちが、なぜLLMがチェスをそれなりのレベルで指せるはずだと期待するのか理解できない
LLMは自分のデータの品質を知らない。「xのように振る舞え」というプロンプトは、チェスに明らかに必要な実際の推論や決定的な計算の代替にはならない
turbo-instructが実際にうまく指せるという事実に驚くべきではないのか?「実際の推論」のような根拠のない擬人化された直感に基づく雑な主張があふれている。今の状況は、誰も何が起きているのかきちんと理解していないという良い証拠だと思うあるメンタルモデルが「LLMはチェスを指せないはずだ」と言うなら、強いチェスを指すLLMを説明できない。逆に「うまく指せるはずだ」と言うモデルは、多くの大規模モデルがチェスで悲惨に失敗する理由を説明できない。明らかにもっと複雑なことが起きている
「それなりのレベル」は主観的だが、その程度なら初心者には勝てるはずだ。記事で使われていたStockfishの最低レベルも、最下位クラスの中級者レベルだ。現在公開されている実装について言っているのか、LLMというアイデア一般について言っているのかによって違うし、より良い結果を望むなら、チェス本や過去の対局分析をはるかに多く食わせることもできる
GPT-3.5-turbo-instructが上級アマチュア程度に指すのを自分で見た。ただし新しいモデルに入っているRLHFと蒸留が、その能力を壊しているようだgpt-3.5-instructがStockfishに勝てるのか、ということになる公開モデルを
Q5_K_M量子化で動かしたというのは、すべてのパラメータを非可逆圧縮したという意味でしかない。おそらく重要ではないだろう?チェスをシーケンスとして学習する方式は、利益よりも問題のほうを多く生むと思う。1兆局を学習しても救いにはならない: https://en.wikipedia.org/wiki/Shannon_number
完全を期して付け加えると、現代のチェスエンジンは高品質なチェス専用モデルをツールの一部として使っており、現存または過去のどんなプレイヤーとも毎回少なくとも引き分けにできる。相手がごく小さなミスでもすれば負ける。Stockfishのレベルを最大に上げるか、少なくとも1800+ Eloのプレイヤーに上げれば、より成功したゲームが出てくるかもしれないが、それは上級者がひどい手をあまり指さないために訓練データのノイズが減った結果であって、より良いプレイを意味するものではない
数十億・数兆のポジションで最善手を学習し、それを何らかのAIに入れる方式のほうがうまくいくかもしれない。似たポジションはしばしば同じ種類の最善手を持つ
gpt-3.5-turbo-instruct、gpt-3.5-turbo、gpt-4を含む関連実験のまとまりを見つけた結論も同じくらい驚きだ: gpt-3.5-turbo-instructのほうがチェスをはるかにうまく指す
https://blog.mathieuacher.com/GPTsChessEloRatingLegalMoves/
OpenAIはゲームプレイAIを作った経験が非常に多い。覚えているなら、数年間それが主力分野だった。だからチェスの学習が全般的な知能に影響するかを見るために、あるモデルをチェスにうまく合うように作ったのだと思う。人がチェスを学ぶと賢くなれるし、数学やプログラミングを学ぶのもそうなり得るのと同じだ
LLMは推論や探索をせず、以前のテキストに基づいてテキストを書く。だから私たちの目にはプレイのように見えるかもしれないが、実際には過去の対局に基づく賢い推測だ。Kasparovが実際の駒配置を思い浮かべずに手を書き出すのに似ている。興味深い実験は、ルールだけを与えたときにモデルが指せるかを見ることだが、おそらく指せないだろう。今は目標を追跡しているのではなく、記憶で再生している状態だ。まだ前方注意のようなものはなく、ビームサーチは十分に高コストなので、むしろ古典的なチェスアルゴリズムにフォールバックするほうがよい
OpenAIは対話型エージェント以外はやっていない