計算の未来と社会
(2019年8月に、CNETに投稿した記事を加筆修正の上再掲するものです)
私たちが「計算」を考えるとき、現代のデジタル計算機の上でプログラムを実行することで行う計算を無意識に想像します。一方、深層学習やブラックボックス最適化の技術が進歩してきたことによって、明示的にアルゴリズムを記述しなくてもよい「計算」が実用的になってきました。「計算」とは何でしょうか。「計算」とは何かを広く捉えるとき、私達の社会が何にどのようなインパクトがあるでしょうか。私たちは何に備えていけばよいでしょうか。
そのようなことを議論したくて、様々なバックグラウンドの方々にお声がけして、2019年の8月に、1泊2日のワークショップを行いました。今回は特別に、IBM社の協力を得て、エグゼクティブ向け研修施設「天城ホームステッド」での開催が実現しました。素晴らしい人々と、素晴らしい食事、素晴らしい環境に育まれて、自由に思索を巡らすことができた、至福の2日間でした。
まず、自然計算、量子計算、波動計算など物理現象を使ったエグゾチックな計算の仕組みをそれぞれ当代一流の研究者の方々にご紹介いただきました。そのうえで、今後どのような「計算」が現れるか、自由に議論しました。自然計算[1]とは、自然界で起きる物理現象を計算と捉え、それを使って計算を行う、という考え方です。例えば生物の進化は、環境に対して最適化する、という計算を行っていると考えられます。量子計算や、波動計算[2]も自然計算の一部です。
これらの議論の中から、今まで「計算」と思っていなかったものも、もしかしたら「計算」と捉えることができるかもしれない、とか、「計算」には、それにかかる処理時間やエネルギー消費による限界があったり、あるいは説明性・再現性・信頼性が求められたり、など様々な要件があり、それらの要件によって異なる計算の仕組みが用いられるだろう、などというアイディアが出てきました。「計算」を広く捉えると、様々なタイプの計算がありそうです。
「計算」の階層
伝統的なコンピュータサイエンスでは、入力の長さ n に対してどのくらいの計算時間がかかるか、という「計算の複雑さ」で計算を分類してきました。しかし、様々な形態の「計算」の議論を通して、むしろ「計算の仕様をどのように与えるか」によって分類することが合理的なのでは、と思うようになりました。少なくとも、以下のタイプの計算があると思います。
古典計算:仕様を、計算手順を指定することで与える計算
プログラムを書いて実行する計算、つまり私たちが普段接しているコンピュータによる計算です。チューリング機械による抽象化で特徴づけられます。入出力は0,1のような離散値をとり、時間軸上で離散的なステップを実行することによって計算を行います。現代の計算機は、機械語レベルでは(おそらく)すべてこのタイプの計算を行います。モデル化可能計算:入出力の関係を厳密な数式で与える計算
入出力の値は離散値に限りません。例えば、実数値の線形変換を行う y=a*x + b という計算は x, y という実数値の間の関係を指定する計算です。古典計算でアルゴリズムが書ければ、近似できるかもしれませんが、あくまでも近似に過ぎません。効率的なアルゴリズムが知られていない計算も、入出力の関係を厳密に数学的に書き下せればモデル化可能計算です。例えば、目的関数f(x)を最大化する x∈X を求める最適化問題は、f や X の形によっては効率よく解けませんが、モデル化可能です。部分再現可能計算:特定の入出力事例で指定する計算
入出力の関係は数式では書き下せないかもしれませんが、特定の入出力事例を指定して、それをできるだけ再現するような計算です。深層学習によってネコとイヌの画像を見分ける判別器は、特定の入出力事例(=訓練データ)を与えてそれを模倣するように、という仕様の与え方ですから、これに当たります。訓練データに現れなかったような入力が来た場合にも、近傍の事例があればそれらからなんとなく良い値を出してきます(機械学習の言葉で言えば汎化です)。事後評価可能計算:事前に仕様は定められないが、事後に結果の「良さ」を評価できる計算
入出力の関係になにがしかの期待感があるが、それを明示的に仕様として書き下せないことはよくあります。以前のブログ見たくないものを、見るで、「コーヒーを持ってきて」と言われたロボットがコーヒーショップで列に並んでいる客を撃ち殺してコーヒーを持ってくる、という例を紹介しました。実際の行動を見てから「それはダメ」と言うのは簡単ですが、私達はロボットにやってほしくないことを事前にすべて数え上げることができません(人工知能の未解決問題である、フレーム問題に帰着される問題です)。一方人間は、ときどき間違えますがたいていの場合は期待通りの行動をしてくれます。
これらの定義には、古典計算 ⊂ モデル化可能計算 ⊂ 部分再現可能計算 ⊂ 事後評価可能計算 という関係があることに注意してください。すべての古典計算はモデル化可能ですし、すべてのモデル化可能な計算は、部分再現可能です。仕様を事前に与えられる計算は、事後に与えても構いませんからこれらは常に事後評価可能計算です。これを計算の階層と呼ぶことにします。
上位の階層は下位の階層では表現できない、より強力な計算モデルを示していますが、一方で、十分な計算資源(計算時間、メモリ、など)があれば、下位の計算モデルは上位の計算モデルをある誤差範囲でエミュレートすることもできそうです。
***
このように考えると、「計算」とは思ったより広い概念だということに気が付きます。
昨今教育の世界で議論されているJanet Wing流の"Computational Thinking"[3]あるいは文部科学省が推進する「プログラミング的思考」の教育というのは、残念ながら「計算とは古典計算である」という前提に縛られているようです。今の子供達が社会に出るころには、様々な計算モデルが現れていることでしょう。「計算」の概念がこれほど広くなるのであれば、教育を根本から見直す必要もあるのではないでしょうか。
参考文献
萩谷他、自然計算へのいざない、ISBN-13: 978-4764904880, 2015.
Katayama, Yasunao, et al. "Wave-based neuromorphic computing framework for brain-like energy efficiency and integration." IEEE Transactions on Nanotechnology 15.5 (2016): 762-769.
Janet Wing, "Computational thinking." Communications of the ACM 49.3 (2006): 33-35.