逆問題のことを知る - ChatGPTに「案出」をさせる技術の本質
はじめに
逆問題とは「結果から原因を推測する問題」のことです。この知識が、ChatGPTを使いこなすのに有用だと思うので、かいつまんで紹介します。
人間にとって「案出」はちょっと大変
お笑い番組におけるトークのルールとして「オチの3人目」というのがあるそうです。何か質問を受けた時に、1人目と2人目の方は普通に回答すればよいのですが、3人目の方はオチをつけなければならない、というめちゃくちゃ厳しいルール。
「風邪ひいた時に何食べる?」
「味噌汁ですかね~」
「豚汁ですかね~」
と来た時に
「あったかいスープですかね~」
では、3人目の人は「一緒や!」と突っ込まれて終わりかと。厳しい・・・
(私は数年前、このくだりで3人目が回ってきて、回答に窮するあるお笑い芸人の姿を見ました・・・ 結局回答できず、その姿が逆にウケてましたがw)
番組に出演するお笑い芸人さんたちにとってこれが厳しいのは、オチをつける、という結果を目指して、短い時間で「案を出す」必要があるからです。
案を出すのって、いろんな候補を考えてはボツ、いろんな候補を考えてはボツ・・・の繰り返しですよね。心理的負担は決して低くない作業になります。
生成AIは「案出」してくれる
しかし・・・先ほどの「風邪ひいた時に何食べる?」をChatGPTにやらせてみたら、結構いい線の回答がパパっと返ってきました。
「うまい棒」かぁ・・・なかなかやります。
今年どこかのお笑い番組で「お笑い第7世代 vs ChatGPS大喜利」が放送されそうな予感w
いずれにせよ、「案出」を依頼すると、そこそこいい「案」が返ってくるところは、生成AIサービスの大きな魅力のひとつです。ChatGPTに人生相談をしたり、プログラミングをお願いするのも「案出」の依頼ですし、Stable DiffusionやDALL·E 2、Midjourneyにテキストを入力して絵を描いてもらうのも「案出」の依頼。そういう依頼に対し、そこそこいい「案」を出してくれるので、大変重宝するわけです。
逆問題:「目的を満たす手段」と「結果をもたらす原因」
前述の大喜利もそうですし、人生相談やプログラミング、テキストに基づく描画はいずれも「目的を満たす手段」を考える問題です。
が、実はこれ、数理的には「結果をもたらす原因」を考えているのと同じなのです。これが本稿の本題。
え、何を言ってるの?という方もいらっしゃると思いますので、事例で説明します。
(Q1) 昨日の宴会、とても皆さんに楽しんでいただけたようです。なんでだと思いますか?
(Q2) 皆さんに楽しんで欲しいので、宴会の作戦を考えて下さい。
2つの問題の構造は以下の通り。どちらも全く同じ構造をしています。
2つの問題の解(候補)は非常に似通ったものになります。実際にChatGPTに(Q1)と(Q2)を聞いてみた例を見てみましょう。
笑うほど同じ答え、ではありませんでしたが、それでも「飲食」と「音楽や照明」の2つは完全に被りました。また、どの答えも、語尾を過去形にすれば(Q1)の回答になりますし、語尾を現在形にすれば(Q2)の回答になります。
これで、「目的を満たす手段」を考える問題と、「結果をもたらす原因」を考える問題は、数理的には同じであることが伝わりましたでしょうか?
このような、結果をもたらす原因を考える問題のことを「逆問題」と呼びます。最近のChatGPTの使われ方を見ると、人は生成AIに「逆問題」を解いてくれることを期待しているようです。
「案出」と「検証」
実は、結果をもたらす原因の案出には、一般に以下の限界が存在します。これはChatGPTに限らず人間のブレインストーミングによる案出も同じです。
これは設計学 の公理から導き出される重要な原則のひとつです。ChatGPTを使うときにも念頭に置いておくとよいと思います。
検証する際には、「法則」が必要です。「法則」とは、原因から結果を予測するための知識のことで、例えば以下のような「○○すると△△になる」という形式で示すことができます。
「法則」がわかっていると、出したアイデアを法則に当てはめてみることで、実際に目的を達成できるかどうかを検証できます。ただこの事例の場合、実際には法則に確信を持てるわけではなくて、いろんな知識から「多分、○○すると△△になるかなぁ?」と思い悩みながら考えていることでしょう。
ChatGPTに「案出」をサポートさせるのはよい使い方
さて、ChatGPTは、(1) アイデアを案出、(2) 法則を用いて検証、というサイクルを内部で行っているのでしょうか?それは中身が見えないのでさすがにわかりません。
ただ、言語モデルの特性からすると、恐らくChatGPTによる「案出」は、言語モデルで溜め込んでいる「記号と記号の相関関係」が使われているんだろう、と思います。
ただし、保持している相関関係の「量」は、例えば個人が人生を通じて得た知識の総量よりは圧倒的に大きいでしょう。ですので「案出」において人の知識を補完するにはもってこいのツール、だというわけです。
知識を補完する代表的な方法は、ググって調べてまとめ直す作業なのですが、それってそんなに知的な作業じゃないことも多いし・・・その自動化という感じですね
実際、いろんな方が「アイデア出し」に使うことを提案なさっています。
ChatGPTを3カ月使い倒してわかった! 仕事で活用する5つのコツと注意点 #TrendBuzz
ChatGPTに「検証」まで期待するのはまだ早い?
ご存じの通り、ChatGPTはときどき、世間が正しいとは認識しない言説を述べます。なんででしょう?
ChatGPTの中身を見たわけではないので詳しくはわかりません。ただ、言語モデルは一般に以下の性質を持つと思いますので、ChatGPTの「案出」もそれが理由となる原理的な限界を持っているでしょう。(日経のこの記事も一回読んでおくと参考になると思います。)
「案出」だけでは間違えるのであれば、ChatGPTにプロンプト入れて検証させればいいじゃん、と思うかもしれませんが、それは簡単ではないかもです。検証をAIで自動化できる条件を満たすのが簡単ではないからです。
筆者は「AIをAgentとして使うかCopilotとして使うかを判断することは重要」だと思っているのですが、ChatGPTに関してはどうかというと、今のところChatGPTの使い方として実用的なのは、「案出してくれるCopilot」として使うことじゃないかなぁという感じがしてます。
ただ、それはあくまで現時点での話。未来永劫無理だとは思いません。ポイントは、意図する結果をどう指定するか、および法則をどう理解させるか、という辺り。この辺りを強化するためのヒント、Prompt Engineering Guide の各種手法に既に含まれているかもしれません。この観点で分析できたらまた紹介したいと思います。
「解候補(原因候補)」を絞り込む指定で、実用的な案出を促す
ChatGPTに、効果的に「案出」させるための実用的な経験談を1つ。それはChatGPTにプログラムを作ってもらう場合の話です。
ChatGPTにプログラムを作ってもらった時に、それがそのままでは動かず、改造することで動くようになることは多々あります。言語モデルによる推論でプログラムを作っているだけですし、そもそも検証自動化条件を満たせるぐらい要求を厳密にプロンプトに書く手間もわざわざ取らないですから、そりゃあそんなもんだと思います。
ただ、いろいろ使った限りでは、解候補が絞り込まれる小さな問題に対しては、そのままでいきなり動くプログラムを出してくれる場合が結構あります。そこで、人間側でプログラムを小さく分解しておいて、それを作ってもらうとうまくいく確率が高くなります。筆者の経験でも、機能分割をこちらでやっておき、分割した機能ごとにChatGPTに作ってもらい、それを繋げると結構簡単にそこそこの規模のプログラムを作れます。
このやり方は、「目的は人が決め」「手段をAIに考えさせて」「埋まらないところを人が仕上げる」という、これからの仕事のやり方の一つの方向なのではないかなぁ、と思います。
この記事が気に入ったらサポートをしてみませんか?