web-dev-qa-db-ja.com

人工知能のためのLispとProlog?

今、私は3年前にA.I.でクラスを受講して以来、この質問をするのに十分なほど明確に堪能なIM ......冗談だけ冗談;)

しかし、真剣に、これらの言語がA.I.で人気を博している理由は何ですか?研究。 A.I.研究は「古い」...おそらく過去5-10年で最も長い道のりのように思われる....それは言語がA.I. 、またはちょうど今使用するのに本当に良いものは何もないというだけですか?

私はいつもそれを非常に興味深いと思ったのでこれを尋ねます、そして、私はちょっとちょっと好奇心が強いです。私がまったく間違っていて、彼らが異なる言語を使用している場合、私は彼らがすべて使用しているものを知りたいです。私はプロローグを理解できることを意味します。特に、Sentient/Propositional LogicとFuzzy logicで理解できます。しかし、私は「なぜ」LISPを使用するのか理解できません...研究者は機械学習などを行うために使用します.

主題に関するすべての記事/本も役立ちます:)

34
user475353

本当にPrologに話すことはできませんが、ここにLISPの理由があります:

  • LISPは homoiconic 言語です。つまり、コードは言語のデータ構造と同じ形式( s-expressions )で表現されます。つまり、「コードはデータ」です。他のコードを変更/操作するコードを書いている場合、これには大きな利点があります。遺伝的アルゴリズムまたはシンボリック操作。

  • LISPのマクロシステムは、問題固有のDSLの定義に適しています。ほとんどのLISP開発者は、必要なことを行うために効果的に「言語を拡張」します。ここでも、LISPがホモイコニックであるという事実は、ここで非常に役立ちます。

  • 初期のAIの多くの研究とほぼ同時にLISPが普及したという点で、いくつかの歴史的なつながりがあります。いくつかの このスレッドの興味深い事実

  • LISPは関数型プログラミング言語として非常にうまく機能します。これはAIに非常に適したドメインです(特定の入力に対して正しい出力を生成する方法をマシンに学習させようとする場合がよくあります)。

  • 主観的見解:LISPは数学的な考え方を持つ人々にアピールするようです。これは、現代のAIの多くに必要なものです。微積分

私は現時点でいくつかのAI /機械学習の仕事をしていて、ほとんどの理由で Clojure (JVM上の最新のLISP)を選択しました。

30
mikera

この質問はすでにLISPについて回答済みなので、Prologについてコメントします。

Prologは、自然言語処理と論理的推論という2つの目的で設計されました。プロローグが発明された1970年代初期の [〜#〜] gofai [〜#〜] パラダイムでは、これは次のことを意味していました。

  1. 文/発話の論理表現を構築するために使用される自然言語の記号文法を構築します。
  2. これらの表現と論理公理(必ずしも古典的な論理のものではない)を使用して、新しい事実を推測します。
  3. 同様の文法を使用して、論理表現を翻訳して言語に戻します。

プロローグはこれに非常に優れており、まさにそのようなタスクのために [〜#〜] iss [〜#〜] で使用されます。しかし、アプローチは信用を失った。なぜなら、

  1. "all grammars leak" :文法は言語のすべてのルールと例外をキャッチできません。
  2. 文法が詳細であるほど、構文解析の複雑さ(大きなOと実用的の両方)が高くなります。
  3. 論理的な推論は、多くの実際的なタスクにとって不十分であり、不必要です。
  4. nLPへの統計的アプローチ、つまり「単語カウント」は、はるかに堅牢であることが証明されています。インターネットの台頭により、NLP開発者が必要とする統計を取得するための適切なデータセットが利用可能になりました。同時に、メモリとディスクのコストは下がりましたが、処理能力はまだ比較的高価です。

最近になってようやく、NLPの研究者は、やや実用的な記号統計的アプローチを組み合わせて開発しました 時々Prologを使用 。その他の地域では、Java、C++、またはPythonを使用しており、ライブラリ、ツール、および非PhDプログラマをより簡単に見つけることができます。 I/Oと算術がPrologで扱いにくいという事実は、その受け入れに役立ちません。

Prologは現在、NLPと制約推論を含むドメイン固有のアプリケーションにほぼ限定されており、かなりうまくいくようです。それでも、言語が「AIを簡単にする」という約束を守っていないことで悪名がついたため、「Prologテクノロジーに基づいて」宣伝するソフトウェア会社はほとんどありません。

(私はPrologの大ファンであることを付け加えたいと思いますが、私はそれをプロトタイピングにのみ使用しています。)

31
Fred Foo

AIがシンボル操作でありオントロジーのようなものであると信じたとき、LISPには利点がありました。 Prologは、AIを論理として信じるときに利点があり、統合はトリッキーな操作でした。しかし、これらのどちらも、「AI」の現在の競争相手のいずれにも利点を提供しません。統計AIはスパース配列に関するものです。ディープラーニングを含むあらゆる種類のニューラルネットワークは、リンクで接続されたノードの海に関するものです。モデルフリーメソッド(多くの種類の機械学習、進化的メソッドなど)も非常に簡単です。複雑さは緊急であるため、心配する必要はありません。学習する必要があるものを学習できるシンプルなベースを作成します。これらのいずれの場合でも、あらゆる汎用言語が対応します。ほとんどのニューラルネットワークのアプローチは非常に単純であるため、C++が過剰であるとの議論さえ行われます。

タスクに最適なプログラマを最も簡単に雇用できる言語を使用してください。

15
Monica Anderson

ここにはいくつかの有益で有益な応答がありましたが、LISPとPrologの要点は見落とされているか、取り残されているか、十分に強調されていません。

主なAIの研究が記号処理を中心とした時代に、LISPとその後のPrologが登場しました。シンボリック処理の簡単な例は、人間が代数、計算、積分を手作業で行う方法です。変数と定数を象徴的に操作して、同等の関係を導き出します。 LISPとPrologは、この目的のために設計されました。

シンボリック操作は、この目的を念頭に置いて設計されていないため、C++またはJavaで簡単に実装されていません。ただし、C++、Java、または類似の言語は、AIの流行語である可能性があります。これは、記号処理を処理しないAI研究のバリエーションがいくつか存在するためです。

AIの1つの形式は、統計的手法を知識の基礎として使用することを扱っており、これには計算時間を短縮するためにはるかに効率的な言語を使用する必要があります。また、いわゆるAIシステムの多くは、特定のニッチな目的に役立つ専用システムにすぎません。もちろん、これらのシステムは、非LISP/Prolog言語で最適にプログラムでき、「推論」や常識的な知識獲得に頼るのではなく、入力からのデータ処理にもっと頼ることができます。

Watson(Java、C++、および少しのPrologでプログラムされています)でさえ、おそらく非常に特殊なシステムです。ワトソンは膨大な量の事実を取得するように設計されており、洗練された検索アルゴリズムを使用してこれらの事実を整理するように設計されているようです(ただし、IBMはおそらくそれを言ってresします)。将来のAI実装では、AIパラダイムを組み合わせて、各専門部品にさまざまな言語を実装する可能性があります。 LISPとPrologでさえ、いつか復活するかもしれません。

11
user922475

Prologの動機を思い出すのは良い考えかもしれません。問題解決のための論理と、人間や機械のような推論を理解することです。これは進行中のプロジェクトであり、Prologはその最高の結果の1つですが、最終的なものではありません。知識を表現するためのより良い言語を探し続けています。ボブ・コワルスキーによる最新の本をチェックしてください:人為的に知的になる方法。

6
Jacinto Davila

しかし、私は「なぜ」LISPを使用するのか理解できません...研究者は機械学習などを行うために使用します.

Yann LeCunは Lush 別名LISP Universal Shellを開発しました。また、最近ソーシャルメディアネットワークでAIリサーチのディレクターになりました。

主題に関するすべての記事/本も役立ちます:)

あなたはすでに知っていると思います 人工知能:現代のアプローチ それは大学でAIの最も読まれている紹介本です。

1
user3257363