GPUには処理を行う小さなプロセッサが多数搭載されている。
これをニューロ・チップに見立てれば、リアルタイムなCGを使ったゲームに特化したGPUがAIチップに変貌するらしい。
ボクはLISPをやっていたせいもあってAIとは、
- データを読む:Input
- データを評価する:Process
- 評価結果を出力する:Output
の3ステップ(IPO)でありながらProcessを変化させることもできるプログラミング手法だと思ってる。
実際、大方のプログラミング手法ではProcess(≒プログラム≒実行ファイル)の部分は、プログラムの実行時は固定されている。その方が実行ファイルを情報の変更が面倒なROMに格納するのに都合が良かったせいでもある。
しかし、ブラウザのJavaScriptは、自分自身を書き換える(あるいは使っているライブラリィ群を切り替える)ことができた方が表現や目的に応じた処理を変幻自裁に変貌できるので都合が良い(画面のスタイルを変更する場合にプログラムの設定ファイルを書き換えて画面処理を再実行するより、CSSの参照先を書き換えて(あるいはCSSそのものを書き換えると画面が再描画してくれた方が便利な)ので先に述べたAI的な性質が大変強く、今ではAI的なプログラミング手法の方が目につくと云っていいだろう。
WindowsのOLEやJava言語はこの中間に位置し、プログラム・ソースを実行用にファイルに書き換えて(コンパイル)実行するので、「自分自身は書き換えできない」けど、「使っているライブラリィ群は切り替える」ことができる。
どれが優れているのかは用途に応じて変わってくる。Processを変化させることができることは便利であるが、外部からクラッキングされて書き換えられる恐れがあるので、所定の手続きを踏まないと書き換えられないことが望ましい用途で使うのは非常にリスクが高い。そんなことは一般のユーザには無縁の様な気がしそうだけど、オンライン・アップデートが一般化してくると、自分が使っている機器が勝手に書き換えられたり(いつのまにか自動のアップデートが処理され、旧データのファイルが読めなくなる)、勝手に画面が切り替わって(何かのアップデートが終わると勝手に再起動してしまう様なアップデート機能)しまうと困ることは多い。延々と文書を作成していたら画面が急に消えPCが再起動したのでPCが不調なのか?と思ったらWindowsのアップデートが始まったということがあった様な気がする。※ワイド画面の隅の後**分後に再起動しますというメッセージを見過ごしていただけなのかもしれないが、さすがに最近はそう云う事態にはあっていない。
だからユーザが安心して使える方式がベストチョイスになる訳で、これは時期や風潮でどんどん変化してしまうものなので、どれが絶対良いということは無い。
先に述べたAIであっても、どの程度のProcessを書きられられるかを制御することは可能だが、LISPであればLISPのソースコードをデータとして読ませ評価すると、予想していなかった事態(Processの特定の部分は書き換えないように仕組みを作っていたにも関わらず、抜け道ができていた等)が起こり得る。LISPの評価処理はeval関数なのだが、JavaScriptの同名のeval関数がこれに該当する。
なので、AIにどんどんデータを読ませていくと、変な(想定していない書式の)データをうっかり読ませてしまうと、折角の学習時間が台無しになってしまうどころかProcessもおかしくなってしまってい復旧(元に戻す)ことさえ大変になることもある。有体に云えばバグとか不具合の類なのだけれど、LISPにとってeval関数はProcessの最上位の関数なので、使わない訳にはいかないし、Escape処理をしてデータがプログラム・コード化(Processの一部になったり書き換える)しないようにすると、評価できる範囲を狭めることになるので、用途に適さない場合もある。
ところが、GPUでは大方のプログラミング手法を利用しているようなので、GPUに組み込まれたProcessは書き換わらない様に思える。あくまでデータ処理を沢山のプロセッサで並行処理させるニューロ・チップとし処理させるらしく、変な(想定していない書式の)データをうっかり読ませてしまい折角の学習時間が台無しになることはあっても、Processまでもがおかしくなってしまうことはなさそうで、不具合の原因を調べて、Processを訂正し、「もう一度やり直せばいいや」という安心感はありそうだ。 ※でも、全くの勘違いかもしれない。
AIの最大の難点は、デバッグが可能かどうかである。Processを変幻自在に書き換えられては、どうデバッグするのか「適切に検討する」のは困難だ。ニューロ・チップについては脳細胞みたいなものという認識しかもっていないので、入力されたデータを沢山のプロセッサで色々な評価を同時並行で処理し、期待される処理時間内で、それなりの結果を返す回路だと思っている。その学習能力とはどんなものなのかも妄想するしかないのでかなり見当はずれだろうけど、「学習能力=プロセス間の通信状態を良好に保つように各プロセッサの処理の分担を調整する」だと思う。例えば、ある作家の絵画の画像データから色の使用頻度、描かれている物体の形状の種類、その分散度、分散の偏りという評価結果を得る。それと画像データを調整(あるいは編集)するツールを組み合わせ、何かの写真を調整し、同様な評価結果がでるまで、しらみつぶしに調整する。その処理時間を集計し目立ったオーバーヘッドが見つかったら、そのオーバーヘッドの原因になった処理に対するプロセッサの数を増やしてみる、増やし過ぎたら逆方向に調整。暫く調整具合をみて、ほどほどのあたりで良しとする。なかんじだろうか?
しかし、これは手作業で行うのは非常に大変だ。似たようなものに「プログラムの高速化」があるけどこれはコードを見直すので「どうしても人手がかかる」し「専門的な知識や経験」がないと「時間を食う」だけで「良い結果が出ない」こともあるのだ。それが、目的に特化した最適なProcessが組み込まれたAIがあれば、たくさんのデータを読むことで、所定の処理時間内に、「それなりの結果」をだせるようになることは大きな意味があると思うし、自動運転の制御やビデオ映像をリアルタイムに誰かの作風の絵画の様にレンダリングしてみせることができるのだと思える。
そして、ゲームに特化したGPUにとっては、色々なゲームの様々な要求に、リアルタイムで処理できるようにしていることや、その調整のためにデータセンターのような巨大なテスト環境を持っているらしいので、すでにAI的というかニューロチップ的な手法を実践しているんだろうね。
でも一方では、目的に特化したProcessが組み込まれていないAIに、ただ絵画を入力しても、いつまでも「読みました=True=正常終了」と答えが出るだけだと思える。※この辺ですでに勘違いなのかも。
なので、AIとかニューロチップ(あるいはニューロネットワーク)に事前に何をどのように組み込むのかは「量子コンピュータ」と同じで、さっぱり解らない。
でも、それはその分野の専門家の領分なので、知らなくてもいいんだろう。
で、タイトルの「GPUはSFを越えられるのか」にやっと入る訳で、これは「単純には越えられない」と思う。
「GPUをSF映画にでてきそうな使い方をする」ことは「GPUにSF映画を模倣させた」と云うことだけど、それだけでも「GPUでSF映画が作れちゃう」様な感じなので結構凄い。しかし、「SFを越える」にはSF作家が考え付かなかったことをやればいいので「専門家にとっては案外身近な事象」を取り入れることで可能だろう。そうGPUのAIにSFをいっぱい読ませて、ガンガンSF小説を書かせたら物量的にSF作家を越えることができるだろうし、その中で傑作がでれば「実質的に越えた」ことになる。だが、それが良いことなのかを誰(あるいは何)が判断するのだろう?AIたるGPU?それとも人?なのか?
いづれにしても、GPUで処理するProcess自体は、組織情報やネット情報の集合知の結晶であり、結局は人手がかかる。ただ、人手を離れ(Process自体の開発が終了)しても、GPUが延々と処理しつつけることができるのが利点だが、その点が現状のネットと大きく異なっている。ネットが全自動で動作している様に思えるけど、それはネットワークを形成する沢山の通信装置や通信線そして沢山のデータセンターの設備であって、その設計や設置や運営はやはり人手がかかっている。つまりネットワークの維持やメンテナンス=人力なので、永久に人手がかかる訳だ。これを省力化しようというのがIoTの一つの側面ではあるけれど、それでもやはり人力で維持されつづけることに変わりはない。