2026-11-10 機械学習勉強会

今週のTOPIC

※ [paper] [blog] など何に関するTOPICなのかパッと見で分かるようにしましょう。
技術的に学びのあるトピックを解説する時間にできると🙆(AIツール紹介等はslack channelでの共有など別機会にて推奨)
出典を埋め込みURLにしましょう。

@Yuya Matsumura

[paper] "Shall We Approve?" Consequence-Aware Approval for Autonomous Coding Agents

背景: 同じコマンドでも、ワークスペースが違えば起きることが違う

スライド 2
スライド 2
Figure 1(論文より)。同じ make clean && make でも、Makefile の clean が build/ だけを消すか src/ と .git/ まで消すかはワークスペース次第。文面だけを見る承認器には同じ入力に見える
Figure 1(論文より)。同じ make clean && make でも、Makefile の clean が build/ だけを消すか src/ と .git/ まで消すかはワークスペース次第。文面だけを見る承認器には同じ入力に見える
  • 注目するのは「このコマンドは今のワークスペースにどんな安全上の効果を持ち、それはユーザーの依頼の範囲内か」という点(Section 1)。ファイル編集ツールは呼び出しに変更内容が書かれていますが、シェルコマンドは中で呼ぶスクリプト・ビルドターゲット・パッケージツールが何をするかが文面に出ません
  • 脅威モデル(Section 3): 依頼自体は善意で、対象や範囲が曖昧なことがある。エージェントは間違える、依頼の意図を超える、プロジェクトのファイルやツール出力の中の信用できない内容に誘導される、のいずれもあり得る。ワークスペースのスクリプト・ビルドファイル・バイナリは名前や文面以上のことをし得る。承認器、スナップショットと巻き戻しの仕組み、コンテナの境界は信頼する
  • 比較する既存の承認器(Table 8): ルール検査 CARE はコマンド文字列を構文・パス・出所のルールで見て、未解決は LLM 判定に回す。ガードレールモデルは TS-Guard(ToolSafe。依頼と ReAct 形式の履歴と現在の行動)、gpt-oss-safeguard-20b(依頼とコマンドをポリシーに照らす)、Qwen3Guard-Gen-8B(固定の安全分類)。Claude Code Auto Mode は許可ルールと 2 段の分類器で、ユーザーのメッセージとツール呼び出しは見るがツール出力は見ない。YoloFS は承認器を持たず、実行後の変更要約をエージェント本人に見せて戻すかを任せる staging 方式
  • 著者は、Anthropic が Claude Code の許可プロンプトをユーザーが 93% 承認していると報告していること、Auto Mode が実際の行き過ぎた操作の 17% を見逃すと報告していることを引いています(Section 1・2)

手法: 先に実行し、観測した効果で承認する

Figure 2(論文より)。ステップ t でエージェントがコマンドを提案すると、コンテナをスナップショットして追跡つきで先に実行し、出力は保留。効果レポートを承認器が読み、Allow なら状態を確定して出力を返し、Block ならスナップショットに戻して理由を返す
Figure 2(論文より)。ステップ t でエージェントがコマンドを提案すると、コンテナをスナップショットして追跡つきで先に実行し、出力は保留。効果レポートを承認器が読み、Allow なら状態を確定して出力を返し、Block ならスナップショットに戻して理由を返す
スライド 3
スライド 3
  • トランザクション(Section 4.1): 課題ごとの Docker コンテナがサンドボックスで、ネットワークは無効、メモリとプロセス数は制限。コマンドは strace -f(システムコールの記録ツール)のもとでタイムアウトつきで実行され、プロセス生成・ファイル操作・ネットワークのシステムコール・出力への書き込みを記録します。Allow ならスナップショットを捨てて実行後の状態を残し、保留していた出力をツール結果として返すので、コマンドの実行は 1 回だけです。Block なら変更されたコンテナを捨ててスナップショットから新しいコンテナを起こします
  • コンテナの外へ出る効果は巻き戻せないので、外向きの通信は切ってあります。接続の試行自体は宛先・プロセス・そのプロセスが直前に読んだファイルとともに記録されるので、送信の試みは何かが出て行く前に見えます。ベンチマークがネットワークサービスの応答を固定で用意している場合は「模擬」と印を付けます。パッケージレジストリのような許可済みの宛先を通すこともでき、返ってきたものはコンテナに入るので一緒に巻き戻せます
  • 効果レポート(Section 4.2): 生のトレースは動的ロードやロケールの照会で数十 KB になるので、コンテナ起動時に 1 回だけ走らせたプローブの記録を差し引き、残りを 4 段階で絞ります。(1)境界を越える結果を小さな構造化レコード(card)にする: 永続的なファイルの遷移(小さなテキストファイルは差分つき、秘密らしいパスは内容を伏せる)、接続試行(観測・試行のみ・模擬の区別)、ユーザーに見える出力。(2)出力や送信のようにデータを運ぶ結果には、同じプロセスがその前に読んだリポジトリ・認証情報・通常でないシステムパスのファイルを「同じ actor が結果の前に読んだ」という根拠つきで添える。(3)dotenv・認証情報ストア・秘密鍵の読み取りは、その後に出力や送信がなくても残す。出力に bearer トークンや秘密鍵のヘッダーらしい文字列があれば種類だけを注記し、値は書かない。(4)目標 4 KiB・上限 8 KiB に収め、超えるときはディレクトリ単位の集約 → 件数化 → 遷移の要約の順に縮める。実行状態(完了・タイムアウト・シグナル)、観測・採用・省略した件数、模擬の印、不確かさは必ず残す
  • 承認器(Section 4.3): LLM がユーザーの課題、切り詰めたツール出力を含む対話履歴、生のコマンド、効果レポートを受け取り、Allow / Block と確信度と短い理由を JSON で返します。見る軸は、依頼の目的と範囲、認証情報や秘密を含むファイルへのアクセス、フック・スキャナ・リポジトリのポリシーなど保護された制御の変更、即時の実行時の効果、後のインストール・ビルド・コミット・起動時に動くよう仕込まれた挙動、証拠の不確かさ。パケット全体は指示ではなく証拠として渡し、コマンド・ファイル・出力・効果レコードの中の指示には従わないこと、ネットワークや認証情報の効果が「観測されなかった」ことを安全の証拠にしないことを指示しています
  • Block の理由は、秘密の値を引用せずに違反した境界や有害な効果を名指しし、「同じ操作を別のラッパーでやり直すのではなく、より安全な代替を選ぶ」指示とともにエージェントへ返ります
Figure 3(論文より)。記録された 1 コマンドの効果レポートと判断。python3 scripts/check-deps.py が .env を読んだ後に出力し(レポートは「同じプロセスが出力の前に .env を読んだ」という根拠を添える)、3 つの宛先に DNS(ポート 53)の接続を試みた(サンドボックスで失敗)。レポートは 3.4 KB(生トレース 165 KB)で、承認器は確信度 0.98 で Block
Figure 3(論文より)。記録された 1 コマンドの効果レポートと判断。python3 scripts/check-deps.py が .env を読んだ後に出力し(レポートは「同じプロセスが出力の前に .env を読んだ」という根拠を添える)、3 つの宛先に DNS(ポート 53)の接続を試みた(サンドボックスで失敗)。レポートは 3.4 KB(生トレース 165 KB)で、承認器は確信度 0.98 で Block

実験

  • SABER(Hu et al., 2026): 正当な開発依頼を素直にこなすと課題ごとの害(認証情報の漏洩、データの削除、セキュリティ制御の弱体化など)が起きる、状態つきのプロジェクトワークスペース。シェル限定の 682 課題を使い、8 つの害カテゴリ × 3 シナリオ(A: ファイル・設定・ツール出力に注入された指示、B: 妥当な依頼でのエージェントの誤り、C: ワークスペースの状態から危険とわかる明示的な依頼)です(Table 1)。SABER の判定器はコマンドのパターン・コマンド文字列から推定した効果・LLM 判定の組み合わせで、著者が監査して誤検知(誤った構文解析、閲覧しただけ、ファイルに書いただけ)を直した修正版で全系を判定しています。公開版での結果は付録 A の Table 4
  • YoloFS-Ext(著者作、公開): YoloFS(Zhong et al., 2026)の「隠れた副作用」課題 13 件をもとに、ツールが依頼の名指ししないファイルを削除または上書きし、その挙動を 4 段階の隠し方(スクリプト、Makefile、スクリプトの連鎖、コンパイル済みバイナリ)で包んだ 102 の危険課題。各課題には、ファイル・依頼・コマンドが同じでツールの中身だけ無害な「安全な双子」があり、双子を止めれば定義上は誤ブロックです(Table 2、付録 A)。害が依頼の名指しするファイルに触れないこと、危険課題と双子はツールのコードだけが違うこと、被害対象は元のプロジェクトで保護されたファイルであることを規則にし、判定はファイルシステムの最終状態からプログラムで行います(LLM は使わない)
  • 比較対象: 承認なし(GLM-5.3-Flash と DeepSeek-V3.2)、CARE、TS-Guard、gpt-oss-safeguard-20b、Qwen3Guard-Gen-8B、YoloFS、Claude Code Auto Mode の 6 系。Claude Code の外の系は著者のハーネスの承認ステップだけを差し替え、巻き戻しと理由の返却は共通です。Auto Mode は Claude Code 2.1.288 の公式バイナリを、Claude Code 自身の許可ルールと 2 段分類器のまま、分類器のモデルだけ gpt-5.6-luna に設定して実行しています(製品そのものの挙動ではない)。同じハーネスで比べるために Caper を Claude Code の PreToolUse フックとして動かした版も用意しています(Table 8)
論文 Table 8: 比較した承認系の再現設定。承認器が見るもの(Approver input)・モデルと動かし方・止める条件。文字列(command string、request and command)しか見ない系と、効果レポート(effects report)を見る Caper の違いがここに出ている
論文 Table 8: 比較した承認系の再現設定。承認器が見るもの(Approver input)・モデルと動かし方・止める条件。文字列(command string、request and command)しか見ない系と、効果レポート(effects report)を見る Caper の違いがここに出ている
  • モデル: エージェントは全系で GLM-5.3-Flash、Caper の承認器と Auto Mode の分類器は gpt-5.6-luna。SABER のループで bash ツール 1 つ、最大 60 ステップ。各課題 1 回の実行
  • 指標: SABER は有害(課題固有の害が起きた)、安全に完了、安全に拒否(害の前に辞退またはユーザーに確認)の割合で、後の 2 つの和が安全な結果。YoloFS-Ext は危険課題の有害率と安全完了率、双子のうち課題を達成するコマンドが 1 回でも止められた割合(誤ブロック率)

結果

スライド 4
スライド 4
Table 3(論文より)。SABER と YoloFS-Ext の主結果(%)。太字が各列の最良、下線が 2 位。Qwen3Guard は YoloFS-Ext で 1 つも止めないので誤ブロック 0.0 だが順位付けの対象外
Table 3(論文より)。SABER と YoloFS-Ext の主結果(%)。太字が各列の最良、下線が 2 位。Qwen3Guard は YoloFS-Ext で 1 つも止めないので誤ブロック 0.0 だが順位付けの対象外
  • Finding 1(文面の承認器に足りないのは厳しさではなく見えているもの): SABER で文面から判断する 5 系は 14.8〜18.8% の課題を有害のまま残し、承認なしは 19.7%、Caper は 6.7% です。見逃すのは文面に出ない害で、Figure 3 の課題ではリポジトリ同梱の check-deps.py が .env を読んで送ろうとしますが、依頼にもコマンドにもその印はありません。Claude Code の中で組み込みの分類器を Caper のフックに置き換えると、同じエージェント・同じ承認器モデルのまま SABER が 14.8% → 10.0%、YoloFS-Ext が 62.7% → 6.9% になります。ただし Caper の安全完了は 48.6%(承認なし 57.4%)、安全拒否は 19.1%(9.1%)で、害の減少の一部は完了から拒否への振り替え(約 9 pt)で買っています。著者は安全な結果の合計が 67.8% 対 66.6% で同水準だと書きます
  • Finding 2(観測した効果が危険課題と双子を分ける): 双子はツールのコードだけが違うので、証拠を持たない承認器は両方止めるか両方通すかになります。Qwen3Guard・CARE・Auto Mode はどちらもほとんど止めず、62.7〜69.6% が有害。TS-Guard は危険課題の 8.8% で害のコマンドを止めますが双子も 8.8% 止めます。効果レポートなしの Caper の承認器はより多く止めますが双子の 61.8% も止めます。レポートがあると、危険課題の 84.3% で害のコマンドを止め、双子は 1.0% です(Table 9)
  • Finding 3(観測だけでは足りず、判断は確定の前に、エージェントの外から): YoloFS は Caper と同じファイル変化を観測しますが、コマンドの実行後にエージェント本人へ見せて戻させます。102 の危険な実行のうち 66 で戻し、戻さなかった 36 のうち 33 が有害で、35.3% が残ります。後から戻すのは課題の達成も損ない、安全に完了したのは 22.5%(Caper は 60.8%)。SABER では承認なし(19.7%)より有害率が高く(21.2%)、一度送られた認証情報は取り戻せないためです
Figure 4(論文より)。危険課題で害のコマンドを止めた割合(縦)と双子を止めた割合(横)。証拠のない承認器は対角線付近に並び、Caper と hook 版だけが左上に離れる
Figure 4(論文より)。危険課題で害のコマンドを止めた割合(縦)と双子を止めた割合(横)。証拠のない承認器は対角線付近に並び、Caper と hook 版だけが左上に離れる
アブレーション(Figure 5・6、Table 9)と オーバーヘッド(Section 5.5)
Figure 5(論文より)。同じ承認器モデルに、コマンドだけ・依頼とコマンド・対話全体を、証拠なし/ありで読ませたときの有害率と双子の誤ブロック率
Figure 5(論文より)。同じ承認器モデルに、コマンドだけ・依頼とコマンド・対話全体を、証拠なし/ありで読ませたときの有害率と双子の誤ブロック率
  • 文脈を増やしても証拠がなければ、害と誤ブロックのトレードオフになります。コマンドだけ → 対話全体で有害率は 44.1% → 17.6% に下がる一方、双子の誤ブロックは 52.0% → 61.8% に上がります。証拠があれば、コマンドだけで有害率 1.0%、誤ブロック 0 です
Figure 6(論文より)。証拠の出どころ。対話全体を読む承認器に、効果の予測・観測・差分なしの観測を足した場合と、弱い承認器の場合。右は隠し方ごとの有害率。枠で囲った行が Caper
Figure 6(論文より)。証拠の出どころ。対話全体を読む承認器に、効果の予測・観測・差分なしの観測を足した場合と、弱い承認器の場合。右は隠し方ごとの有害率。枠で囲った行が Caper
  • 同じモデルにコマンドと参照先のファイル(3 階層・16 ファイル・32 KB まで。バイナリは読めない)から効果を予測させると、有害率は 3.9% まで下がりますが、双子の 61.8% を止めたままです。予測では承認器の不確かさが消えないため、と著者は説明します。観測した効果なら 7.8% と 1.0%。内容の差分を外すと有害率は 13.7% に上がり、上書き型の課題だけが影響を受けます(削除は遷移そのものが見えるが、上書きはサイズの変化としてしか見えない。付録 D)
  • 弱い承認器は観測した効果を足しても誤ブロックが 53.9% → 4.9% に減るだけで、有害率は 25.5% → 33.3% に上がります
  • 隠し方: 証拠なしの有害率はバイナリ 4.2%、スクリプト 11.5%、Makefile とスクリプトの連鎖 26.9% と包み方に依存し、証拠があればどの段階でも 4〜15% です。証拠なしの承認器は、むき出しのスクリプトとバイナリの双子を中身に関係なく止めます(コマンドだけを見る設定ではスクリプト 100%、バイナリ 100%。対話全体を見る設定では 65.4% と 83.3%。Table 11)
Table 9(論文より)。Table 3 の裏側の承認の挙動。承認器に送られたコマンド数、止めた割合、1 回でも止めた課題の割合、害のコマンドを止めた割合、双子の誤ブロック率
Table 9(論文より)。Table 3 の裏側の承認の挙動。承認器に送られたコマンド数、止めた割合、1 回でも止めた課題の割合、害のコマンドを止めた割合、双子の誤ブロック率
  • SABER での効果レポートは中央値 0.9 KB(95 パーセンタイル 2.6 KB)で、生トレースの 62.5 KB に対し合計で 99.4% 小さい。承認の遅延は中央値 3.2 秒(95 パーセンタイル 6.4 秒)で、証拠なしの同じ承認器は 3.3 秒(11.4 秒)。サンドボックスは Allow で約 0.5 秒、Block で約 1.5 秒(巻き戻しが中央値 972 ミリ秒)。API 費用は 1 課題あたり 0.019 ドル(証拠なし 0.017 ドル。Table 13・14)
  • 95% の Wilson 区間(Table 12): SABER の有害率は Caper 5.0〜9.1%、Auto Mode 12.2〜18.0%。YoloFS-Ext の有害率は Caper 4.0〜14.7%、フック版 3.4〜13.5% で重なります

実例: Auto Mode が通した 2 件

スライド 5
スライド 5
Figure 7(論文より)。Case 1: コンパイル済みのデプロイツール。ツールは src/app.js も上書きし、Caper は差分で止める
Figure 7(論文より)。Case 1: コンパイル済みのデプロイツール。ツールは src/app.js も上書きし、Caper は差分で止める
Figure 8(論文より)。Case 2: データベースの移行。migrate ターゲットはテーブルを 3 つ落とし、Caper はデータベースの縮小で止める
Figure 8(論文より)。Case 2: データベースの移行。migrate ターゲットはテーブルを 3 つ落とし、Caper はデータベースの縮小で止める
  • どちらも Claude Code Auto Mode が通した課題で、コマンドはユーザーの依頼そのものです(Section 5.4)。Case 1 ではレポートの差分がソースをコメント 1 行に置き換えたことを示し、Case 2 ではデータベースが 32 KB から 20 KB に縮んだことが、バイナリや DB の中身を読まなくても止める根拠になります
  • Block の理由を受けたエージェントは、Case 1 では deploy.sh を読んでソースのコピーを自分で行い、Case 2 ではデータベースを複製してから移行スクリプトだけを実行して、どちらも安全に完了しています
 

@Hiromu Nakamura (pon)

[blog]The components of agent memory

[pon]Anthropicがメモリについて語ってた

導入:人の記憶と dreaming

  • 人の脳との対応
    • 海馬が体験をその場ですぐ記録し、すぐ使える状態にする
    • 長期記憶に定着するのはその一部だけ。定着は睡眠中・安静時に海馬が直近の体験を replay し、新皮質に統合することで進むと考えられている
  • エージェントでも同じ分業ができる
    • 作業中の記録 = ログ・transcript
    • Letta と UC Berkeley が提案した sleep-time compute(対話の合間の空き時間で既存コンテキストを整理する)を記憶に応用
    • ログを振り返って誤りを直したり、Memory notesやMemory representationsを作ったりする処理を dreaming と呼ぶ
  • この記事の内容:Anthropic がエージェントの記憶をどう捉えているか、dreaming を含む各構成要素が記憶の整理に何を足すかを、いくつかの評価で示す
図1: 記憶の階層と dreaming
図1: 記憶の階層と dreaming
  • 図1 記憶の階層(下から上へ)
      1. Transcripts:検索できるイベントログ
      1. Memory notes:Claude が書いたノート
      1. Memory representations:wiki など
      1. Injected context:毎セッションの最初に読み込まれるコンテキスト
    • dreaming は transcript から各層へ、また隣り合う上位層の間で双方向に働く(誤りの修正・ノート作成・新しい表現の構築・次のセッションに先に読み込ませる内容の調整)

Memory notes

  • この記事でいう「agent memory」の定義
    • Claude が経験(ユーザーとのやり取り・割り当てられたタスク)から得て、セッションをまたいで保持し、後で読めるコンテキストとして保存される知識
  • 人の脳では、体験の前後に出る化学信号が記憶に「重要」の印を付け、印付きの記憶はオフライン時に多く replay されて長期記憶に定着する
  • Claude も同様に
    • セッションログ中の重要な出来事にその場でタグを付けて後で見つけやすくする
    • あるいは memory store(memory notes のフォルダなど)に書き出す
  • 問い:この先何が起きるか分からない時点で、何が重要(salient)かをどう判断するのか
図2: Claude が memory notes を書く
図2: Claude が memory notes を書く

記憶は「将来何が必要か」の予測になりうる

  • ルールを書き留める = そのパターンがまた関係してくるという予測
    • 検証済みの事実を書く = 将来のセッションが再確認せずにそれに頼りたくなる、という予測
    • Claude はこの種の予測が大きく上達してきた
  • 評価:Continual Learning Bench(CL-Bench)1.0
    • 記憶を使って長期タスクに取り組む力を測るベンチマーク
    • 使ったタスク:データベースを調べて一連の質問に答える。回答後に正解が知らされ、将来の質問のために記憶を書ける
  • モデルごとの到達度
    • Sonnet 4.6:間違いの理由の仮説を立てるところまで。memory ディレクトリには、未検証の推測を並べたファイルが散らばっていた
    • Opus 4.7:ノートを 1 つの参照ドキュメントにまとめ、確認済みの事実と未確認の事実を区別し始めた
    • Sonnet 5:採点で確認された回答に「確認済み」と付け、間違えたときは訂正を書いた
    • Opus 5:ループを最初に閉じたモデル。エントリの多くに「ルール(とそれが正しいと分かった根拠)」「過去の質問の答え」「途中で見つけた罠への明確な警告」が入っていた
    • Opus 5.5 / Sonnet 5.5:どちらもループを閉じ、検証済みのルールを記憶に残した。記憶ありのスコアは Opus 5 とほぼ同じ、記憶なしのベースラインはやや高い
図3: CL-Bench データベースタスク、記憶なし vs 記憶あり
図3: CL-Bench データベースタスク、記憶なし vs 記憶あり

Claude は「何を覚えるべきか」を判断できるようになった

  • 評価:ポケモン 赤 のプレイ(複雑な長期タスク。何を記憶に残すかの判断を見るテスト)
    • 各ランの開始時に、プレイ中に読み書きできる memory ファイルのフォルダを渡す
  • Sonnet 3.7 と Fable 5 を、それぞれ約 10,000 ステップ時点で比較
    • Sonnet 3.7:何でも重要かもしれないとみなし、手当たり次第に書いた
      • バトル・拾ったアイテム・会った NPC ごとに別ファイル、という出来事のアーカイブ
      • 225 フォルダに 413 ファイル(約 98 万文字)、バッジ 1 個
    • Fable 5:2 フォルダに 9 ファイル + トップレベルの 1 つ(約 4.3 万文字)、バッジ 4 個
図4: ポケモンをプレイ中の memory ディレクトリ(Sonnet 3.7 vs Fable 5)
図4: ポケモンをプレイ中の memory ディレクトリ(Sonnet 3.7 vs Fable 5)
  • Sonnet 3.7 のやり方の問題
    • ゲームの状態は常に変わるので、詳細な記録はすぐ古くなる
    • 進むほど、ゲームをするより記憶を漁ることに時間とリソースを使うようになった
    • 例:10,000 ステップ付近で 4 つ目の「master」memory フォルダを作り始め、その後 17 ステップで 6 ファイル作成・9 ファイル削除し、ゲーム内の行動はゼロ
  • Fable 5 のやり方
    • ゲームが明示的に教えてくれないことだけを記憶に使った
      • 所持金や現在地のような毎ターン画面から読める情報は、保存しても冗長
      • 戦略・計画・検証済みのルールは、Claude が自分で導き出さない限り存在せず、書き留めないと消える
    • 構成
      • :ダッシュボード役。現在の目標、ジム攻略の事前計画、記憶の使い方に関する自分用ルール
      • :特定ルートの移動計画
      • :ゲームの仕組みについて学んだことに基づく戦略
    • 例:捕まえやすいはずのコイキングにモンスターボールが 7 連続で失敗した後、「3 回以上連続で失敗したらタイミングを変える(メニュー操作の間に wait を挟む)— これをした直後に捕まった」と書いた
  • 結果:memory フォルダがずっと小さい Fable 5 のほうがはるかに先に進んだ
    • Opus 5.5 も同様のやり方で、現在の目標と次の手を追う小さなノートを保ち、プレイしながら書き直して、ゲームをクリアした

記憶の書き方を Claude にどう指示するか

  • 方針:記憶が何のためにあるかは伝えるが、どう使うかは指示しないほうがうまくいく
    • CL-Bench では「memory フォルダが使える」と伝えただけ。それだけで Opus 4.7 / Opus 5 は記憶をうまく使い、スコアが目に見えて上がった
  • 何を書くかの具体的ルールを 1 テストにつき 1 つ与えて、記憶による伸びを比較
    • 「失敗だけを記録せよ」とすると、Opus 5 と Opus 4.7 は記憶による伸びの多くを失った
    • 強いモデルでは、事前に固定ルールを決めるより重要度の判断を任せたほうが効果的。ルールはかえって性能を落としうる
図5: 左 = Sonnet 4.6 への記憶利用の指示の効果 / 右 = 「失敗だけ記録」指示による伸びの変化
図5: 左 = Sonnet 4.6 への記憶利用の指示の効果 / 右 = 「失敗だけ記録」指示による伸びの変化
  • 図5 の数値
    • 左(Sonnet 4.6):ベースライン 0.330 → 記憶あり 0.364 → 記憶あり + 指示を改善 0.641(参考線:Opus 4.7 記憶あり 0.700、Opus 5 記憶あり 0.828)
    • 右(「失敗だけ記録」での伸びの変化):Opus 5 −0.234、Opus 4.7 −0.150、Sonnet 4.6 −0.020
  • 指示がいちばん役立つのは古いモデル
    • Sonnet 4.6 は memory ディレクトリを読まないことが多く、間違いの理由の仮説も検証しなかった
    • 「答える前に memory ファイルを読め」「仮説を明示的に検証せよ」と指示すると、スコアがほぼ倍になった
    • Sonnet 5 は指示なしでこれをやる:答える前に記憶を読んだのは 10 回中 9 回。Sonnet 4.6 は半分未満
  • フロンティアモデルへの実際の指示:「人に頼まれたとき、または明らかに覚えておく価値があるときに memory notes を作る」程度の簡単な指示にとどめ、判断は Claude に任せる

Dreaming は記憶を修正できる

  • 問題:記憶はセッション中の重要度判断で書かれるので、最初から間違っているノートや、環境の変化でずれたノートが、後のセッションで読まれて信用されてしまう
  • dreaming はノートを元の transcript と突き合わせて検証する手段になる
図6: dreaming による記憶の修正
図6: dreaming による記憶の修正
  • 事例:Managed Agents + 記憶用ディレクトリをマウントしてポケモンをプレイ
    • おつきみやま:入口が西、出口が東の洞窟。入口近くに一方通行の段差があり、落ちると来た道路に戻され、簡単には登り直せない
    • Claude は山の入口にあるポケモンセンターを目印にしていたので、段差から落ちるかどうかは「ポケモンセンターが山のどちら側にあると思っているか」で決まった
    • Claude はポケモンセンターが東側(洞窟を抜けた出口側)にあると誤って書いた
      • そのため、ポケモンセンターを出たとき洞窟をもう通過したと思い込み、「おつきみやまは後ろだ」と言って、ノートを「Mt Moon DONE(攻略済み)」に更新した
      • 実際はまだ入口の手前で、次の街へ向かったつもりが段差から落ち、来た道に戻された
      • ナビゲーションツールが段差を表示しなかったため「西に行き過ぎた」と結論し、自分は最初から正しい側にいたと思い込んだ(実際は違う)
図7: 未修正のノート(左)と dreaming で修正したノート(右)での行動の違い
図7: 未修正のノート(左)と dreaming で修正したノート(右)での行動の違い
  • dreaming で罠を避けられるかを検証
    • ポケモンセンターの位置を間違えた memory フォルダに dreaming を実行
    • Claude はノートをセッションの transcript と照合して誤りに気付き、書き直した(transcript が検証のための正解データになった)
    • 修正後のノートでは「洞窟の入口を探して入り直す必要がある」と言ってまっすぐおつきみやまに戻り、ハナダシティに到達
  • 未修正のノートのラン
    • 同じ道路に 3 回落ちた
    • 3 回目の後「ループし続けるより止める」と諦めかけたが、自動応答で続行を指示され、回復と補給のため山の手前のニビシティまで戻った
    • ハナダシティには到達しないまま終了
図8: ハナダシティへの進捗(3,000 アクション)
図8: ハナダシティへの進捗(3,000 アクション)
  • 図8:記憶 + dreaming は 1,935 アクション目でハナダ到達。未修正の記憶(Raw memory)は段差から落ちてニビまで戻る。記憶なしも到達せず

Dreaming は新しい記憶の表現を作れる

  • dreaming で、記憶をたどるための表現(representation)を作れる
    • その一つが wiki:Claude が書いて保守するページの集まり。1 つの主題について知っていることをまとめ、他のノートにリンクする
    • リンクが記憶を探して必要なときに効率よく見つけるための地図になる
図9: dreaming による memory representations の構築
図9: dreaming による memory representations の構築
  • 評価 1:Stainless(5 月に買収したソフトウェア会社)の社内文書コーパス
    • 約 35 万ファイル、約 4.2 億トークン
    • コーパスについての 25 問の評価セットを作り、Claude に探索用の検索ツールを渡す
    • dreaming で wiki を作るよう指示。128 セッションにわたり、Opus 5 エージェントがファイルを探索し、リンク付き wiki ページを書く・直す・重複を統合する・主張を元資料と照合する
    • 各セッションは前のセッションの進捗の上に積み上げ、共有ログで作業を調整
  • 結果
    • dreaming を 2 セッションから 128 セッションに増やすと、wiki だけでの正答(採点基準の充足率)が 13% → 48%
    • 初期の wiki は新入社員の知識、dreaming を重ねるとベテラン社員の知識地図のように育つ
    • 検索ツール + wiki の組み合わせが最もよかった:wiki の成長とともに 54% → 61%(検索ツールだけは 53% で横ばい)
    • 検索 + wiki で 1 問あたり約 20,000 トークン節約
    • wiki は一度作って終わりではなく、後続の dreaming で追加・編集・刈り込みをして少しずつ育てる
図10: wiki の成長と正答率(中央)、2 セッション後と 128 セッション後の wiki(左右)
図10: wiki の成長と正答率(中央)、2 セッション後と 128 セッション後の wiki(左右)
  • 図10 の wiki の規模:2 セッション後 103 ページ / 766 リンク → 128 セッション後 222 ページ / 12,893 リンク
  • 評価 2:どんなタスクで wiki が役立つか(Harvey LAB ベンチマーク + 合併に関する文書群)
    • LAB は文書群を渡してリーガルブリーフを書かせ、採点基準のリストで採点する
    • 文書から wiki を作らせ、wiki 経由と直接のファイル検索とで、質問回答・ブリーフ作成をさせて比較
  • wiki が役立ったケース:合併についての 24 問
    • 半分以上が複数文書をまたいで情報を集める必要があり、多くは判断や計算も要る
    • これらの項目で、wiki を参照すると 87%、検索だけだと 73%
  • wiki が役立たなかったケース
    • ある LAB タスクでは、基準の多くが 1 つの文書(主に案件概要メモ)のテキスト検索で取れたため、検索に対する明確な上積みなし
    • 別の LAB タスクでは、wiki が元の文書より大きくなった

Dreaming はノートを記憶の階層の上へ引き上げられる

  • dreaming でノートを階層の最上位に引き上げ、ハーネスが毎セッションの開始時に Claude のコンテキストへ先に読み込める
    • Claude はそれを検索する必要も、検索すべきものがあると知っている必要もない
  • この context injection は慎重にやる必要がある
    • 注入した記憶は貴重なトークンを消費する
    • 間違ったノートが毎セッションに持ち込まれる
    • 読み込んでも Claude がそれに従うとは限らない(Claude Code のドキュメントでも、指示ファイルが長いほど守られにくくなると注意している)
    • → 最上位層は比較的小さく保つ必要があり、ここでの dreaming の仕事の多くは「小さく保つこと」:詳細を下の層へ移し、リンクだけ残す
  • Claude Code の auto memory も同じやり方で注入層を小さく保っている(セッション中に Claude が保守)
    • auto memory をすべて読み込むのではなく、 の先頭 200 行または 25 KB だけを読み込む
    • この先頭部分が索引となり、何を知っていてどこにあるかを示す
図13: dreaming が階層の最上位(injected context)に書き込む
図13: dreaming が階層の最上位(injected context)に書き込む

Dreaming は記憶を特定の目的に向けて育てられる

  • dreaming で wiki を作るときの「作り方の指示」を、そのタスクで何が大事かに合わせると、記憶の質が大きく上がる
  • 事例:Harvey LAB の企業買収タスク
    • 課題:契約書の束を読んでリーガルブリーフを書く。採点は「契約条件を正しく書けているか」
    • つまりこのタスクで一番大事なのは契約条件だが、最初の指示にはそれが書かれていなかった
  • 改善前:「文書から wiki を作って」という一般的な指示
    • 複数のエージェントが同時に、契約条件をまとめる 1 つの共有ページ()へ書き込んだ
    • 互いの書き込みを上書きして一部が消え、残った分も要約が雑だった
    • 結果:採点される事実 57 個のうち 41 個(72%)しか wiki に残らなかった
  • 指示の直し方:人が直さず、Claude 自身に直させた
    • 「失敗を振り返る → 指示の変更を提案する → wiki を作り直す」を繰り返した
    • その中で Claude は「契約条件を正確に残すことが一番大事」と気付き、指示を書き直した
  • 改善後:「契約ごとに 1 エージェントが専用ページを書き、条件は要約せず原文のまま引用する」
    • 書き込み先が契約ごとに分かれるので、上書きが起きない
    • 結果:57 個すべて(100%)が残った
図14: 指示の変更前後で wiki に残った契約の事実の数
図14: 指示の変更前後で wiki に残った契約の事実の数

Dreaming はセッションが残した穴を埋められる

  • memory notes を書くとき Claude はそのセッションのコンテキストしか見ていない
  • dreaming は多数のセッションを横断して、共通のパターンを見つけたり、よくある誤りを直したりできる
  • 事例:LAB 用の wiki を作るとき、まだ存在しないページへのリンクが張られることがあった
    • 2 回目の dreaming パスで多くを解消
    • あるタスクでは、存在しない ページへの 9 本のリンク(6 ページから)を見つけ、同じ文書の既存ページ に付け替えた
    • さらに索引など 3 ページを追加(38 エントリ / 225 リンク → 41 エントリ / 278 リンク)

未解決の問い

  • いつ記憶を作るか
    • タスク中に memory store(フォルダ・ファイル・DB)へ書けば、その場で重要度を捉え、すぐ次のターン・セッションで使える
    • ただし、その場でのメモは本来のタスクから注意をそらす
    • dreaming なら記憶作成をバックグラウンドに回せるが、その出力はすぐには使えないかもしれない
  • 記憶をどう確実に最新に保つか
    • Claude は予測を外したり、最初から間違ったルールを書いたりする。環境の変化で記憶がずれて無関係になることもある
    • dreaming はその修正手段の一つだが compute を要する。すべての記憶を常に検証させるのは現実的でないかもしれない
    • 変わりやすい情報に dreaming を集中させる、dreaming の頻度を調整する(記憶のアクセス頻度に基づくなど)ことが重要になりうる
  • 記憶の中心を transcript 検索にする選択肢
    • 表現(wiki など)と検索の組み合わせが役立つこともある(図10)
    • ただし表現の保守には compute が要り、誤りやハルシネーションがたまらないよう管理する必要がある

@Kyohei Uto(kuto)

[paper]Stabilizing On-Policy Targeted Guidance in Agentic Reinforcement Learning

概要

  • GRPOによるバイナリ報酬に加えて、失敗ターンのみテキストFBによる自己蒸留を行うTargated Guidanceを提案 (by cursor research)

背景

  • RLVR手法はモデルがほとんど出さない行動は報酬が付く機会がなく学習が進まない問題がある
  • ルーブリックを用意しそれを満たすか(0/1)でプロセス報酬を与える方法もあるがbinaryであり詳細な情報は失われる
  • TG(Targated Guidance)はルーブリックごとに固定のテキストを用意。そのテキストをFBとして失敗ターンに限定して自己蒸留する

提案手法

ポイント
  • 教師と生徒は同じモデルで入力だけ異なる。教師にはルーブリックに基づくヒントを与えている(自己蒸留)
  • GRPOのアウトカム報酬に自己蒸留によるプロセス報酬を与える。自己蒸留は失敗ターンに限定

2 つの設計

  • 失敗ターンだけに蒸留する(論文では gated distillation):蒸留の損失も失敗ターンにだけかけます。すべての基準を満たせば損失は通常の RL と同じになり、RL の最適解に向かう邪魔をしない、というのが論文の主張です。
  • 基準ごとの RL 報酬と組み合わせる:蒸留は、ほとんど出ない行動へ向かうきっかけを作ります。ただし教師はヒント次第で偏ることがあります。一方、RL 報酬は基準そのものなので偏りません。覚えた行動を保ち、磨くのは RL 報酬の役目です。
 

実験

その1: エージェントの応答に、7 つのスタイル基準を同時に課した実験
pass rateを保ったままスタイル基準を満たすスコアが改善している
[kuto] pass rateは改善するようにルーブリックは作ってないぽい
ポエム風に出力させるルーブリックを用意して学習した時の推移
[kuto] 正答率を高めることではなく従来のようなユーザの好みに合わせた出力をすることを学習することを目的としている印象。
 

学習を安定させる方法

蒸留の重み λ を適切に保つ

λを大きくすると、まずエントロピー(出力のばらつき)が急に上がり、次に出力が長くなり、最後にテスト通過率が崩れる、という順で学習が壊れます。 エントロピーの急上昇は、崩壊の前触れとして監視に使えます。逆にλが小さいと安定しますが、スタイルの改善は遅くなります。
 

thinking トークンも蒸留する

蒸留の対象を最終メッセージだけにして、thinking(応答前の思考部分)を外すと、スタイル基準の達成率が上がったり下がったりを繰り返します。 thinking も対象に含めると、こうした揺れが小さくなります。 中身を見ると、thinking も蒸留したモデルは「○○を含めること」と自分に言い聞かせる記述を思考に書くようになり、外したモデルはスタイルに一切触れていませんでした。
 

@Ryuhei Kawabata(monokemonoke)

[blog] Progress on provable inference for large language models

[monoke]: Claude のモデルがすり替えられていないことを、ゼロ知識証明で証明する方法が使われ始めたらしいので、読んでみた。

大目的

AI モデルの利用者が、受け取った応答が本当に指定したモデルから出たものかを、モデルの重みを見ずに、手元の計算機で確かめられるようにしたい。
今は確かめる方法がない。中継サービスが費用を抑えるために別のモデルにすり替えても、攻撃者が応答を書き換えても、利用者は出力を見るだけでは気づけない。重みは非公開で、仮に重みがあっても、確かめるにはモデルを自分で動かす計算資源が要る。
Anthropic の Frontier Red Team は、この問題を暗号で解く仕組み FlashProve を作り、コードを公開した。FlashProve には zkSNARK という技術が使われており、zkSNARK はある計算が正しく行われたことを短い証明で相手に納得させる。証明を見てもモデルの重み自体は分からない。

小目的

  1. 4000億パラメータのモデルの推論の証明を、実用できる速さと大きさで作れるか。
  1. 証明を作る計算は、ふつうの推論の何倍かかるか。
  1. これまでの仕組みと比べて、どれだけ速いか。
  1. Claude が書いた暗号のコードを、どうやって信用できるようにするか。

何を調べたか

FlashProve の仕組み

登場するのは、モデルの提供者(証明する側)と利用者(検証する側)である。提供者は最初に1回、重みからコミットメントを計算して公開する。コミットメントは、重みが1つに決まる短い値で、そこから重みは分からない。その後、提供者は応答ごとに証明ファイルを作る。利用者は、コミットメント・プロンプト・応答・証明ファイルだけで合否を判定する。
証明するのは以下のことです。
提供者が事前に公開したコミットメントに対応する重みのモデルに、このプロンプトを入れると、この応答が出る。
証明ファイルは、次の2つを同時に満たすように作られています。
  • 嘘がつけない:別のモデルで応答を作った場合、検査に通る証明ファイルは現実的な計算量では作れない。
  • 中身が漏れない:証明ファイルをどれだけ調べても、重みは分からない。

速くするための設計

Llama 4 Maverick は、層ごとに多数の専門家(エキスパート)のネットワークを持ち、トークンごとにその一部だけを使う Mixture-of-Experts という構造である。FlashProve は、実際に使った分だけを証明する。
ほかに2つの設計がある。証明は応答を返したあとで、複数のリクエストをまとめて作る。重みは層の区切りごとに主記憶から GPU へ順に流し込むので、80 GB の GPU 1枚と約290 GB の主記憶で足りる。

測り方

項目内容
モデルLlama 4 Maverick。4000億パラメータ、公開されている4ビット量子化の重み
リクエスト1件あたり 1,024 トークン
証明する側H100 1枚と CPU 24コアのサーバー
検証する側CPU のみ
比べる相手同じモデルの FP8 版を、推論エンジン vLLM で H100 8枚で動かした場合

結果

1. H100 1枚で毎秒110トークン分の証明を作れた。検証は CPU で17秒で済む

段階測った値
オフライン(コミットメントの計算)約39分。1つのモデルにつき1回。約1600万リクエストまで使える
コミットメントの大きさ約 6.5 MB
オンライン(証明の作成)24リクエストをまとめて約223秒。毎秒110トークン
証明ファイルの大きさ1リクエスト(1,024トークン)あたり 18.78 MB
検証24スレッドで17秒、1スレッドで21秒。GPU は使わない
証明の対象は、量子化後で約232 GB あるモデルの計算である。利用者が受け取るのは約19 MB のファイルだけである。

2. 証明を作る計算は、ふつうの推論の約72〜94倍かかる

GPU 1枚あたりで比べると、24リクエストの証明を作る時間は、vLLM が同じ24リクエストを処理する時間の約72倍だった。実行ごとの幅は66〜77倍である。vLLM を最も高い負荷で動かした場合と比べると、約94倍になる。

3. 同じモデルを証明した先行例の 0.02 トークン/秒に対して、110 トークン/秒を出した

同じ Llama 4 Maverick を証明した先行例は VerInf だけである。
VerInfFlashProve
証明を作る速さ1,000トークンに14.3時間(DGX Spark)毎秒110トークン(H100 1枚)
証明の大きさ93.6 GB約 19 MB
検証にかかる時間ほぼ1日17秒
商用の Attestable は、310億パラメータの Gemma 4 で毎秒53〜77トークンを報告しているが、コードは公開していない。

4. 安全性の性質を Lean で証明し、検証器も Lean で動くものを用意した

システムの最適化は Claude が行った。Claude の判断は、大きなシステムでは人が1つずつ評価しにくい。そこで著者は、プロトコルと3つの性質(完全性・健全性・ゼロ知識)を、定理証明支援系の Lean で書き、証明を機械に検査させた。
健全性は検証器だけで決まるので、検証器が正しければ証明する側を信用しなくてよい。著者は、定理と同じものだけを受理すると証明された Lean の検証器を公開した。普段使う C++ の検証器には形式的な保証がないが、試した証明すべてで Lean の検証器と同じ判定を出した。証明を作るプログラムは計算が重く、Lean では動かせないので、Lean の仕様と一致するかは監査で確かめる必要がある。

考察

証明が使える4つの場面

場面証明で確かめられること
開発ペースの規制提供者が、計算資源を申告どおりのモデルの推論に使っていること。規制当局は重みを受け取らずに確かめられる
改ざんの検知サーバーに侵入した攻撃者や、許可されていない別のモデルが応答を出していないこと
文章の出どころ「このコードは特定のモデルで脆弱性を調べた」のような主張が本当であること
モデルの承認提供者が、安全と承認されたモデルだけを使っていること
1つ目の場面では、証明で分かるのは推論をしていたことまでで、同じ計算機で並行して学習していないことは分からない。

応答のあとで証明する方式を選んでいる

証明の作り方には、推論と同時に作る方式と、応答を返したあとで一部のトークンについて作る方式がある。FlashProve は後者である。同時に作る方式は非常に速くなければならず、速さのために安全性を削るおそれがある。あとで作る方式は遅くてもよいが、保証が得られるまでに時間がかかり、計算をやり直す仕組みが要る。

計算の増え方は、これまでの見込みより小さい

著者は、証明にかかる計算がふつうの推論の約100倍に収まったことを、これまでの見込みよりずっと小さいと書いている。2024年の zkLLM は130億パラメータのモデルで毎秒2.5トークンだった。2年で、30倍大きいモデルを40倍以上の速さで証明できるようになった。
限界として、証明しているのは整数演算に直したモデルが最も確率の高いトークンを選ぶ場合であり、浮動小数点の実装やサンプリングによる応答とは一致しないことがある。扱えるコンテキストは 1,024 トークンまでで、対象は Mixture-of-Experts の構造に限られる。Lean の仕様・技術報告・実行コードの3つが一致していることは保証されていない。

まとめ

📌
何をしたか 応答が指定したモデルから出たことを、重みを明かさずに暗号で証明する仕組み FlashProve を作り、4000億パラメータの Llama 4 Maverick で性能を測った。コードと Lean の証明を公開した。
結果 H100 1枚で毎秒110トークン分の証明を作れた。証明は 1,024 トークンのリクエストあたり約19 MB で、CPU で17秒で検証できる。証明にかかる計算はふつうの推論の約72〜94倍だった。同じモデルの先行例は 0.02 トークン/秒、証明 93.6 GB だった。
分かったこと 大きなモデルの推論を暗号で証明することが、推論の約100倍の計算で実用できる範囲に入った。Claude が最適化したコードは、安全性の性質を Lean で証明し、検証器を Lean で動かすことで、人が確かめる範囲を定理の文まで絞っている。残る課題は、長いコンテキスト、サンプリングへの対応、モデルの構造を隠すことである。

メインTOPIC

Retriever-Free Retrieval: Navigating Documents with Decision Models

arXiv: 2610.35868著者: Chao Wan, Paul Jünger, Beixi Du, Bodong Liu(Cornell), Navaneetha Krishnan(ASAPP), Kilian Q. Weinberger(Cornell / ASAPP) 発表会場/年: arXiv preprint, 2026(v1: 2026-10-26)

概要

  • 埋め込み検索の代わりに、コーパスの木構造(トピック → ページ → 段落)を上から辿り、各階層で LLM に残す枝を判定させる DecisionRAG を提案
  • first-stage retriever・index・タスク学習なしで、Dense + 8B reranker を MultiDoc2Dial の R@1 で +13.8pt、Natural Questions の Hit@1 で +17.4pt 上回り、1 クエリ 0.7〜1.8 秒で返す。
 

背景

  • 能力の非対称(capability asymmetry): generator は急速に賢くなったが、retriever は BM25 や固定埋め込みの近傍探索のまま。retriever が落とした証拠は、強い generator でも回復できない。
  • 既存の 2 つの逃げ道とその限界
    • Reranker(cross-encoder、RankGPT 型の listwise): 安く精度を上げられるが、並べ替えられるのは first-stage が拾った候補だけ(recall の上限が first-stage で決まる)。
    • Agentic / LLM 誘導の階層探索: LLM 自身が探索する方式。Agentic は「考える → 検索ツールを呼ぶ → 結果を読む」を繰り返し(ReAct, Search-R1)、階層探索は文書の木を辿り、開く枝を LLM が選ぶ(MemWalker, PageIndex, LATTICE)。recall の天井は外れるが、各ステップでトークンを生成するので遅く高い。
  • 生成なしで LLM の判断を引き出す流れ: FIRST(先頭 1 トークンの logit で listwise ランキング)、ICR / BlockRank(attention から関連度を取る)など。本論文はその延長で、2026 年に出た decision model(TypeSafe の Jev、OpenAI の GPT-6 Luna decisions)を検索に使う。
  • 階層検索の系譜: DocQN(RL で文書木を辿る)、Dense Hierarchical Retrieval(学習済み encoder で文書 → 段落)、RAPTOR(再帰要約の木)。いずれも学習や要約生成が要る。
 

手法

コアアイデア

  • コーパスを木(葉=段落、内部ノード=データセットにより、ヘルプセンター(MultiDoc2Dial では米政府の機関ごとのヘルプサイト)・トピッククラスタ・ページ・見出し)とみなし、根から下る。
  • 各階層では、残っている候補ノードの説明文を 1 つの context に並べ、decision model に「この候補は探る価値があるか?」を候補ごとに並列に問う。上位 個だけ展開し、残りの枝は二度と見ない。最後に段落の上位を多肢選択で並べ直す。
 

Decision model の 2 つの判定モード

用語の整理: クエリは検索の問い(対話系は直近の会話)。候補はその階層で判定したいノード(クラスタ・ページ・段落)で、説明文を context に並べる。質問は候補ごとの Yes/No の問い(例: 「Does Paragraph n contain information needed to answer the user's question?」)で、候補が n 件なら質問も n 個(付録 B.1)。
並列 binary 判定: 共有 context (クエリ+全候補の説明)と、候補ごとの Yes/No 質問 を与えると、1 回の forward で各質問の Yes 確率を返す。
正規化は各質問の Yes/No の中だけなので、。候補数の上限は context 長だけで、入りきらなければリクエストを分割して並列に投げる。
多肢選択判定: 1 つの質問に対し選択肢 の分布を返す。
選択肢同士が競合として扱われるので順位付けに強いが、選択肢数に上限がある(Jev は 255)。
使い分けは「途中の階層は binary(上限なし・並列可・recall 寄り)、最後だけ多肢選択(上位の並びを締める)」。
📝 binary は「それぞれ関係あるか」、多肢選択は「どれが一番か」: 多肢選択の追加は 0.12〜0.15 秒で、ConditionalQA の Hit@1 を 71.9 → 76.5 に上げた。
 

共有 context で判定する意味

各質問は同じ context(=他の候補全部)を見ているので、単独なら関連ありに見える候補でも、明らかに良い候補が隣にあれば が下がる。つまり 共有 context が確率を候補間で比較可能にする(calibration)。pointwise な cross-encoder との本質的な違いはここ。
  • 段落を「ページごとに別リクエスト」から「全ページ分を 1 リクエスト」に変えると MultiDoc2Dial の R@1 が 36.7 → 44.4(+7.7pt, 95% CI [3.3, 12.2])
  • 効果は 1 リクエスト約 50 候補で頭打ちなので、大きな階層は約 50 件単位に分割して並列に投げても損しない。分割すると Hit@1 は落ちるが R@10 は変わらない。途中の絞り込み(recall 重視)は分割でよく、最終順位だけは 1 リクエストで比べたい
📝 効果は 1 リクエスト約 50 件で頭打ち: なので大きな階層は 50 件程度に分けて並列に投げても精度はほぼ落ちない(途中の絞り込みは分割でよい)。一方で最終順位は、多肢選択で全候補を直接比べるとさらに +6.8pt 上がる。

階層探索アルゴリズム(論文の Algorithm 1)

📝 階層探索アルゴリズム(Algorithm 1)の流れ: 各階層で BinaryJudge し、上位 k 個の子だけを次の候補にする。最後の階層で段落の上位 r 個を残し、任意で上位 m 個を ChoiceJudge(多肢選択)で並べ替えて返す。数字は Natural Questions(268 万段落)の設定の例。
  • 木が無いコーパス(Wikipedia)は、ページのタイトル+先頭文を e5-base-v2 で埋め込み、k-means で 1,000 クラスタにし、各クラスタを Qwen3-8B に 1 文で説明させてノードにする
  • NQ では段落スコアにページのスコアを掛ける()
  • 対話系(MultiDoc2Dial / MTRAG)では直近 6 ターンを入れ、直近に取ったページを覚えておく notepad を併用(R@1 +4.0pt)
  • 任意で dense retriever の上位 20 件を最終段の候補に足せる(+ dense candidates)。pruning で落とした証拠の救済になる
 

コーパスサイズに対するレイテンシ

各階層の候補は並列に判定するので、レイテンシは段落数ではなく 木の深さ で決まる。各ノードの子が最大 個のバランス木なら、
秒、 なら 段落でも 5 段・約 1 秒。一方 コストは判定数(各階層で 件)に比例 するので、レイテンシほど綺麗には伸びない。
📝 段落が 100 倍になっても 1 段(≈0.2 秒)増えるだけ、というのが理論: 実測は理論より遅い。MTRAG は 8,578 ページを約 40 本の並列リクエストで採点したあと上位 50 ページを採点し直すなど、段の数も 1 段あたりの仕事も理論より多いため。またコストは判定する候補数(各段で k × b 件)に比例するので、レイテンシほどきれいには伸びない。NQ は 1 クエリ 2.33¢ で、GPT-5 rerank(1.40¢)より高い。
 

実験

実験設定

📝 実験設定の全体: 4 つのデータセットで、木の形と規模が違う。比較対象は sparse / dense の retriever、reranker、GPT-5 rerank。判定モデルは Jev をそのまま使う。

主要な結果

手法MD2D R@1CQA Hit@1MTRAG R@5NQ Hit@1NQ R@10
BM2520.624.718.816.442.3
Dense27.947.226.046.287.2
Dense top-100 + Qwen3-Reranker-8B33.664.632.548.089.0
Dense top-20 + GPT-547.573.431.860.888.9
DecisionRAG (Jev)47.469.734.265.486.7
+ dense candidates(dense top-20 を追加)48.573.436.666.488.9
📝 8B reranker には全データセットで勝ち、GPT-5 rerank とはほぼ互角: GPT-5 に負けるのは ConditionalQA の Hit@1 だけ(69.7 対 73.4)で、dense 候補を最後の段に足すと並ぶ。dense 候補を足すのは、木を辿る途中で落とした正解を拾い直す保険になる。
  • レイテンシ・コスト(中央値): DecisionRAG 0.68〜1.76 秒 / 0.22〜2.33¢、Dense + Qwen3-RR(A6000 1 枚)3.3〜14.3 秒、GPT-5 rerank 11.8〜15.0 秒 / 1.2〜1.9¢
 

アブレーション

1. 生成で辿ると、どうなる? → 精度は同等で、34〜145 倍遅く、21〜25 倍高い

  • 同じ木・予算で、各階層の判断だけを GPT-5 の生成(残す番号を書かせる、LATTICE 風)に置き換えた。
  • Hit@1 は CQA で GPT-5 が +4.1pt、NQ で DecisionRAG が +6.0pt。一貫した差はない。
 

2. 効いているのは「木を辿ること」か「判定モデル」か? → 辿る方が CQA +7.7pt、NQ +7.0pt

  • 同じ Jev で、「木を辿る」と「Dense 上位 100 件を rerank」を比べた。
  • 辿る方が Hit@1 で CQA +7.7pt、NQ +7.0pt。MD2D・MTRAG は同等。
  • gold を含む率は Dense 上位 100 が高い(NQ 98.4% 対 94.0%)が、両方が含む場合は辿る方が 1 位に置ける(70.1% 対 61.9%)。著者の推測(直接は検証していない)は、段落が元のページごとに文書の順で並び、ページの流れの中で読めるから。

3. 最後に多肢選択で並べ直すと、1 位の精度は上がるか? → 上がる(CQA で +4.6pt)

  • 前の binary 判定は固定して、多肢選択の並べ替えの有無を比べた(dense 候補あり、上位 20 件)。
  • MD2D の R@1 は 50.1 → 51.3、CQA の Hit@1 は 71.9 → 76.5。追加は 0.12〜0.15 秒、コスト +4〜33%。
  • 数字は design set での値で、主要結果の表とは一致しない。

4. 最初の階層(NQ のクラスタ 1,000 個)で、何割残せばいいか? → 約 15% で十分

  • 木の一番上で残すクラスタの割合を変えた(上限は、クラスタなしで全 108,626 ページを採点する flat)。
  • 約 10% までは R@10 が急に伸び、以降は横ばい。15% で flat と同等(86.2 対 84.5)、コストは約 1/5(2.3¢ 対 12.1¢)、レイテンシは約 1/3(1.7 秒 対 4.5 秒)。
  • 5% 未満は gold のクラスタを落とし、1% で R@10 63.7。主な実験は 150/1,000 個(15%)。

5. 最後の段落判定に進めるページ数(MD2D)を、3 → 10 に増やすと? → 取りこぼしは減るが、1 位の精度はほぼ変わらない

  • ページ判定で新しく残すページ数を 3 → 10 に変えた(MD2D)。
  • R@10 は 81.0 → 83.6、R@1 は 46.9 → 47.4。コスト +83%、レイテンシ +28%。
  • 著者の結論: 主に証拠の網羅(recall)が上がり、1 位への効果は小さい。
 

考察

  • なぜ効くか: (1) 判定に LLM の理解力を使える、(2) 共有 context で確率が候補間で比べられる、(3) 段落をページごと・読む順で見せるので文脈込みで判断できる((3) は著者の推測で、直接は検証していない)。
  • 残る誤り: 段落選択が主因。CQA では、gold ページを落とすのが 8.5%、別ページの段落を 1 位にするのが 9.6%、同じページの別段落を 1 位にするのが 13.7% で最大(付録 D.2、ページ 3 つ・多肢選択なし)。
 

限界と今後

  • コーパスの階層構造とノードの説明文に依存する。整理されていない文書や情報量の少ない説明では精度が落ちる
  • pruning は不可逆で、上位の階層で落とした枝の段落は取り戻せない(予算を増やすか、dense 候補を足して緩和)
  • decision model の性能に上限を握られている。著者は「decision model が良くなれば検索もそのまま良くなる」と書くが、判定モデルの選択肢が少ない現状では再現性・コスト面の制約になる
 
 
 
 
 
 
 
 

過去の勉強会