ガジェット通信

見たことのないものを見に行こう

コンピュータはコロンブスの卵を発見できるか

DATE: BY:
  • ガジェット通信を≫


今回はメカAGさんのブログからご寄稿いただきました。

コンピュータはコロンブスの卵を発見できるか

「サイレントマジョリティをコンピュータが浮かび上がらせる日」 2014年03月16日 『ガジェット通信』
http://getnews.jp/archives/530050

の続編。人間は案外当たり前のことを意識しないものだ。あまりにも身近なもの、たとえば空気を人間は普段意識しない。平和や安全、健康、親の保護…。

誰かが「こういうものがあるんだ」と言って初めて、その存在に気づく。たとえばデザインパターン。プログラムにはさまざまなコードに共通して出てくるパターンがある。将棋の定石のようなもの。細部は少しずつ違うのだけど、大雑把に見ると同じ形をしている。この辺フラクタル図形のようで面白い。厳密に比較するとどれも少しずつ違う。でもだいたい似たような形をしている。

コンピュータサイエンスでデザインパターンというものが提唱される前も、プログラマたちはなんとなくは知っていた。コーディングしていると、よく登場する形があるな、と。ただそこにあえて着目はしなかった。デザインパターンというものを最初に聞いたプログラマは、その経験が長いほど「それがどうしたの?」と思うことだろう。これもいわばコロンブスの卵かもしれない。見知ったものを新たな視点(概念)で捉え直す。

   *   *   *

プログラムに限らず世の中に普遍的に登場するパターンがある。たとえば「三すくみ」。じゃんけんのグー・チョキ・パーだったり、へび・かえる・なめくじだったり、魏呉蜀だったり、生態系の安定解だったり。3つのものがそれぞれ牽制し合い、結果的にどれが勝者になるでもなく安定した状態を維持している。

「急がばまわれ」とかも、問題解決のためのパターンだろう。ことわざは人間が長い歳月をかけて作り出したパターンが多い。いろいろな場面に共通して現れる。でも、それを見出すのは容易ではない。目の前にあるのに存在に気づかない。

   *   *   *

困難さの理由の一つは、個々の人間に頼っているので、観測範囲が非常に狭いこと。学問の領域を超えて普遍的なパターンがあると思うのだが、両方にまたがって活動している人間は少ないから、共通のパターンの存在を認識できない。

そもそもことわざや言い伝えとかも、人間が言葉によって世代を超えて知識や経験を伝えることができるようになって、初めて発見されたパターンだろう。言葉を持たない動物には無理。

さらに交通手段や通信手段によって知識や経験の共有は進んではいる。しかし結局のところパターンの発見は人間(の脳)に頼ってるので、処理できる情報に限界がある。

   *   *   *

大昔は個人の脳の情報処理能力と入手できる情報量を比較すると、脳の情報処理能力が優っていたのだろう。だから少ない情報を駆使して世の中の真理を発見できる人間「天才」が活躍した。

しかし通信手段の発達で、いつのころか外部から得られる情報量の方が勝ってしまった。もはや人間の脳では情報を処理しきれない。

一方、コンピュータによる情報処理は、能力的には人間にまだまだ追いつかないけれど、大量の情報を処理できる。量が質を凌駕しつつある。ある意味チェスのプログラムと同じ。力任せの計算量の方がものをいう。

   *   *   *

たとえばプログラムからそこに存在する共通のパターン(デザインパターン)をコンピュータが炙り出せるか?見るプログラムの数が人間とコンピュータで同じだと、コンピュータは全然人間に張り合えないと思う。人間はコードの表面的な構造ではなく、それが表しているモデルを読み取れる。モデルに共通性があるが、コード上の表現方法が違うものを、コンピュータは同じとは判別できない。

しかし一方でコンピュータは人間よりも桁違いに大量のデータを処理できる。その中にはモデルが同じのみならず表現方法も類似性があるものがそれなりの数含まれているだろう。それならコンピュータが優位に建てる可能性もある。

そしてひとたびパターンが認識できれば、パターンとパターンの類似性を考え、表現方法の違いを乗り越えられるかもしれない。モデルというのは結局は「つながり」なのであって、パターンAとパターンBの接続方法が同じなら、それは新たなパターンとして認識されるはず。

   *   *   *

コンパイラの最適化で、ソースコードの表面的な表現が全然違う部分を、オプティマイザが「同じ」と認識して共通化してしまったのに驚いたことがある。人間はなまじ変数名とかコードの目的を知っているから、同じものとは思わなかった。

たとえばポインタが示す構造体の最初のメンバ変数にゼロを代入するコード。ある箇所と別な箇所の構造体は全然違う構造体だ。たとえば人間から見れば年齢を表す変数をゼロにするのと、体重を表す変数をゼロにする処理が同じだとは考えないだろう。でも機械語に変換された結果がたまたま同じだったので、コンパイラは無駄だと考えて一つにまとめてしまった。人間とは違う視点をもっていたわけだ。

そのうちコンピュータがことわざや教訓話を人間に代わって考え始めるだろう。人間はそれを、祖先から伝えられた長い歴史をもつ風習と同じように、敬い従うようになるだろう。人間がこれまで「当たり前だ」と思い、たいして深く考えなかったパターンをコンピュータが人間に指摘するようになるだろう。

執筆: この記事はメカAGさんのブログからご寄稿いただきました。

寄稿いただいた記事は2014年03月12日時点のものです。

寄稿の記事一覧をみる ▶

記者:

ガジェット通信はデジタルガジェット情報・ライフスタイル提案等を提供するウェブ媒体です。シリアスさを排除し、ジョークを交えながら肩の力を抜いて楽しんでいただけるやわらかニュースサイトを目指しています。 こちらのアカウントから記事の寄稿依頼をさせていただいております。

TwitterID: getnews_kiko

  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

TOP