1 ポイント 投稿者 GN⁺ 2024-11-15 | 1件のコメント | WhatsAppで共有
  • 複数の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-405bgpt-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に近いモデルとして扱われる
    • 通常instructitが対話・指示遂行チューニングの強さを意味するのとは逆である

考えられる原因候補

  • 大きな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件のコメント

 
GN⁺ 2024-11-15
Hacker News のコメント
  • この記事は、ひとつの明白な可能性を見落としているように思う。OpenAI がチェスを「勝つべき」ベンチマークと見なし、gpt-3.5-turbo-instruct の中でチェスだけを特別扱いしたが、その後のモデルでは継続的なメディアの関心を生めなかったため、その特別処理を入れなかったのかもしれない

    • まさにそれだと思う。チェス評価が追加されたプルリクエストがここにある: https://github.com/openai/evals/pull/45
    • 私も同じ疑念を持っている。LLM が「チェスを学んだ」というより、チェスのゲームを認識して指示をチェスエンジンに渡す方法を「学んだ」のかもしれない。もしそうなら、まったく印象的ではない
    • その可能性はかなり高そうだが、特別処理が LLM 内部に強化学習で注入されたものなのか、それとも OpenAI API 呼び出しの向こう側で数兆パラメータの LLM だけでなく Stockfish インスタンスも一緒に動かしているのかが気になる
    • チェスは当然、勝つ価値のあるベンチマークだったし、Watson の時代からそうだった。その前は Mechanical Turk にまでさかのぼる
    • 公平に言えば、記事でも「理論 2: GPT-3.5-instruct はより多くのチェス棋譜で学習された」とは述べている
  • テストには重要な点がいくつかある。クローズドな OpenAI モデルは合法手が出なければ最大 10 回生成し、それでも駄目ならランダムに選んでいた。公開モデルは Q5_K_M 量子化で自前実行され、プロンプト末尾の空白の有無だけで公開モデルの性能が大きく変わり、公開モデルは温度 0.7、OpenAI モデルはデフォルト値を使っていた
    トークナイザの奇妙な挙動、温度、量子化、ランダム手、チェス用プロンプトがすべて混ざっていて、結果をどう解釈すべきか分からない。それでも記事は興味深い

    • 記事の後半に埋もれていた内容だった。以前 LLM がチェスを指すのを見たときは、合法手すらまともに指せていなかったので、ここではモデルたちがどうやって全て合法手を指せているのか気になっていた
  • もしかすると、本当に知的なモデルが欲しいなら、トークン化そのものをやめるべきなのかもしれない。モデルが何を見て世界をどう認識するかを、最初から入力情報フローの構造で制限している
    生のビットやバイトとして扱うのが遅いのは分かるが、大きな問題がトークン化に起因しているかもしれないという仮説を反証するのは、比較的安くて簡単そうに見える。根本的に異なるトークン化の研究がもっと見当たらないのは驚きだ

    • 「トークン化問題」と呼ばれるものの多くは、実際には推論問題なのに、些細な技術的問題のせいだと誤って扱われていることが多いと思う
      例えば、LLM が基本的な数え上げをできない理由はトークン化のせいだと言われるが、同じ LLM でも思考過程プロンプトを使えばうまく数えられる。そうなるとトークン化では説明できない。問題は、段階的に解けば正確に解決できると人間が教える必要がある点で、その助けがなければただ推測しがちになることだ
    • バイト単位の学習は現実的には難しいと思う。それでも、手作りの、結局は人間式のトークンを使うのは非常に間違っている感じがする。実際のトークナイザを見ると、経験則に基づいて何をトークン化するかを変える正規表現のような面白いものが入っている
      画像をトークンにでき、音声もトークンにできるなら、モデルが自分で選んだ意味表現トークンの集合を作り、そのトークンをまたテキストにデコードすることもできるのではないかと考え続けている。欠点は、エンコードされたトークンをテキストに戻す過程が非可逆になるため、見たテキストを 1:1 で引用できなくなることだ
      私の理解では、OpenAI は gpt-4o レポートの画像でまさにこういうことをしたようだ。「Explorations of capabilities」を参照: https://openai.com/index/hello-gpt-4o/
    • 人間の脳に専用の言語処理領域があるのには理由がある。トークン化はかなり堅実な戦略である可能性が高い。本当の核心は、言語があらゆる形の知識をエンコードするのに適した方式ではないということだ
    • https://youtu.be/zduSFxRajkE
      Karpathy も同じ考えに同意している。2時間かけてトークナイザを作り直しながら、トークナイザを嫌う動画だ
    • トークンからバイトへ降りると、モデルサイズが爆発する。今は参考文献を見つけられないが、平均トークンサイズを小さくすると、モデルの幅、つまり各層のサイズがそれに応じて二乗で増えるという。推論速度だけでなく学習速度にも影響する
  • プロンプトと盤面をいろいろな方法で変えて実験してみる価値がある。ちなみにモデルに与えられた盤面はこの図だ: https://i.imgur.com/qRxalgH.png
    この実験には奇妙な点が少なくともひとつあるかもしれない。例えば、指示チューニングされていない派生モデルに指示文を与えることが、かえって逆効果になる可能性がある。より重要なのは、切り詰められた PGN だけを与えたとき、この局面で白がグランドマスター級のプレイヤーに見えるのか疑問だという点だ。モデルがチェスをよく理解していたとしても、現在の局面で最もありそうな手を予測しようとするはずで、白が下手なプレイヤーだと判断すれば、悪手のほうが可能性が高いと予測するかもしれない

    • そのように始まる強いプレイヤー同士の対局をいくつか見つけられるので、モデルがわざと悪手を予測しているという私の仮説は揺らいでいる: https://www.365chess.com/search_result.php?search=1&p=1&m=8&n=3071&order=welo&ms=e4.e6.d3.c5.Nf3.Nc6.g3.Nf6&rev=&wid=&bid=
      それでも Stockfish を最低レベルにして「非常に強い相手」のように対戦させたことが、モデルをある程度混乱させた可能性はある。チャートを私が正しく解釈しているなら、モデルの序盤の数手は問題なさそうで、その後から問題が生じるように見える。プロンプトのガイド、Stockfish の強さ、開始局面、仮想プレイヤー名などを変えて反復実験する価値がある
    • 実験はゲームの初手から始めて、各ゲームを最後まで進めていた。リンクした局面は、各手ごとにゲーム状態をモデルに入れる形式の例にすぎない
      単一の一手を相手にしたのなら、「勝つ」とか「負ける」とは一体どういう意味になるのだろうか?
  • 同意。プロンプトのバリエーションはいくつか試せる。モデルに思考過程を許可したらどうなるか。この実験では明示的に禁止されていた。さらに各手ごとに盤面のポジションをプロンプトで説明してやれば、モデルが内部で計算したり推定したりしなくて済む

    • 単一の手ではなく、ゲーム全体を指したもの
  • モデルが違法手を試すことがあるのか気になる。原文の著者はそこに触れていないが、チェスのルールはかなり恣意的だし、LLMは難しい問題で答えがないと認めるより、もっともらしくでっち上げることで悪名高いので、少なくとも一度は必然的に起きそうに思える

  • 教養のある人たちが、なぜLLMがチェスをそれなりのレベルで指せるはずだと期待するのか理解できない
    LLMは自分のデータの品質を知らない。「xのように振る舞え」というプロンプトは、チェスに明らかに必要な実際の推論や決定的な計算の代替にはならない

    • それなら、turbo-instructが実際にうまく指せるという事実に驚くべきではないのか?「実際の推論」のような根拠のない擬人化された直感に基づく雑な主張があふれている。今の状況は、誰も何が起きているのかきちんと理解していないという良い証拠だと思う
      あるメンタルモデルが「LLMはチェスを指せないはずだ」と言うなら、強いチェスを指すLLMを説明できない。逆に「うまく指せるはずだ」と言うモデルは、多くの大規模モデルがチェスで悲惨に失敗する理由を説明できない。明らかにもっと複雑なことが起きている
    • 実験をする主な目的の一つは、私たちの先入観が正しいかを確かめることだ。もちろん、その問いに関心がないなら望遠鏡をのぞく必要はない
    • 十分な学習情報があれば、これはパズルに近い。LLMは与えられた手の後の盤面状態をうまく出力できるし、ポジションの要約もそれほど悪くなく、少なくとも1手先の危険は列挙できる
      「それなりのレベル」は主観的だが、その程度なら初心者には勝てるはずだ。記事で使われていたStockfishの最低レベルも、最下位クラスの中級者レベルだ。現在公開されている実装について言っているのか、LLMというアイデア一般について言っているのかによって違うし、より良い結果を望むなら、チェス本や過去の対局分析をはるかに多く食わせることもできる
    • チェスは単純な確率的シーケンスモデリングタスクであり、GPT-3.5-turbo-instructが上級アマチュア程度に指すのを自分で見た。ただし新しいモデルに入っているRLHFと蒸留が、その能力を壊しているようだ
    • それなら問いは、なぜgpt-3.5-instructがStockfishに勝てるのか、ということになる
  • 公開モデルをQ5_K_M量子化で動かしたというのは、すべてのパラメータを非可逆圧縮したという意味でしかない。おそらく重要ではないだろう?

    • OpenAIの非量子化モデルと競わせるなら、おそらく重要だろう
  • チェスをシーケンスとして学習する方式は、利益よりも問題のほうを多く生むと思う。1兆局を学習しても救いにはならない: https://en.wikipedia.org/wiki/Shannon_number
    完全を期して付け加えると、現代のチェスエンジンは高品質なチェス専用モデルをツールの一部として使っており、現存または過去のどんなプレイヤーとも毎回少なくとも引き分けにできる。相手がごく小さなミスでもすれば負ける。Stockfishのレベルを最大に上げるか、少なくとも1800+ Eloのプレイヤーに上げれば、より成功したゲームが出てくるかもしれないが、それは上級者がひどい手をあまり指さないために訓練データのノイズが減った結果であって、より良いプレイを意味するものではない

    • その通り。以前にも指摘されたように、可能なチェスのポジション数は、既知の宇宙の原子数をどれだけ大きく見積もっても、簡単に、圧倒的に上回る
    • Shannonに言及したので聞くが、その問題空間の最小代表サンプルサイズはどれくらいなのだろう?インターネットや本で公開されているチェスの手の数に十分近いのだろうか?
    • その通り。シーケンスから一度外れると道に迷う
      数十億・数兆のポジションで最善手を学習し、それを何らかのAIに入れる方式のほうがうまくいくかもしれない。似たポジションはしばしば同じ種類の最善手を持つ
    • 正直なところ、絶対に指されない手を捨て、対称性や実質的に似た盤面を考慮すれば、チェスはそれほど大きなゲームではないかもしれないと思う。そうしたポジションは非常に単純なパターンマッチャーでも検出できる
  • gpt-3.5-turbo-instructgpt-3.5-turbogpt-4を含む関連実験のまとまりを見つけた
    結論も同じくらい驚きだ: gpt-3.5-turbo-instructのほうがチェスをはるかにうまく指す
    https://blog.mathieuacher.com/GPTsChessEloRatingLegalMoves/

    • 実際のチェスエンジンを関数呼び出ししている可能性に賭けたい。トークン数やゲームの複雑さに応じて推論時間がどう変わるか、あるいは変わらないかを時間分析すれば、証明できそうだ
  • OpenAIはゲームプレイAIを作った経験が非常に多い。覚えているなら、数年間それが主力分野だった。だからチェスの学習が全般的な知能に影響するかを見るために、あるモデルをチェスにうまく合うように作ったのだと思う。人がチェスを学ぶと賢くなれるし、数学やプログラミングを学ぶのもそうなり得るのと同じだ

    • プレイはゲーム状態の抽象表現と強く関係している。プレイヤーが意識していなくても、チェスは可能手の中で浅い探索やビームサーチをする問題に近い
      LLMは推論や探索をせず、以前のテキストに基づいてテキストを書く。だから私たちの目にはプレイのように見えるかもしれないが、実際には過去の対局に基づく賢い推測だ。Kasparovが実際の駒配置を思い浮かべずに手を書き出すのに似ている。興味深い実験は、ルールだけを与えたときにモデルが指せるかを見ることだが、おそらく指せないだろう。今は目標を追跡しているのではなく、記憶で再生している状態だ。まだ前方注意のようなものはなく、ビームサーチは十分に高コストなので、むしろ古典的なチェスアルゴリズムにフォールバックするほうがよい
    • OpenAIとDeepMindを混同しているようだ
      OpenAIは対話型エージェント以外はやっていない