見出し画像

逆問題のことを知る - ChatGPTに「案出」をさせる技術の本質

はじめに

逆問題とは「結果から原因を推測する問題」のことです。この知識が、ChatGPTを使いこなすのに有用だと思うので、かいつまんで紹介します。

また、プロンプトエンジニアリングの各種手法、特にPrompt Engineering Guide で紹介されているGenerate Knowledge PromptingAutomatic Prompt Engineer 辺り、難しくてわからないという方でも、本稿をお読み頂くと理解しやすくなるのではないかと思います、たぶん。

Chain-of-Thought Prompting についても、本稿の内容を理解しているとその使い方の質が上がるのでは?

人間にとって「案出」はちょっと大変

お笑い番組におけるトークのルールとして「オチの3人目」というのがあるそうです。何か質問を受けた時に、1人目と2人目の方は普通に回答すればよいのですが、3人目の方はオチをつけなければならない、というめちゃくちゃ厳しいルール。

「風邪ひいた時に何食べる?」
「味噌汁ですかね~」
「豚汁ですかね~」
と来た時に
「あったかいスープですかね~」
では、3人目の人は「一緒や!」と突っ込まれて終わりかと。厳しい・・・
(私は数年前、このくだりで3人目が回ってきて、回答に窮するあるお笑い芸人の姿を見ました・・・ 結局回答できず、その姿が逆にウケてましたがw)

番組に出演するお笑い芸人さんたちにとってこれが厳しいのは、オチをつける、という結果を目指して、短い時間で「案を出す」必要があるからです。

案を出すのって、いろんな候補を考えてはボツ、いろんな候補を考えてはボツ・・・の繰り返しですよね。心理的負担は決して低くない作業になります。

生成AIは「案出」してくれる

しかし・・・先ほどの「風邪ひいた時に何食べる?」をChatGPTにやらせてみたら、結構いい線の回答がパパっと返ってきました。

Screenshot: もりさん via ChatGPT

「うまい棒」かぁ・・・なかなかやります。

今年どこかのお笑い番組で「お笑い第7世代 vs ChatGPS大喜利」が放送されそうな予感w

いずれにせよ、「案出」を依頼すると、そこそこいい「案」が返ってくるところは、生成AIサービスの大きな魅力のひとつです。ChatGPTに人生相談をしたり、プログラミングをお願いするのも「案出」の依頼ですし、Stable DiffusionやDALL·E 2、Midjourneyにテキストを入力して絵を描いてもらうのも「案出」の依頼。そういう依頼に対し、そこそこいい「案」を出してくれるので、大変重宝するわけです。

逆問題:「目的を満たす手段」と「結果をもたらす原因」

前述の大喜利もそうですし、人生相談やプログラミング、テキストに基づく描画はいずれも「目的を満たす手段」を考える問題です。

が、実はこれ、数理的には「結果をもたらす原因」を考えているのと同じなのです。これが本稿の本題。

え、何を言ってるの?という方もいらっしゃると思いますので、事例で説明します。

(Q1) 昨日の宴会、とても皆さんに楽しんでいただけたようです。なんでだと思いますか?
(Q2) 皆さんに楽しんで欲しいので、宴会の作戦を考えて下さい


2つの問題の構造は以下の通り。どちらも全く同じ構造をしています。

2つの問題の解(候補)は非常に似通ったものになります。実際にChatGPTに(Q1)と(Q2)を聞いてみた例を見てみましょう。

Screenshot: もりさん via ChatGPT

笑うほど同じ答え、ではありませんでしたが、それでも「飲食」と「音楽や照明」の2つは完全に被りました。また、どの答えも、語尾を過去形にすれば(Q1)の回答になりますし、語尾を現在形にすれば(Q2)の回答になります。

これで、「目的を満たす手段」を考える問題と、「結果をもたらす原因」を考える問題は、数理的には同じであることが伝わりましたでしょうか?

このような、結果をもたらす原因を考える問題のことを「逆問題」と呼びます。最近のChatGPTの使われ方を見ると、人は生成AIに「逆問題」を解いてくれることを期待しているようです。

「案出」と「検証」

実は、結果をもたらす原因の案出には、一般に以下の限界が存在します。これはChatGPTに限らず人間のブレインストーミングによる案出も同じです。

「案出したアイデアが目的・制約条件を達成できるかどうかは「検証」してみないとわからない」

これは設計学 の公理から導き出される重要な原則のひとつです。ChatGPTを使うときにも念頭に置いておくとよいと思います。

検証する際には、「法則」が必要です。「法則」とは、原因から結果を予測するための知識のことで、例えば以下のような「○○すると△△になる」という形式で示すことができます。

・テーマがあると、盛り上がる
・ゲームやアクティビティがあると、盛り上がる
・飲食が美味しいと、盛り上がる
・プレゼントや景品がいいと、盛り上がる
・音楽や照明がいいと、盛り上がる

「法則」がわかっていると、出したアイデアを法則に当てはめてみることで、実際に目的を達成できるかどうかを検証できます。ただこの事例の場合、実際には法則に確信を持てるわけではなくて、いろんな知識から「多分、○○すると△△になるかなぁ?」と思い悩みながら考えていることでしょう。

ChatGPTに「案出」をサポートさせるのはよい使い方

さて、ChatGPTは、(1) アイデアを案出、(2) 法則を用いて検証、というサイクルを内部で行っているのでしょうか?それは中身が見えないのでさすがにわかりません。

ただ、言語モデルの特性からすると、恐らくChatGPTによる「案出」は、言語モデルで溜め込んでいる「記号と記号の相関関係」が使われているんだろう、と思います。

保持している相関関係の「量」は、例えば個人が人生を通じて得た知識の総量よりは圧倒的に大きいでしょう。ですので「案出」における人の知識量の補完にはもってこいだというわけです。
ググって調べてまとめ直す作業ってそんなに知的な作業じゃないことも多いし・・・その自動化という感じですね

実際、いろんな方が「アイデア出し」に使うことを提案なさっています。
ChatGPTを3カ月使い倒してわかった! 仕事で活用する5つのコツと注意点 #TrendBuzz

ChatGPTに「検証」まで期待するのはまだ早い?

ご存じの通り、ChatGPTはときどき、世間が正しいとは認識しない言説を述べます。なんででしょう?

ChatGPTの中身を見たわけではないので詳しくはわかりません。ただ、言語モデルは一般に以下の性質を持つと思いますので、ChatGPTの「案出」もそれが理由となる原理的な限界を持っているかもしれません。
(ChatGPTは中で因果モデル持ってるかもしれません・・・日経の最新号 も一回読んでおこうと思います。)

・言語モデルがモデル中に溜め込んでいるのは、言語を記号として捉えた場合の「記号と記号の相関関係」であり、因果関係を示しているとは限らない
・その相関関係自体も、機械学習の学習過程である「帰納推論による関係の抽出と蓄積」で作られたものであり、その尤もらしさには一定の限界がある


「案出」だけでは間違えるのであれば、ChatGPTにプロンプト入れて検証させればいいじゃん、と思うかもしれませんが、それは簡単ではないかもです。検証をAIで自動化できる条件を満たすのが簡単ではないからです。

■ 検証をAIで自動化できる条件
・AIが、法則を用いて原因から結果を予測できること
・AIが、法則に基づいて予測した結果が、意図する結果(の範囲内)であると判断できること

以前こちらの資料のスライド8 で「AIをAgentとして使うかCopilotとして使うかを判断できるスキルが必要」と述べさせて頂きましたが、今のところChatGPTの使い方として実用的なのは、「案出してくれるCopilot」として使うことじゃないかなぁという感じがしてます。

ただ、それはあくまで現時点での話。未来永劫無理だとは思いません。ポイントは、意図する結果をどう指定するか、および法則をどう理解させるか、という辺り。この辺りを強化するためのヒントも、冒頭で紹介したPrompt Engineering Guide の各種手法に既に含まれているかもしれません。この観点で分析できたらまた紹介したいと思います。

「解候補(原因候補)」を絞り込む指定で、実用的な案出を促す

ChatGPTに、効果的に「案出」させるための実用的な経験談を1つ。それはChatGPTにプログラムを作ってもらう場合の話です。

ChatGPTにプログラムを作ってもらった時に、それがそのままでは動かず、改造することで動くようになることは多々あります。言語モデルによる推論でプログラムを作っているだけですし、検証自動化条件を満たせるようなプロンプトを入れる手間も取れませんから、そりゃあそんなもんだと思います。

ただ、いろいろ使った限りでは、解候補が絞り込まれていると、そのままでいきなり動くプログラムを出してくれる場合が結構あります。そこで、人間側でプログラムを小さく分解しておいて、それを作ってもらうとうまくいく確率が高くなります。筆者の経験でも、機能分割をこちらでやっておき、分割した機能ごとにChatGPTに作ってもらい、それを繋げると結構簡単にそこそこの規模のプログラムを作れましたね。

機能分割やモジュール化については、こちらの書籍もぜひ参考にしてください(宣伝w)
組込みソフトウェア開発のための構造化モデリング
組込みソフトウェア開発のための構造化プログラミング

この記事が気に入ったらサポートをしてみませんか?