CoT(Chain-of-Thought)徹底解説:算数から常識推論まで、思考プロセスを“書き出す”だけでAIが変わる!
こんにちは、ゆずかきです。
ここからは、「Chain of Thought(CoT)」 と呼ばれる新しい発想について、一つの技術ブログ記事としてまとめてみたいと思います。
今回取り上げる「CoT」は、Google Researchが論文「Chain-of-Thought Prompting Elicits Reasoning in Large Language Models」にて紹介した概念。多段の推論が必要な問題を解かせる際、AIが“途中の思考過程”を自然言語で書き下す(生成)することで、従来の手法を大きく上回る性能を達成したという面白い手法です。
それでは、論文の内容を一通り振り返りながら、できるだけ噛み砕いて説明していきましょう。
論文URL
👇
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
§本記事の構成
- はじめに: CoTとは?
- 論文の背景
- 従来手法との比較:どこが画期的?
- CoTのアーキテクチャ & プロンプト設計
- 主要な実験結果と考察
- 拡張・応用範囲:算数だけじゃない?
- 課題と今後の展望
AIが途中経過(推論プロセス)を生成してくれるなんて、かなりワクワクする流れですよね。順を追って見ていきましょう。
§はじめに: Chain of Thought(CoT)とは?
論文の正式名称は、
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
著者は、Jason Wei ら Google Research, Brain Team のメンバーが中心で、2022年から2023年にかけてarXivに投稿され、NeurIPS 2022でも議論の俎上に挙がった研究です。
この研究が目指すゴールは「巨大な言語モデル(LLM)の推論能力を、トークン単位の出力だけではなく、一連の思考過程(ステップ)を可視化してさらに精度を上げる」という点。
従来、Few-Shot Prompting という技法では、「入力→出力」というペアを数個(例:8個)ほど並べるだけでしたが、ここに Chain of Thought(思考過程の連なり) を明示的に差し込む発想が大きな効果を示しました。論文中では「chain-of-thought prompting」と呼んでおり、要は「少数のサンプル例(Few-Shotのうちの“Answer”部分)に、思考の途中経過を自然言語でガッツリ書く」ということですね。
たとえば算数問題をAIに解かせたいとき、途中の計算や論理を言語化して書かせる( “2本の缶に3個ずつのボールが入っているので合計6個。それを5個と足し合わせると合計11個になる” )というステップを含めてプロンプト例示を行うと、モデルが「推論経路」をトレースしやすくなり、正答率が上がるという仕組み。
§論文の背景
論文によると、大規模言語モデルは「モデルサイズを増やしていくほど多様なタスクに対応できる」という流れがありました。しかし、算数や論理推論 といった多段ステップが必要な問題では、単にモデルを大きくしても限界がある(スケールだけでは解けない)。
そこに着目し、「推論途中の言語化」 を入れたところ、急激に性能が向上した、という報告がなされます。
具体的には、
- GPT-3 175B
- PaLM 540B
- LaMDA 137B
など多数のモデルに対し、「CoTあり」と「CoTなし」の比較実験を行ったところ、以下のような特徴が見られたそうです。
- モデルが小さいと、CoTがあっても効果なし(むしろ邪魔)
- モデルが大きい(100Bパラメータ超)になると、CoTの恩恵で性能が急激に向上
- 特に多段階(複雑)な問題ほど、CoTの効果が顕著
たとえば、有名な算数の難問ベンチマーク “GSM8K" で、PaLM 540B は通常プロンプトだと18%しか正解できなかったのが、CoTを挿入すると56.9%に躍進。
さらにポストプロセスで電卓演算(外部計算器)を組み合わせると60%を超える水準まで行く、とレポートしています。
§従来手法との比較:何が画期的か?
論文では主に下記の観点を強調しています。
- Fine-Tuningが不要
- 自然言語による「思考途中のメモ」をFew-Shotで与えるだけで性能が大幅に上がる。
- これまでは「途中推論を学習させる」には大量のラベルデータを作ってFine-Tuningを行う必要があったが、CoTは単なる数例の“in-context”でいける。
- 自然言語ベースなので汎用性が高い
- 従来は、算数の中間ステップを数式形式やシンボル形式で補足する研究が多かった。
- しかしCoTはあくまで自然言語で書くため、算数以外の推論(常識推論やシンボル操作)でも使える、という強み。
- 推論過程を“人間が読める”形で出せる
- 途中経過(chain-of-thought)を眺められるので、モデルがどう答えを得たかの一端を把握できる(もっとも、論文では「本当に人間と同じ思考かは別問題」として注意喚起あり)。
§CoTのアーキテクチャ & プロンプト設計
さて、具体的にどんな風にCoTをPromptとして与えるのか。論文での例を引用すると、たとえば算数問題をFew-Shotで解かせたい場合、以下のようにプロンプトする:
Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls...
A: Roger started with 5 balls. 2 cans of 3 tennis balls each is 6 tennis balls. 5+6=11. The answer is 11.
こうした「途中計算の文章」をちゃんと書いてから最終解答を述べてあげることで、モデル自身も同様のステップを辿りやすくなる、というわけですね。
論文には、他にも「equation only(数式だけ中間に挿入する)」「variable compute only(文章じゃなく…のようなトークン数を増やすだけ)」などの比較実験が載っています。結果としては、自然言語による論理展開が非常に重要であり、「数式だけ」や「トークンだけ増やす」は大して効果が出なかったとのこと。
また、実験の中で興味深いのは「exemplar(Few-Shotの例)の書き方をちょっと変えても、それなりに性能が上がる」という点。つまり、「人によって書く文章が違っても、どれもある程度の効果が得られる」そうです。ただし、短すぎたり論理が飛躍している例だと効果が落ちるため、「例示文はなるべく丁寧に書いた方が良い」みたいなアドバイスも述べられています。
§主要な実験結果と考察
論文では多岐にわたるベンチマークを用いて、CoTの有効性を確認しています。代表的なものを以下にまとめます。
- Arithmetic Reasoning(算数)
- GSM8K, SVAMP, ASDiv, MAWPS など多数のデータセット。
- CoTなしだと5~20%程度しか正解しない大規模モデルが、CoTありだと50~60%に跳ね上がるケース多数。
- 特に、問題ステップが複雑になればなるほど、効果が顕著。
- Commonsense Reasoning(常識推論)
- CSQA, StrategyQA, さらにBIG-Benchの一部タスク(Date Understanding, Sports Understanding)
- こちらもPaLM 540B + CoTが特に強く、従来SOTAを上回る結果。
- ただし、難易度がそこまで高くないものだと差が小さい場合もある。
- Symbolic Reasoning(シンボリック推論)
- 文字列操作(最後の文字を連結する etc.)やコイントスの裏表など、単純だけどステップ分解が必要な問題。
- 例えば「A coin is heads up… X flips / does not flip the coin… Is it still heads up?」のように状態遷移を追う問題。
- CoTなしだとモデルが途中でバグりやすいが、CoTありだと正答率が跳ね上がる。さらに、学習例では2回フリップしか提示していなくても、推論時に4回フリップに拡張しても解ける(汎化性能が上がる)。
Emergent Ability(発現する能力)
論文では、CoTは“emergent ability”(モデルサイズを大きくして初めて姿を現す能力)だと言及しています。つまり、「小型モデル(10B未満)でCoTしても逆効果」になりがちなのです。
PaLM 540B、LaMDA 137B、GPT-3 175B といった百億~千億級以上になると、突如としてCoTが威力を発揮し始める。その仕組みを完全に説明するのは難しいですが、論文では幾つかの仮説(モデルの内部表現が豊かになった段階で、言語化が推論を補助する)を挙げています。
§拡張・応用範囲:算数だけじゃない?
CoTというと算数が分かりやすい例ですが、論文終盤では「汎用的なタスクに適用可能」という見通しが示唆されています。
- QA(Question Answering)の多段推論
- 文章要約や記事分割(本当かは不明ですが、論理段階を文章化することで精度向上の可能性)
- マルチモーダルへの展開(将来的には画像の内容を文章で推論する際にも適用…?)
現段階ではまだ実験されていませんが、論文執筆陣は「人間が何らかの思考をステップ分解できるなら、そのままCoTへ応用できる」という期待を述べています。
§課題と今後の展望
ただし、課題もいくつか明示されています。
- 正しい推論過程を保証できない
- CoTはあくまで「自然言語でステップを書き下せる」という技術であり、それが必ずしも正しい論理である保証はない。
- とくに二択(Yes/Noなど)だと、「間違ったステップを書いてるのに偶然あってる答えに着地」するケースもある。
- 大規模モデルでのみ有効
- 10Bパラメータ未満のモデルでは効果が出づらい、という実験結果。
- リソース制約で小さいモデルを使いたい場合や、推論時間・コストを軽減したい場合には厳しい面もある。
- 長いチェインを自動生成させると誤りが混入しやすい
- 完全自動化でCoTを作ると、途中計算や論理にバグが入りやすい。
- 一部では「手動で書いたCoT」と「自動で書いたCoT」を比較しているが、後者はまだまだ研究途上。
論文の結論部分では「Chain-of-ThoughtはLarge Language Modelの新たな境地を開く重要ステップ」と総括しつつ、さらなるモデル拡大・新しいプロンプト技術との組合せなど、多くの可能性があると述べられています。
§まとめ
CoT は、「モデルが回答を出す途中過程を自然言語化する」というシンプルな発想ながら、大きな飛躍をもたらす手法でした。特に下記のポイントが重要そうです。
- 大規模モデル(100B超)× CoT で算数や複雑QAが強化
- クリーンなFew-Shot例(文章でステップを明示) を与えるだけでパフォーマンスが向上
- 解答の途中経過が読めるため、ある程度の可読性・デバッグ性あり(ただし、完全に人間同様の思考とは限らない)
- Emergent ability:モデルが小さいと効果がゼロかマイナス、大きいと突然性能が跳ねる
今後、ほぼあらゆるLLMにおいて「CoTを挟む」というテクニックが広がる可能性は大いにあります。「プロンプトで指示するだけでここまで性能が変わる」というのは、生成AIの面白い特性を再認識させてくれるところですね。
論文としては2022~2023年時点の実験結果ですが、以後もさまざまな場面で「Chain-of-Thought」が言及されるようになっています。大規模言語モデルを使ったサービスや研究でも活かせる技法なので、ぜひ覚えておいて損はないでしょう。
§おわりに
以上、Chain-of-Thought Prompting の論文を駆け足で整理してみました。個人的には「推論ステップを自然言語で書くと強くなる」というのが非常に面白く、算数問題から始まって常識推論やシンボル操作まで、驚くほどカバー範囲が広い点に魅力を感じました。
とはいえ、正しい中間ステップを必ずしも生成できない などの課題も多く、実アプリケーションへの応用にはいろいろハードルもある模様です。しかし「論理ステップを書き下せば強い」という、今回の論文発想が、今後いろいろな手法やモデルへ波及していくかもしれませんね。
最後までお読みいただき、ありがとうございました!
🔑この記事のポイントまとめ
- Chain-of-Thought(CoT):途中推論ステップを言語化して出力させることで、多段思考タスクを解く能力を格段に向上
- モデル規模100B超あたりで威力を発揮(小規模モデルには逆効果が多い)
- 算数(GSM8Kほか)や常識推論、シンボル操作 など幅広いタスクに恩恵
- 途中の思考が可読化されるメリット もあるが、正しさは保証されない(ハルシネーション・誤計算の可能性)
- 応用範囲:さらなるLLMスケールアップや、ゼロショット要約、複雑QAへの発展が見込まれる
§参考文献(論文リンク)
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models: httpss://arxiv.org/abs/2201.11903
- GitHub – chain-of-thought-prompting: httpss://github.com/jasonwei20/chain-of-thought-prompting
- GitHub – auto-cot: httpss://github.com/amazon-science/auto-cot
- GitHub – chain-of-thought-hub: httpss://github.com/FranxYao/chain-of-thought-hub
- GitHub – CoT-KA: httpss://github.com/RUCKBReasoning/CoT-KA
- GitHub – contrastive-cot: httpss://github.com/DAMO-NLP-SG/contrastive-cot
ディスカッション
コメント一覧
まだ、コメントがありません