時流遡航

《時流遡航》哲学の脇道遊行紀――その実景探訪(12)(2019,03,15)

(アルゴリズムと再帰機能の問題を今一度考える)
 人工知能などの開発者がよく使う用語の一つに「アルゴリズム」という言葉がありますが、それは、特定の問題を解決する手順を各種の論理演算式や諸操作の組み合わせによって明確に定義したものを意味しています。ある業務をコンピュータに実践させるためのソフトウエア用プログラムを構築するに際しては、その作業に先立って、当該プログラム各部の作動手順の設定や、処理情報群の移行経路指定、同列構造間あるいは階層構造間の適切な関係づけなどのような、目的に応じた明確な処理手順の設定が必要になります。それら諸設定の集合体やそれを支える概念定義類のことを一般に「アルゴリズム」と呼んでいるわけで、内容によってはフローチャートによって提示されることもあるようです。
 ちなみに述べておきますと、もともと「アルゴリズム」とは数値計算の手順を意味し、今日でいうところの演算過程を指すものでした。インドで始まった数値計算(筆算)の手法はアラビア世界を経て12世紀頃ヨーロッパへと伝承されたと言われています。9世紀にバクダードに在住したアラビア人数学者アル・フワリズミーは、インド数学を紹介した「インドの数の計算法」という著作を執筆したのですが、12世紀になってその著作がヨーロッパにおいてラテン語に翻訳され、以後500年余にわたりヨーロッパ各国の大学において数学の主要教科書として用いられることになりました。そして、その書の冒頭部に筆者の名を用いた「algoritomi dicti(アル・フワリズミーに曰(いわ)く)」という記述があったために、その著述内容そのものが「algoritmi(アルゴリトミ)」と呼ばれるようになり、やがて「アルゴリズム」に転訛し今日に至ったようなのです。
 コンピュータに何らかの新たな処理機能、例えば大学入試問題を解くための機能を持たせようとする場合、まずはアルゴリズムを作成しなければなりません。その目的を達成するには、「試験問題の文章内容をどう解読把握し、さらにそれらを如何なる手段でどのように分析し、結果として得られた諸データをどんなふうに構成したうえで求められている解答として出力するべきか」という一連の手順、すなわち「アルゴリズム」を構築する必要があるというわけなのです。自らの意思や目的意識を持たないコンピュータは、残念ながら自力でそんなアルゴリズムを作成することはできないので、人間の力を借りるしかありません。さらにまた、そのアルゴリズムを専用の記号言語を用いてプログラム化するのも目下のところは我われ人間にほかなりません。
しかも、国語や英語などの問題における難度の高い長文の理解と解釈、さらにはそれらの内容に関する何百字もの記述問題、そしてまた文章題として出題される数学の証明問題や論理的記述問題に対応するとなると、現段階ではその的確なアルゴリズムを作成することさえ至難の業だと言ってよいでしょう。また、たとえ問題解決を目指すためごく初歩的な段階までのアルゴリズムを作るとしても、膨大な回数の試行錯誤が求められることになるはずです。一時期、情報科学の専門家らのチームによってコンピュータによる東大入試へのチャレンジ研究などが行われもしていたようですが、最終的にはその試行が中断されることになったのも、背景にそのような事情があったからにほかなりません。
センター試験レベルまでならコンピュータが得意な諸々のパターン認識技術を用いてある程度対応することもできたのでしょうが、複雑かつ高度な言語表現(数理科学分野に関するものをも含めて)の意味するところを理解したうえでなければ解答できない問題に対応することは、現段階では絶望的だったに違いありません。与えられたプログラムに従えば、人間には不可能な演算速度で高難度の微積分方程式を解くことができるコンピュータですが、自ら何かしらの科学的な研究目的を定め、そのために必要な手順を自発的に構築し、さらには問題解決のために不可欠な微積分方程式を自力で立てることはできないとこれまで何度も述べてはきました。その趣旨は、現在のコンピュータの能力では人間の力を借りることなく入試問題を作成することも不可能だという事実にも通じているのです。
(再帰機能の具えもつ構造とは)
 コンピュータ問題にあまり深入りしすぎるのもどうかと思うのですが、折角の話の流れということでもありますので、人工知能のディープラーニングシステムなどの中枢プログラムやそのアルゴリズム構築に不可欠な「再帰機能(リカージョン)」について少しばかり述べておきましょう。人工知能をはじめとする現在のITシステムのプログラムやアルゴリズム中には、極めて複雑な過程を辿り多重多層にわたって高速駆動する「再帰機能」が無数に組み込まれています。この「再帰機能」はまた、同機能自体をその中に多数含む独立したプログラム(モジュールと呼ばれる)群を複雑かつ相互に連結連動させるために欠かせない、より上位のプログラムのなかにも多用されています。
そのため、たとえその道の専門家にとってさえも、他者がコーディングしたその種のプログラムやアルゴリズムを解読することは至難の業だと言うしかありません。ましてや、多数かつ多様な条件文コードによる仕分けを繰り返しながら膨大なデータの超高速演算処理を実行するプロセスを逐一把握することなどは、プログラムの開発者自身にとっても不可能なことなのです。その道の専門家らが、「自分たちにも何が起こっているのか分からない」と述べたりするのはそんな事情があってのことなのです。それは、けっして「コンピュータが自立した知能を持ち、自由な意思で動いている」という意味ではありません。
「再帰機能」につきましては、そのごく初歩的な構造だけを紹介するに留めおきますが、それでも話はそれなりに厄介です。皆さんはある立体の中にそれを縮小した相似形の立体が何重にも入っている「入れ子構造」をご存知でしょう。再帰機能をもつプログラムの構造はそれに類似しており、変数値のみの変更によって自らを縮小あるは拡大したかたちのプログラムが元のプログラム自体の中に組みこまれているのです。ただ、それが普通の入れ子構造と異なるのは、「A」というプログラムのコード群の中にそれと全く同構造の「A」というプログラムが複数個含まれ、それらがまた個々に同じ構造を繰り返し具えもっているという点です。ある箱の中にそれと相似の箱が本来の詰め物(コード)と一緒に複数個入り、内含されるそれら個々の箱の中身がまた同じ構造をとりながら、多層にわたって延々と同じ過程を繰り返していく状況を想像してもらえばよいでしょう。40年ほども前、初めてその種のプログラム構造に接したとき、私は受容し難い論理学的矛盾を覚えたりもしたものでした。自らが複数の自らの分身を何階層にもわたって内包するというなんとも奇妙な構造だったわけですから……。ただその構造が実践面で極めて重要であるのもまた事実なのです。

カテゴリー 時流遡航. Bookmark the permalink.