人工知能(Artificial Intelligence:AI)が今、第3次ブームを迎えています。この連載では、まず人工知能の定義、分類、歴史を学び、続いて人工知能プログラミングの実践方法について紹介します。人工知能とは何か、どう付き合い、活用すべきかが見えてくるはずです。

 人工知能(Artificial Intelligence:AI)が今、第3次ブームを迎えています。コンピュータのマシンパワーが充実してきたおかげで、またブームがやってきたようです。

 筆者は第2次人工知能ブームのときに、人工知能マシンとして、LISPマシンの開発に従事していました。この時代は、ナレッジエンジニアが雨後のたけのこのように出てきた時代です。この第2次ブームの発展と衰退を経験し、今回の第3次人工知能ブームを感慨深く迎えています(図1)。

図1 人工知能ブームの歴史
第3次AIブーム、到来
[画像のクリックで拡大表示]

 ところで「人工知能」の定義とは、何でしょうか。哲学的な問題としては「そもそも知能って何?」から始まる難解な問題ですが、ここではもっとエンジニアらしい質問、つまり「人工知能プログラムと普通のプログラムはどこが違うの?」を考えてみます。

一見何をしているのか分からない

 まず人工知能プログラムというなら、簡単なプログラムや馬鹿なプログラムでは駄目ですね。またアルゴリズムが簡単に判別できてしまうプログラムは、人工知能プログラムとは呼ばないでしょう。

 逆に、複雑なアルゴリズムか、動的に変更されるアルゴリズム、単純でも制御用データを多く使うアルゴリズムなら、人間にはそのプログラムの動作が理解できません。一見して、知能のように見えます。

 またビッグデータといわれるような大量のデータを処理するケースでも、非定型な処理だとどのようにプログラムが動作しているかが分かりにくく、これも知能のように見えます。

 つまり人工知能プログラムとは、一見して何をしているか不明であることが最低限の要件です。別の言い方をすれば、動作を予測できる決定的アルゴリズムに基づくプログラムは、人工知能プログラムではありません(図2)。

図2 人工知能プログラムの必要条件
人工知能は「非決定的」
[画像のクリックで拡大表示]

 人工知能プログラムは動的になりがちで、制御変数も多くなり、ますます動きが読めなくなります。これが人工知能プログラムの必要条件です。

 例えば、将棋ソフトとして5手先を読む思考プログラムを組み込むと、3手先読みしかしない人間にとっては、自分より優れた知能を持つ人工知能プログラムに見えることでしょう。

 ところで、乱数を使っているプログラムは非決定的に動作していますが、人工知能プログラムではありません。乱数による動きは単純なので、すぐに乱数プログラムだと見破られます。

まじめに十分条件を定義する

 ここまで述べた人工知能プログラムの定義は、人工知能プログラムと呼ぶのに最低限求められる必要条件を述べているだけで、十分条件を示していません。

 実は、人工知能の十分条件として一般的に認められているものはありません。定義したとしても、全ての人の同意を得られるとは限りません。しかし、これがないと話が進みませんので、ここで実用的な人工知能プログラムに絞り、十分条件を定義してみます。

 その定義とは、「専門的知識を持った人間が操作することをまねることができるプログラム」というものです。つまり人工知能プログラムは、特定分野の専門的知識をデータとして扱い、それを用いて人間の専門家の行動をまねるプログラムです(図3)。

図3 人工知能プログラムの十分条件(やや大胆な定義)
人工知能は「専門家をまねる」
[画像のクリックで拡大表示]

 これは少々大胆な定義ですが、実用的です。そのコストと効果を計測しやすい定義だと思います。「専門家」として定義したのは、人工知能が扱う問題の範囲を絞り込むときに起こる、後述のフレーム問題などの問題を気にしなくていいようにするためです。

機械学習ばかりが人工知能じゃない

 では次に、研究開発の分野から見た人工知能の分類をみていきましょう。

 今は、「機械学習」やその一部である「深層学習」が流行していますが、もちろん、それだけが人工知能ではありません。他にも多くの人工知能の分野があり、それぞれで多くの研究や開発が進んでいます。

 昔、「人工知能」という言葉が初めて世に知られるようになったときは、「人工知能=記号処理」でした。人工知能は、記号処理そのものだったのです。その後、記号処理でない分野にも拡大し、記号処理での人工知能を圧倒していきました。

 そこで人工知能の最初の分類として、「記号処理的人工知能」とそれ以外の人工知能「非記号処理的人工知能」に分けてみます。

 ここではまず、「記号処理」の定義を考えましょう。そのうえで、記号処理をベースとする人工知能と、そうでない人工知能に分類します。

 記号処理(Symbolic Processing)において扱われる「記号」とは、数式やプログラミング言語、また自然言語などで出てくる言葉を厳密に定義したものです。

 一般に「記号」というと、その意味は明確で、曖昧な文脈に依存することはありません。厳密に定式化できるものが記号です。

 例えば「NAME」という名前を表す記号があるとします。その具体的な値として、「GOMI」という個人名を表す記号があります。「NAME」には個人名を値に持つ、というような定義を与えることになります。

 この記号を色々な観点で処理するのが記号処理です。「x+y=2」といった方程式を解く「数式処理システム(Computer Algebra System)」は、その応用分野の一つです。多次元方程式や微分方程式を、数式というフォーマットのまま置換や因数分解、微分などをして変形することで解いていくシステムです。

 その他に、定理を自動的に証明する「自動推論」、コンピュータプログラムを実行可能な機械語に変換するコンパイラ、自然言語で書かれた「I love you.」を別の言語に翻訳する「機械翻訳」などが、記号処理の応用分野です。

 プログラミング言語の世界でも、数値ではなく記号処理を扱うために設計された、記号処理用プログラミング言語が登場しています。例えばプログラミング言語「LISP」は、記号処理用として1960年代に使われるようになりました。

 この記号処理をベースにした人工知能が、現在の人工知能のベースになっていることに、間違いありません。まさに昔は「記号処理=人工知能」だったわけですが、現在は記号処理の分野であるコンパイラなどは手法が確立されたために、人工知能とは呼びません。しかし自然言語処理やその中の機械翻訳、かな漢字変換などは、今でも人工知能が対象とする分野の一つになっています。

 記号処理をするためのプログラミング言語には、記号を直接扱う仕掛けが必要になります。例えば、前述したプログラミング言語のLISPや「PROLOG」では記号(シンボル)が基本的なデータ型になっていて、直接操作できるようになっています(図4)。

図4 人工知能の分類
人工知能は「記号処理」「非記号処理」に大別される
[画像のクリックで拡大表示]

 一般のプログラミング言語では記号を直接扱えず、文字列のデータ型を使って記号処理をすることになります。最近ではこれらの言語でも、トークンのようなシンボル的なものを扱えるようにもなってきています。

 これらのプログラミング言語を使って、記号処理的人工知能のプログラムを作ることになります。

 前述したようにコンパイラは再帰降下法などのアルゴリズムが確立され、「lex」や「yacc」などのコンパイラを生成するコンパイラコンパイラ(コンパイラジェネレータ)も作られています。同様に、単純な数式処理や定理自動証明などの手法が確立されている分野も、人工知能とは呼ばれなくなりつつあります。

 現在こうした記号処理的人工知能は、自然言語処理などの分野を中心に、研究・開発が進んでいます。こうした記号処理的人工知能を、「古き良き人工知能」とか「正統派人工知能」と呼んで、昔の人工知能を懐古することもあるようです。

記号処理を脅かす「フレーム問題」

 この記号処理的人工知能には、「常識による推論ができない」という欠点があります。記号は厳密に定義して処理をしますので、事細かに、子細漏らさず、全てを記号として厳密に定義する必要があるのです。

 例えば、子供におつかいを頼むケースを考えてみましょう。「100円を持って、文房具屋で、消しゴム1個を買ってきて」という簡単な命令(記号列)でさえも、他の多くの文脈情報を厳密に与える必要があります。

 この問題を「フレーム問題(Frame Problem)」と呼びます。人工知能が対象とするフレーム(枠組み)をどのように設定するかという問題です。

 「100円を持って、文房具屋で、消しゴム1個を買ってきて」のような命令を処理するためには、どこまでをフレームとするかを決めるのが非常に困難になります。

 例えば、「文房具屋さん」や「消しゴム」の定義、文房具屋の開店・閉店時間、文房具屋までの道順や天候、交通状態などもフレームに入れるのか、などと考えなければなりません。

 記号処理では記号を厳密に定義し、設計したアルゴリズムに従ってトップダウンで処理するために、このフレーム問題が発生します。模倣や学習という概念がない記号処理的人工知能では必然的に起こる問題で、その解決は困難です。

非記号処理的人工知能とは何か

 次に、もう一つの人工知能「非記号処理的人工知能」を見ていきましょう。

 非記号処理的人工知能の分野の一つに、パターン認識があります。パターン認識とは、数多くのパターンを分析し、ときには学習し、その情報を基にパターンマッチして、対象を認識する技術です。

 記号処理がトップダウン処理であったのに対し、パターン認識はボトムアップ的な処理といえます。

 パターン認識には、文字認識や画像認識の技術が使われます。顔認識や虹彩認証、指紋認証、手話、身振り認識や音声認識などが具体例です。

 例えば、機械翻訳でもトップダウン的に処理をする記号処理的人工知能に対し、非記号処理的人工知能では多くの翻訳事例を分析し、パターンマッチして翻訳する方法があります。

 パターン認識やそれを機械学習するときに使う技術として、「ニューラルネットワーク」や「ファジィ制御」「遺伝的アルゴリズム」などがあり、これらの技術が今の人工知能を支える主流の技術となっています。

 ここでいう「機械学習」とは、人間が行っている学習をコンピュータ上で行うことです。つまり、コンピュータ上でプログラムを実行した結果(経験)を元に、より良い結果を出すことです。「ニューラルネットワーク」とは機械学習の一種で、人間の神経回路網をコンピュータ上にシミュレートするものです。

 記号処理で問題になったフレーム問題を、ニューラルネットワークの技術を使えば解決できる、と考える人もいます。人間がフレーム問題を解決しているのと同じように、ニューラルネットワークで多くのパターンを収集し分析することで、どこまでがフレーム内で、どこからがフレーム外であるかを学習できるという考えです。

 現在は非記号処理的人工知能が主流になってきていますが、皆さんには、両者を比較して、臨機応変に最適な人工知能を活用することをお勧めします。次回は人工知能の最適な選択について見ていきます。

五味 弘(ごみ・ひろし)氏
沖電気工業 シニアスペシャリスト/エバンジェリスト
三重大学大学院博士課程修了、博士(工学)。情報処理学会シニア会員。三重大学、群馬工業高等専門学校、名古屋商科大学大学院などで非常勤講師。人工知能マシン「ELIS」の開発に従事。「OKI Common Lisp」の開発やマルチメディアシステム、金融システム、機械翻訳、エキスパートシステムなどの開発や技術支援に従事する。著書に「はじめてのLisp関数型プログラミング」(技術評論社)、共著に「IoTセキュリティ」(日経BP社)、「プログラミング言語論」(コロナ社)など。
出典:日経コンピュータ 2016年11月24日号 pp.98-101
記事は執筆時の情報に基づいており、現在では異なる場合があります。