推論とは何か
原文は Armin Ronacher により に公開されました。 このブログを購読する
数週間前、論文が公開され、クローズドウェイトモデルから推論トレースを抽出する方法が示された。モデルを騙してそれらをリークさせる手法についてのオンラインでの議論も相まって、好奇心から自分でも少し調べてみることにした。Twitterではこの仕組みについて半端な真実や混乱が溢れているようなので、これが何が起きているのかを理解する助けになればと思う。
トレースを隠す
推論トレースは通常、我々から隠されている。この点を嘆いたこともあるが、基本的には受け入れるしかない。幸いオープンウェイトモデルではそれらが公開されており、その挙動を見れば、トレースが長く、しばしば混乱を招くものであることがわかる。これは、通常ユーザーに表示されるものから分離しておく十分な理由になっているのだろう。
最低限、UIはそれらを検出する必要がある。業界は推論トレースを何か特別でエキゾチックなものであるかのように見せるのが上手いが、実際は単なるテキストに過ぎない。モデルは最終的な回答の前に、思考内容をレスポンスの一部としてスクラッチパッドに出力するように訓練されているのだ。
GPT-OSSのHarmonyレスポンスフォーマットを見ると、このことがよくわかる:
<|channel|>analysis<|message|> I need to work this out ... <|end|><|start|>assistant<|channel|>final<|message|> The answer is ... <|return|>
マーカーは特殊トークンだが、その間の推論は最終的な回答と「同じテキスト」を使っている(ただ、GPTの思考過程のテキストはひどく滑稽に聞こえる)。モデルがanalysisチャネルトークンをサンプリングすると、パーサーがそれに続くテキストをResponses API経由で公開される別のストリームへ振り分ける。クローズドモデルでは、おそらく軽量なモデルがそれを編集・要約しているのだろう。
推論エフォート
推論にはどれくらいのバジェットが割かれるのか? 以前のAPIでは推論トークンのバジェットが公開されており、それがサンプリングプロセスのプロパティであるかのように見えていた。実際には、推論エフォートはシステムプロンプトに組み込まれている。GPT-OSSではシステムプロンプトにこう記述される:
Reasoning: low
これだけだ。訓練によって、analysisチャネルに切り替わるトークン列を出力するといった挙動が生まれる。これは、エフォートを変更するとKVキャッシュが無効になる理由でもある。クローズドなGPTモデルでは推論エフォートのことを「juice」と呼んでいるのだと思う。ほとんどのモデルにどれだけjuiceが残っているか尋ねることができるからだ。
DwarfStarにおけるDeepSeekの最大推論設定では、システムプロンプトに次のように追加される:
Reasoning Effort: Absolute maximum with no shortcuts permitted. You MUST be very thorough in your thinking and comprehensively decompose the problem to resolve the root cause, rigorously stress-testing your logic against all potential paths, edge cases, and adversarial scenarios.
考えるな
したがって、推論トークンの行き先は学習された慣習に過ぎない。モデルは下書きのような作業をfinalチャネルの外に留めておくように訓練されているのだ。そのチャネルにいると思い込ませれば、トークンをリークさせることもある。思考が無効化されている際に、古いモデルがbashツールの中に推論を書き込み、その思考を/dev/nullにechoしていた例すら見たことがある。
ある意味、一部のモデルにおける唯一の「特別な」挙動は、考えないことだ。それは時に、モデルが通常思考に使う手段を「機械的に」取り除くことで実現される。DwarfStarでは、思考無効時はプリフィルに</think>が、思考有効時は<think>が使われる。これらはそれぞれ思考を終了・開始させるトークンだ。GPT-OSSはプリフィルを行わず、どちらにするかをモデル自身に決めさせている。
ただし、おそらく一部の推論APIでは、推論が有効なときに開始トークンをプリフィルしているため、モデル自身がそれをサンプリングすることはなく、無効時には推論トークンのサンプリングを容易に検出できるためブロックしているのだろう。これは、なぜカスタムのthinkツールが、本来置かれるべきでない場所に推論の一部を置かせるようにモデルを騙せるのかを説明できるかもしれない――ただしネイティブな推論が無効な場合に限ってだ。
豆知識:このブログ記事がセーフティチェックを発動させた
なんとも皮肉なことに、このブログ記事のスペルと文法チェックにGPT-5.6 terraを使おうとしたところ、セーフティフィルターに引っかかって使えなかった。Kimiに切り替えざるを得なかった。

記事をランダムに読む
コメント
ログインしてコメントする