AIとのお付き合い

テックポエム

こんにちは。株式会社ユニフィニティーの脇村です。
今回は、私の趣味から話題をピックアップしてみます。
最近はAIが流行で、何でもかんでもAIです。AIが本質的に向かないとされてきた分野(例えば人事)などにもAIは進出してきていて、まことしやかに「将来なくなる職業」などが語られています。
そういう意味で、私の趣味であるリバーシ(オセ□というと商標がかかりますので、以下リバーシ)は、かなり早くから計算機に人間が勝てないボードゲームでした。 少し前、11才の小学生が世界チャンピオンになってニュースになりましたが、そのチャンピオンでもその辺のパソコンで動く、強いリバーシのソフトには勝てません。
私が注目しているのは、最終的には計算機に勝てないにもかかわらず、リバーシのプレイ人口は増えていますし、人間の大会もきちんと存在する、というところです。
つまり、リバーシの世界では、計算機(AI)と人間の共存がかなり早くからなされてきました。これは、今から数年のAIと人間との共存に面白いヒントを与えてくれるのではないか、 というのが最近よく思うことです。

私個人の場合、この手のボードゲーム(囲碁将棋を含む)は、やり始めると、性格上、それこそ人生をかけて大真面目に研究するだろうと思ったので、本格的に手を出さずにいました。 そうなんですが「人間よりもその辺のPCで動くAIの方が強い」のはリバーシは独特の点で、おそらくそうでなければ私はリバーシはプレイしなかっただろうと思います。 頑張ってAI相手に勝てるようになっても、簡単に対人戦でひねられるのではつまんないですからね。
基本、この手の対人戦のゲームというのは、負けると悔しいものですが、逆にいうと、CPUは別に悔しいとは思わないと思われるので、いくらでも付き合ってくれます。 その当時はそういう理屈は実用に向けて研究途上だったのですが、私のリバーシの学習過程というのは今でいう強化学習モデル(教師あり)そのものでした。私の人間の友人には私よりもリバーシが強い人というのは、 聞いたことがないこともありますけれど、多分、いません(そんなことはない、しばきたおしてくれるわ、という方はお知らせください)。 ですけれど、今の私は間違いなく中級以上の強さがあります。数万ゲームやってると思いますから、これで強くならなきゃ困りますし、これがCPUの学習モデルならもっと強くなっていることでしょう。
結論からいうと、分野を注意深く選べば「AIは人間の先生になりうる」ということです。そのため(人間の連盟には気の毒ですが)しばしば高価な人間の指導者というのがいなくとも、 このゲームはそれ自体が持つ面白さというバリューがある限り、しばらくすたれることはないでしょう。AIはこのゲームにおいてはバリューを維持することにむしろ貢献しているというのが、 関係者の見方のようですし、私は別の立場からもその見方を肯定できます。

ところで、若干、専門的なお話になりますが、人間のような知性は「強いAI」と呼ばれます。自我や意思をもつようならそれは「強いAI」です。今のところ、人間以外のそれはファンタジーでしか存在していません。
そして画像認識など、特定の問題をうまく解くようなものは「弱いAI」といわれます。こちらは、ご承知の通り、計算機の計算能力の向上と、地道な研究の成果がうまく組み合わさって(組み合わせたのですが) まさに百花繚乱、私の知る限り2回目の黄金期を迎えようとしているように思えます(個人的には1回目の黄金期は、洗濯機にファジー理論を取り入れてそれをAIと言い張った時代)。
さらに、人間のような知性を再現しようという試みは「汎用人工知能」と呼ばれていて、特に区別されます。
この区分によると、リバーシの最善手を考えてくれるAIは「弱いAI」ですし、FXの相場予想をするのも「弱いAI」です。 まだまだ人間のような知性というのは再現できていません。 今のCPUはスマホに使われてるモノでも1秒に数十億回程度の計算ができます。部分的には人間の知性を十分、上回っています。 が、子供の九九のペーパーテストの採点はつらいですし、文字を入力したとしても国語でも英語でも記述問題の採点は今のところ、控えめに言っても難しいです。 個人的には、巷間どうも「汎用的な」「弱いAI」のアルゴリズムを「強いAI」にとり間違えたケースが多く感じます。 問題解決をAIに丸投げして、しかもその解決が人間の性能を上回るようなAIのシステムなど私の知る限りありません。 ほとんどすべて、比較的狭い範囲で、限られた形式でのみ人間の性能を超えることができるというのがAIの現状です。 私たちは、これからどうAIと共存していくべきでしょう?

少し前ですが、バーバードビジネスで有名な教授が引用したので有名になったと思われる言葉があります。
People don't want to buy a quarter-inch drill, they want a quarter-inch hole.
ドリルを買う人は、ドリルが欲しいわけじゃない。穴が欲しいのだ。
昨今にあてはめていうなら、車の自動運転をしてほしいわけじゃない。目的地に行きたいのだ。
とでもいいましょうか。AIというのは、分野が知的というだけのことで、このたとえにおいては依然としてAIはドリルなどと同じ、ツール側だと個人的には思います。 しかしながら、今のAIは計算機としての能力と、ある程度の柔軟な判断を組み合わせることができ、非常に高度なツールとなり得るところが一昔前とは決定的に違うのも事実です。
一昔前は、ある意味、AIというのは制御技術の側面がありました。洗濯機からスペースシャトルにまで組み込まれたファジー理論などは、難しいタイミング調整を可能にしましたし、 そのおかげでいろんな機械の性能があがりました。が、それは機械の部品としての働きで、人間の知性にとって助けになるようなものではありませんでした。 今現在のAIは人間の知性の助けを行うことができる水準に達しつつありますが、何を助けてもらうといいのでしょうか?

自然現象というのは、人間の直感を裏切ることが多くあります。その場合、計算機の特性を発揮してくれるのは、人間としてはとても助かります。 リバーシなんかでもそうですが、直感的に「ここ!」という手が実は間違い、ということはとても多く、私の憩いの時間というのは自分の負けた棋譜をAIを使って分析する時間でもあります。
ちょっと頭を使うと結果がずいぶん違うモノゴト、というのは、別にリバーシなどのボードゲームのようにタイトな計算や先読みを駆使するモノゴトだけでなく、結構な頻度で世の中にはたくさんあります。 ビジネスなんかはまさにそういうモノゴトの連続ではないでしょうか。一つの例としてモンティ・ホール問題をあげてみましょう。

A, B, Cの3つの箱のうち、1つがアタリが入っているとします。
img0.png

あなたは A を選んだとしましょう。
img1.png

そこで、私は、残るB, Cのうち、外れであるCをあけてみせます。
ここであなたは再び選択ができるとしましょう。
あなたの選択肢は2つです。
(1) 変更しない(Aのまま)
(2) 変更する(Bにする)
どうでしょう?直感的に、(1)と(2)は同じ確率だと思いませんか?
この文脈でしたらご推測可能でしょうが、(1)と(2)とでは当たる確率が違います。

あたる確率は、(1)だと1/3, (2)だと2/3です。意外な結果ではないでしょうか?人間の叡智というのは面白いもので、個人的にはこの現象をさして「残り物には福がある」と呼んでいるのだと思いますが、 しかしだからと言って「今がその時!」というのはなかなか人間の直感ではわからないものです。
そして、AIはやたらとこういうことに気づく存在でして、うまく使えばかなり色々なことを教えてくれます。 つまり、私にとってのツールとしてのAIとは、人間の直感に反すること、だけど、数字や理論として正しいこと、そういうことを指摘してくれるモノ、のように思っています。 この用途は、よりよい検索結果を提供したり、スパムメールを隔離したりといったサービスとは違う点があると個人的には思います。
今は意外なリバーシや囲碁将棋の最善手を教えてもらうことができるという範囲ですけれども、これから先、もっとAIはそういう範囲を増やしていくことだろうと思います。 まあ、世代がバレますけれども、私はカイルくんや冴子先生に聞いてもエクセルの使い方はサッパリわかりませんでしたが、案外、彼らは近い将来、復活するかもしれませんね。

今回はこの辺で。それではみなさま、ごきげんよう。

オマケ(納得がいかない人向けモンティ・ホール問題シミュレーション, C#)
static void Main(string[] args)
{
    //. Monti Hall problem simulation
    Random rand = new Random();
    int MAX_TRY = 100000;

    double winCountDontChange = 0.0;
    double winCountChanged = 0.0;

    for( int i=0; i < MAX_TRY; i++) {
        int[] boxes = new int[] { 0, 0, 0 };
        boxes[rand.Next() % 3] = 1;
        int guess = rand.Next() % 3;

        int opened = 0;
        for (int j = 0; j < boxes.Length; j++) {
            if (boxes[j] != 1 && j != guess) {
                opened = j;
                break;
            }
        }
        if (boxes[guess] == 1) {
            winCountDontChange += 1.0;
        }
        for (int j = 0; j < boxes.Length; j++) {
            if (j != guess && j != opened) {
                guess = j;
                break;
            }
        }
        if (boxes[guess] == 1) {
            winCountChanged += 1.0;
        }
    }
    Console.WriteLine($"Case if don't change the selection, win rate = {winCountDontChange / (double)MAX_TRY * 100.0:0.00}%");
    Console.WriteLine($"Case if changed the selection, win rate = {winCountChanged / (double)MAX_TRY * 100.0:0.00}%");
    var r = Console.ReadLine();
}
    
実行してみると…
Case if don't change the selection, win rate = 33.24%
Case if changed the selection, win rate = 66.76%
となって、まあ大体、理論値と同じということがわかると思います。