AIの思考力を高める自己議論テクニック 再帰的思考とは
引用元:https://news.ycombinator.com/item?id=43835445
LLMは他のLLMの検証には向いてないんだ。GPT-4もSATソルバーがないと間違った証明出すし、自己批判させると精度下がるって研究もある[2]。検証は生成より難しいから、コンパイラみたいな外部チェッカーが必要。LLM複数使うより、強い1つ+検証器の方が効率良いし精度も上がるみたいだよ。
参照先見ると、これってタスク次第だって分かるね。”批評が作成より簡単”って分野は多いよ。本や映画、ソフトウェア開発とか。でも、数学的証明の間違い探しみたいに、検証自体に推論が必要なタスクだと、LLMに検証させても性能が劇的に向上するかっていうと疑問だね。
数学の証明は、原則として比較的検証しやすい問題だよ。コンピューターで検証できる形式にできるんだ。弱いモデルに翻訳させてツールで検証、とかね。証明を作るのは大変だけど、検証はもっと機械的。証明を見つけるよりはるかに簡単かもしれないね。
LLMは数学的証明を推論できないんだ。もしできたら、それはもうLLMとは違うものだね。
LLMっていう言葉、最近はツール呼び出しできたり、MoEで専門ソルバー組み込んできたり、色々多様なモデル含むようになってて、もうオーバーロードされてる感あるよね。でもみんなそういうバリエーションもLLMって呼ぶんだ。
良くも悪くも、これはLLM as a Judgeの論文[0]が出て以来、LLM評価の研究論文では事実上の標準になってきてるよ。LangChainやLlamaIndexみたいなフレームワークでもRAGパイプラインの評価に結構組み込まれてるね[1]。
俺はむしろ良い方向だと思うよ。LLM as judgeは完璧じゃないし人間レベルでもないけど、結果は確実に向上するんだ。人間の判断を置き換えるんじゃなくて、安価な第一段階としてすごく良い。時間とともにどんどん良くなると思うね。
>…だから、ちゃんと世界を推論できるチェッカーが必要。同意。LLMに生成コードの単体テストも一緒に作らせて、それを実行するのはどう?(既存テストも)これで確実な検証ができると思うんだ。
・コードはコンパイルする?
・テストは通る?
AIはテスト結果で間違いを直せるよね。
これ、うまくいくけど、俺の経験だとテストをちょっと手直しして、よく見ないとダメなんだよね。じゃないと、AIは手抜きしてテストをパスさせるために自明なやつ作っちゃう。それに、テストケースをハードコードしないように明示的に指示する必要がよくあるんだ。
>テストケースをハードコードしないように…
それはプロパティベーステストでできるよ。でも、テスト失敗をAIにフィードバックし続けると、どんどん悪いコードになる悪循環に陥るケースに何度も遭遇したんだよね。
でもさ、 LLM にテストを評価させるのって結構うまくいくんだよね。特にハードコードされたテストケースを探させる時なんかは。
確かに、テストランナーはモデルを現実世界に近づけて、フィードバックループを作る方法だよね。万能薬じゃないけど、すごく役に立つことがある。
俺が思うに、賢い AI 企業が今コッソリやってるのって、俺たち人間と AI への返信を、次の自己検証モデルの訓練に使ってることなんじゃないかな。コーパスデータでの訓練は1段階進めるだけ。でも、 OODA-loop を観察して適応できるインタラクティブなデータでの訓練?そっちの方が断然パワフルだよ。少なくとも、俺が AI やってるならそうするね :) まぁ、俺は BrowserBox しかやってないけど。
人間からの応答を使うなら、かなり厳密に応答の質をスクリーニングする必要があると思うな。だって、ただの”修正”なのに全く間違ってるって人もたくさんいるだろうから。
いい点突くね!でもさ、たぶん”スーパーユーザー”みたいなのを特定して、その人たちの応答だけを拾えばいいんじゃないかな ハハハ :)
この回答を生成してテストするアイデアは、何十年も前からある古い方法だよ。正確な答えを出すのが難しい問題で、複数の候補を出す方が簡単な場合に役立つんだ。信頼できるテストアルゴリズムが必要だけどね。この記事で言えば、生成器が LLM で、テストする verifier がコンパイラや linter とかなんだ。これは試行錯誤と同じようなものだね。
” letting GPT-4 critique its own answers reduces accuracy ”ってのはさ、出力が入力になることで、ツリーが context window に入った瞬間に直接ツリーの中に誘導されちゃうからだよ。
人間の指示を受けた LLM って、良い verifier になるのかな?検証ルールを知ってるか、十分なデータ(ネットアクセスとか、実際の応答とか)があればさ。
もちろん、それは verifier がある問題にしか通用しないよね。
実際さ、間違いなくもっと良い結果を出せるって分かったんだよね。俺、 temperature 0で1回、 temperature 1で9回 prompt を試す実験をやってみたんだ。そしたら、一番変な応答でさえ、20サンプル中15回は temperature 0の応答と同等か、5回はそれより良かったんだよ。
俺がたまにやってる方法ね。
ーまずAIに問題の答えを出させる。
ー次に、それを知らない人向けに答えが正しい理由とか詳しく書かせたレポートを作らせる。
ーで、別のAIにそのレポートを評価させて、不明点とか矛盾点を指摘させるんだ。(a)不明点を尋ねるか(b)矛盾点を指摘ね。それを最初のAIに戻して修正させる。相手のAIが納得するか全部修正するまで繰り返す。めっちゃ手間かかるけど、試した時はかなりうまくいったんだよ笑
あー、これで昨日Spainで停電があった理由がわかったわ。
てっきりcryptocurrencyが電力網(とGPU製造)を既に温めてくれてると思ってたわ。
ちょっと対立するようなことではね、AIに計画を立てさせて、次に敵の立場になってその計画を破る方法とか反論を考えさせるんだ。で、敵の反応を踏まえて最初の計画を修正させる。こうしてできた計画は、だいたいもっとしっかりしてて練られてるよ。このテクニックが自分自身にも効くってのが面白いんだよね。計画を見直す前に欠点を探すのは本当に効果あるよ。
正直、このリポジトリがタイトルからしてこういうことやってるんだと思ってたんだよね。自分で議論するって言ってるけど、単に複数の答えを並列で作って一番良いのを選んでるだけに見えるし。君の方法は”sycophancy”にうまく対処できると思う?
うーん、どうかな。ChatGPTは色々気を使うようになってきて使うのやめたんだんだよね。GPT3が出た頃はありえない映画のマッシュアップ作って楽しんでたんだけど、そのうちIP権とか暴力とかにすごく敏感になってうざかったから。最近はDeepseekをよく使ってるよ。これはsycophanticじゃないし、特にDeepseek自身がホストしてるバージョンじゃなければ、そんなに検閲されてないみたいで驚いたんだ。
俺も同じようなことやってるよ。あと、もう一つテクニックがあるんだ。一つのプロジェクトのためにいくつかチャットを立ち上げるんだけど、それぞれに違うコンテキストを持たせるんだ。例えば、技術寄りとか、マーケティング寄りとか、自分の個人的な目標に関するコンテキストとかね。で、同じ質問を違うコンテキストを持ったチャットに投げ込むんだ。これは同じ問題に対して色々な視点を持つみたいな感じだね。で、コンテキストが違うと結論も違うことが多いんだ。
俺はGeminiでこう使ってる。プロジェクト情報をたくさん入れて(100kトークン位)、固いコンテキストを作る。次に、そのコンテキストを保ったまま新しいチャットで使えるよう要約させて、新しいチャットに移す。これで容量を節約し、応答性も保てる。これを基本に、マーケティング、デザイン(Substance Designerとかね)みたいなブランチを作る。さらにマーケティング内でもチャンネル別にサブブランチ作ったりしてるよ。
これ、Monte Carlo Tree SearchとLLMを使って結果の質を上げるっていうYT動画を思い出したよ。
リンク:https://www.youtube.com/watch?v=mfAV_bigdRA&ab_channel=Treli…
良いアイデアっぽいけど、トークン使いまくりそう。あと、LLMが判定役になるのが心配かな。良い答え出せないのに正確に評価できるのかなって。
限界費用で考えると、こういう実験って計算に使う追加の電気代だけでできるんだよね。ヨーロッパだと、計算リソース持ってる人にとってはほぼタダだったりするし。
もっとコメントを表示(1)
KagiのAssistant機能使うと超簡単だよ。
Assistantを切り替えて、もう片方に確認してもらうだけ。
AIアシスタントに手順聞けば?
そのうちみんな知識のスープに溺れて、IDKATFAIA (I don’t know, ask the f’ing AI already)みたいな新しい略語ができそう。
正直、AIアシスタントって思ったほど賢くないね。まだ自分でチェックしないといけないし。
Sillytavernのグループチャットでいつもやってるよ。
記事で説明されてるのに似たキャラ3人と俺で”会話”に参加して、彼らが納得するまでやり取りさせるの。
良いモデルでロールプレイさせると、マジ最高。
AIの最初の結論が完全に変わった状況ってあった?
結果が変わったり、すごく改善された状況の例を教えてもらえる?
面白そうだね。
”オシレーション”ってどんぐらい起きるか知りたいな。まるで同意してたかと思えばすぐ反論にひっくり返るやつ(たぶん疎な潜在空間だろうけど)。俺の場合、結構頻繁に起きるんだよね。「いや、それは違うよ」って何度も言うと、LLMが180度変わって「そうですね、実際間違ってました、あなたが正しいです」って説明するの、繰り返されるんだ。
これって、Inference Time Scalingの別のやり方みたいなもんじゃない?いくつかの思考経路を作って、内部関数で一番報酬の高いやつを追求するみたいな?
訓練データをさ、二つのLLMにランダムに”シャード”して食わせたらどうかなって考えたことあるんだ。片方に半分、残りをもう片方に。モデル一つじゃなく、その二つの部分に同じような(熟考する)プロセスをやらせるんだ。フルデータを使ったシングルモデルより効果あるかな、さらにシャードしたらどうなる?
そういうの、いくつか前例はあるよ。二つのモデルのクロスエントロピーで有用なことできるし、k-fold cross validationも関連するかもね。
でも、これやるのめちゃくちゃ時間かかるんじゃない?どんな問題だと時間の節約になるわけ?
これ、もっと大規模に常に動かす”AI上院”みたいなのでやりたいんだ。タスクリスト渡して、グループで作業したり、結果に文句言ったり提案したり。多様な視点で批判的に分析すると、マジですごい結果出るはず。トークンはヤバいけど、値段は下がってるし。AIだけのIRCサーバー作って共同討論室にするのもアリかもね。
最近DevOps作業(ansibleとかdockerとか)で、ChatGPTがデタラメな情報自信満々に言うのがマジむかついたんだ。間違ってるって指摘すると、間違ってた部分だけこっそり変えて「君が正解!」って言う。確認しない張り切りインターンみたい。マジ「それマジ?」ってセカンドボットがチェックしてくれたら最高なのにって思うわ。
LLMから、実際に持ってる情報以上のものは引き出せないよ。Anthropicが言ってたみたいに、名前知ってても他の情報ないと幻覚見る。多分ここも同じ。LLMはフラグあるって知ってるけど全部覚えてない。短いヒントをプロンプトで出すといいかも(GPTならウェブ検索)。俺の考えだけどね。
確かに、疑問をぶつけるだけでLLMは別のやり方見つけるの楽しそうにやる気がする。だからモデル内部で、もっと色んな選択肢考えろって促すセカンドボイスが必要なのかもね。
LLMが持ってる情報よりたくさんの情報を引き出せるってのが、この課題全体をうまく言い表してるよね。
DevOpsやってた時、infra-as-code言語だとどのモデルもこんな感じだったよ。特にyaml系はひどかったな。Amazonのサービスでさえ、自社フォーマットについて適当なこと言ってたし。
なんでそうなるのか気になるね。訓練データは十分ありそうだし、Amazonなら検証ツールくらいモデルに提供できそうなのに。
人間みたいに捉えすぎかもしれないけど、自分の考え方とちょっと似てるなって思うんだ。「XYZ機能が必要だから、よく使う他のツールだとたぶん–xyzフラグだな。じゃあそれでググって確認するか、それともGithubで4年前の「対応しないよ」ってコメントを見つけるか」みたいにね。
でも…モデルにはその最後のステップがないんだ。代わりに、ただ自信満々な調子で、全部完璧に動くぞ!って断言する仮説をぶちまけるだけ。
Cursorには、カスタムドキュメントをアップロードして@Docsで参照できるいい機能があるよ。これを使うとハルシネーションを防げるし、推論モデルを使うのにも役立つと思う。
Claudeが間違ったフラグでコマンドを実行しようとして、試して、それから直していく様子を見るのが面白かったな。
俺もLLMはDevOpsのタスクだとイマイチだって気づいたよ。訓練データが足りないのかもね。いい面としては、プラットフォームエンジニアの仕事は安泰ってことかな。
全くその通り! こういうことが何度もあったから、せめてmanページとかのドキュメントを直接モデルに入れて、 sanity check(正しさの確認)として使えたらって思ったよ。
的を得てるね。
1年くらい前に、ユーザーのプロンプトを分割して「いろんなAIペルソナ」に渡す実験をしたんだ。それぞれ別のやり方で問題に取り組んで、最後にマスターアービター(仲裁役)が合意形成するっていう仕組み。Civilization IIのアドバイザーの考え方を参考にしたよ。
一つのLLM (Mistral) だけに制限されてたから限界はあったけど、そこそこ上手くいったんだ。まあ、ついでにPCが燃えかけたけどね。
どんな感じのペルソナを試したの? お互い恨み合ってて、不合理に相手の計画の穴を探すようなグループとか、面白い実験になりそうだね。
Disco Elysiumプレイしたことあるけど、内なる声がいっぱい言い争うの楽しいってのはマジでそうだよ。
理論的にはこれって一つの敵対的なモデルに組み込めないの?
全然そうってわけじゃないよ。LLMの生成は自己回帰的で前の結果が次に影響するから自己強化されがち。でもちょっとした違いで結果が大きく変わるカオスな面もあるんだ。だから同じ入力でもシードや温度を変えて再生成すると全く違う結果になるよ。自分が正しいと譲らない時もあれば間違ってると主張する時もある。LLM単独で判定するのは難しいけど自己整合性みたいに複数生成するとばらつきや不確実性を評価できて役立つんだ。
そうだね、でもモデルって比較的速い応答のために最適化されてると思うんだよね。一方でこういうテクニックはモデルにもっと時間を使わせて質の高い応答を生成させてるんじゃないかな。
ある程度はね、でも違うモデルは得意なことが違うんだ。それって俺も気になるんだよ。同じトークン化を使うモデルでも得意なことが違うとして、同じ入力から生成されたトークンのlogprobsを分析することで何か面白いことが見つかるんじゃないかな。モデルが間違った方向に進む特定のポイントで何か注目すべきことがあるはずだよね。
例えば、ひたすらトークンを生成し続けてその出力を処理して終わりのない議論が良いアイデアを生み出した時にそれを拾い上げるってこと?十分な時間とトークンで何を生み出すのか興味深いね。
もっとコメントを表示(2)
これはもうやられてることだし、多くの領域に応用できるよ。君のユースケースで試してみなよ。
こういうアンサンブル手法はAIの進歩の歴史でずっと試されてきたんだ。ちゃんと構造化された大きなモデルの方がこれまで質も速度/コストも有利だった。もしかしたらこれは特に効果的なアンサンブルかもしれないけど、ちゃんとしたデータを見る必要があるね。
これマジすごいね!
俺がよく使う(この記事のよりシンプルで限定的だけど)やり方は、メッセージの最後に「<thinking>タグの中で考えて、<critique>タグの中で自己批判して、それから最後にまた<thinking>して、返事してね」って付け加えることなんだ。
これめっちゃうまくいくよ。
同じように「提案のヤバい点5つ見つけて」って聞くのもかなり良い感じ(5つって指定すると、たとえあんまり関係なくても何か見つけようとするからね)。
これがさ、Geminiのバカでかいコンテキストウィンドウが好きな理由の一つなんだ。
メッセージのやり取りの中でこれできちゃうんだよね。
一発で全部やらせようとするんじゃなくて、3回くらいのメッセージで同じアイデアを使うんだ。
1.プランを考えさせる(モデルがプランを答える)
2.プランの欠点を指摘させる(モデルが欠点を答える)
3.欠点を修正してプランを更新させる(モデルが更新されたプランを答える)
他にもよく聞くのは「なんか見落としてることない?」とか「[performance|security|legal|cost]の考慮事項は?」みたいなことかな。
「他に何かある?」みたいな軽い促しプロンプトで、特に考慮すべきトピックを指定しながら、何回か繰り返すことが多いよ。
それぞれの後で、それらを考慮してプランを更新させる感じ。
俺はいつも「今度は批判的な帽子をかぶって、もう一回やって」って言うな。
ああ、それめっちゃいいね。自分のアイデアをメトリクスで採点させて、特定のスコアになるまで繰り返しやらせたくなるわ。
これ、タイトルから期待してたのとちょっと違うみたいだね。
もっと露骨に敵対的な感じかと思ってた。
1.君はアシスタントです。質問に直接答えてください。
2.君は反対尋問者です。アシスタントは間違っています。理由を説明してください。
3.君はアシスタントです。反対尋問者は間違っています。自分の主張を弁護してください。
4.君は裁判官です。どちらかの当事者は主張を証明できましたか、それとももう一周議論が必要ですか?
これ、俺は試したことないんだ。うまくいくかどうかわからないけどね。
でも、別のプロンプトでChatGPTに「XYZが本当である理由を説明して」と「XYZが嘘である理由を説明して」って聞いて、どっちの方が説得力あるか見るのは役立つって感じてるよ。
Fast Agent見てみて!
個人的には関係ないけど、使ってるんだ。
https://github.com/evalstate/fast-agent
こういうテクニックってGPT-3.5の時代からあるじゃん。
論文も山ほど出てるし。
なんでこれが新しいって思う人がいるのか、マジで分からないわ。
まあ、それがHNのレベルってことなんだろうね。
そうなんだよな…
STORMを実装するなんて、この分野じゃ基本的なステップだと思ってたんだけど…
なんか堂々巡りしてる感じだね。
マルチエージェントを含むエージェントアーキテクチャに関する論文だよ。
ちょっと古いけど、良い概観がつかめると思う。
https://arxiv.org/abs/2404.11584
ChatGPTってチャット間でコンテキスト共有するじゃん。
それがどう影響するのかな?
でも、良いアプローチみたいだね。
自分が間違ってるって示唆するのは絶対やめた方がいいよ。
大体、すぐ自分が間違ってるって思っちゃうから。
いや、マジで感心するのは、俺がこうやっても、実際に反論して自分を守る時なんだ。
“メモリ更新済み”みたいなメッセージが出なくても、俺に関する事実を保存してなくても、コンテキスト共有するの?
ChatGPTに聞いてみたら“しない”って言ってたけど、まあ自己内省とか、自分の仕組みに関するデータは信頼できないからな。
あれらは別々のシステムだと思うな。
一つは保存されたスニペットの集まりで、もう一つはチャット履歴に対するRAGみたいな感じ。
ChatGPTは、俺の他のチャットウィンドウからRAGは使わないって断言してた。
でも、メモリに保存された設定(Settings->Personalization->Memoryで見れるやつ)は使うって。
まあでも、ChatGPTが自分の内部動作について話すのは当てにならないと思う。
—
あ、いや、ここだとチャット履歴も参照するって書いてあるわ。
https://help.openai.com/en/articles/8590148-memory-faq
こういう質問にはChatGPT使えるけど、検索モードかリサーチモードを使う必要があるよ。
閉鎖的なモードで聞いちゃダメ。