LispがAIに使用される理由 [閉まっている]


185

私はLispをAIプログラミングで使用されていると聞いたので、視野を広げることを学んでいます。いくつかの調査を行った後、AIの例や、AIの傾向をさらに強めるような言語のAIをまだ見つけることはできません。

Lispが利用可能だったために過去に使用されたことがありますか、それとも私が見逃しているものはありますか?


5
>…Lispがアニメーションとグラフィックスにのみ役立つとは思わないでください> AI、バイオインフォマティクス、B2Bおよびeコマース、データマイニング、EDA /半導体>アプリケーション、エキスパートシステム、ファイナンス、インテリジェントエージェント、ナレッジ>管理、機械CAD 、モデリングとシミュレーション、自然言語、>最適化、研究、リスク分析、スケジューリング、テレコム、およびWeb>オーサリング>これらは、発生した唯一のこと>です。
Avi

2
LispがAIにのみ役立つとは思っていませんでした。なぜそれがAIに使用されるのか疑問に思っています。
クリスティアンロモ

私は、質問を「ハードAIに必要な言語の機能は何か」と言い換えます。これは有効で有用な質問であり、結果はLisp ForthとアセンブラだけがハードAIを実行するために必要なものを備えているということになります。
アルバートファンデルホルスト

回答:


126

Lispは1980年代の終わりまでAIで使用されていました。しかし、80年代には、Common Lispは「AI言語」としてビジネス界に売られすぎていました。この反発により、ほとんどのAIプログラマーは数年間C ++を使用するようになりました。最近では、プロトタイプは通常、より新しい動的言語(Perl、Python、Rubyなど)で記述され、成功した研究の実装は、通常CまたはC ++(Javaの場合もあります)で行われます。

70年代に興味があるなら、私はそこにいませんでした。しかし、Lispは3つの理由で(重要な順に)AI研究に成功したと思います。

  1. Lispは優れたプロトタイピングツールです。それはだった最高の非常に長い時間のために。Lispはまだ解決方法がわからない問題への取り組みに優れています。その説明はAIを完全に特徴付けます。
  2. Lispはシンボリックプログラミングをうまくサポートしています。古いAIも象徴的でした。この点でも長い間ユニークでした。
  3. Lispは非常に強力です。関数とマクロは組み込みのもののように見えるため、コードとデータの区別は弱く、他の言語よりも拡張性が高く感じられます。

私はPeter Norvigの古いAIブックを持っていませんが、それはLispでAIアルゴリズムをプログラミングする方法を学ぶのに良い方法であるはずです。

免責事項:私は計算言語学の大学院生です。私は、自然言語処理のサブフィールドを他のフィールドよりもよく知っています。多分Lispは他のサブフィールドでもっと使われています。


33
Lispは確かにまだ生きており、機械学習/ ILPの世界でキックしています
HasaniH 2009

13
Cで教えられたAIの学部課程がありました。Norvigの本からAIの大学院レベルの課程を教えていました。Cの本はAIアルゴリズムと構造に焦点を当てています。Norvigの本は「AIの歴史について読みながらLISPを学ぼう」のような感じがしました。私の意見では、まったく時間の浪費です。
、サンジャシント

7
誰もが見逃しているように見える理由の1つは、John McCarthyがLispを作成し、特にAIの分野で非常に影響力のあるコンピュータサイエンティストであったことです。当然、彼の仕事の多くはLispで実装されたため、Lispは足場を得ました。
cha0site 2012

2
Common LispはAI言語を意図したものではなく、業界で使用するために作成されました。研究には、通常、Schemeが使用されます。そして決して、言語をその年齢で判断しないでください。それは単にクールさに比例しておらず、その逆も同様です。Cは古くてクールですが、なぜLispの年齢が重要なのでしょうか。
ルカラミシュビリ

1
Lisp WASが1980年代の終わりまでAIに使用されていたのは正確ではなかったと思います。2016年、MITは依然としてAIの分野でかなり有名な機関です。MITの学部生のロボット工学コースの推奨される教科書はArtificial Intelligence by Patrick Henry Winstonです。第2版​​までに、その本のプログラミングの章は、独自の同期された本に分岐しました- Lisp。名前が示すように、プログラミングは完全にで行われLispます。people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

61

Lispは、シンボルで非常にうまく計算するソフトウェアの実装をサポートするため、AIに使用されます。シンボル、シンボリック式、およびそれらを使用した計算は、Lispの中核です。

シンボルを使用したコンピューティングの典型的なAI領域は、コンピュータ代数、定理証明、計画システム、診断、書き換えシステム、知識表現と推論、論理言語、機械翻訳、エキスパートシステムなどでした。

これらのドメインの多くの有名なAIアプリケーションがLispで書かれたのは当然のことです。

  • 最初の大規模なコンピュータ代数システムとしてのMacsyma。
  • ACL2は、AMDなどで広く使用されている定理証明者です。
  • 米軍による第一次湾岸戦争で使用されたロジスティクスプランナーとしてのDART。このLispアプリケーションだけでも、当時のAI研究への米国の投資すべてに見返りがあったと言われています。
  • ハッブル宇宙望遠鏡の計画およびスケジューリングアプリケーションであるSPIKE。他のいくつかの大型望遠鏡でも使用されます。
  • 記述された最大のソフトウェアシステムの1つであるCYC。人間の常識知識の領域における表現と推論。
  • METALは、最初に商業的に使用された自然言語翻訳システムの1つです。
  • American Expressの承認者のアシスタント。クレジットカードのトランザクションをチェックします。

これらの領域には、Lispで書かれた何千ものアプリケーションがあります。それらにとって非常に一般的なのは、記号処理の領域で特別な機能が必要であることです。1つは、Lispの上にこれらのドメインで特別なインタープリター/コンパイラーを持つ特別な言語を実装します。Lispを使用すると、シンボリックデータおよびプログラムの表現を作成でき、これらの式(数式、論理式、計画など)を操作するためのあらゆる種類の機構を実装できます。

(他の多くの汎用プログラミング言語もAIで使用されていることに注意してください。特にLispがAIで使用されている理由に答えようとしました。)


10
はい、歴史的に、AIは何よりもシンボリックコンピューティングについてでした。80年代の「AIの冬」は、おそらくシンボリック AIの危機でした。その当時、サブシンボリック手法(ニューラルネットワーク、機械学習など)への関心が再び高まりました。Lisp実装は通常、数値計算が非常に弱かった。彼らがこの面で改善したかどうかはわかりません。
MaD70 2009年

2
@ MaD70:80年代のAIの冬は、一般的にAIに関するものでした。軍は資金の多くを停止し、AIは主に商業市場で失敗しました。当時存在していたニューラルネットワークもです。そのAIを「新しいソフトウェア開発方法」(ルール、ロジック、ニューラルネットワーク、ガベージコレクションなどを使用)と見なすと、これも失敗します。その多くは、今日でも広く使われているわけではありません。
Rainer Joswig、2010

当時と振り返っての私の印象は異なっていました/異なっています:80年代後半のサブシンボリック法における研究と市場の両方(専用のニューラルプロセッサさえありました)での関心の復活をはっきりと覚えています/ 90年代初頭、何十年もの追放主義の後(パーセプトロンのMinsky&Papert批判の影響について言及する私の回答を参照してください:stackoverflow.com/questions/683124/neural-networks-obsolete/…)。
MaD70

1
シンボリックAIは失敗しました、IMO、当時のハードウェアのため(強力ではない/十分に安価)、およびシンボリックキャンプとサブシンボリックキャンプの間のそのような厳しいコントラストが相乗効果を排除したためです。「今日でも広く使われている/好まれている」という言葉:AIで開発された手法(両方のキャンプで)の一部は、考えられるよりもはるかに多く使われていると思います(幸い、宣伝されていません)。
MaD70

ほんの一例:90年代の終わりに、私の知人の何人かは、テキスタイル分野での品質管理のためのプロジェクトの実現可能性について私に尋ねました。私は頭の中で、そのような差別問題(本質的には画像分類)の有望なアプローチとしてニューラルネットワークに触れました。そのような提案だけで、彼らは数週間で、ニューラルネットワークを使用してすでに開発されたソフトウェアを見つけ、その配布権を取得しました。
MaD70

22

その理由の1つは、ドメイン固有の構成要素を使用して言語を拡張し、ドメイン固有の言語にすることです。この手法は、ビットをシャッフルするのではなく、解決している問題について推論できるため、非常に強力です。


この例を提供またはリンクできますか?
DuckMaestro、2011年

9
@DuckMaestro:今週のマクロ作業の約30分で、SQL Selectのアドホックバギーバージョンを実装しました。それはこのようになります:(クエリSELECT * FROMデータセットWHERE expr)。
ポールネイサン

Lispに代数ソルバーを埋め込むyoutube.com/…Lispに回路言語を埋め込む埋め込むyoutube.com/…Lispに Lispを埋め込むyoutube.com/…Lispに Prologを埋め込む-シリーズ全体を見る
aoeu256


12

私の推測では、関数型言語であるため、コードとデータは区別されません。関数定義や関数呼び出しを含むすべてのものをリストとして扱い、他のデータと同様に変更できます。

したがって、自己検査、自己変更コードは簡単に記述できます。


10
それが機能しているからではありません。プロローグは同じプロパティを持っています-すべては「用語」であり、用語はデータとコードです。(Prologはロジックプログラミング言語であり、AIにもよく使用されます)
ヒューアレン

-このための派手な用語がHomoiconicityと呼ばれるen.wikipedia.org/wiki/Homoiconicity
モルテン・ジェンセン

9

考えられる答えの1つは、AIは非常に困難な問題の集まりであり、LispはAIだけでなく、困難な問題を解決するための優れた言語であるということです。

その理由については、マクロ、ジェネリック関数、豊富なイントロスペクションにより、簡潔なコードとドメイン抽象化の簡単な導入が可能になります。これは、より強力にできる言語です。不必要な多くの問題については、それ自体に費用がかかりますが、他の問題については、前進するために力が必要です。


7

これをAIだけで考えるのは間違っていると思います。AI冬のようなものや一般的なLISPへの商業効果は、なぜそれがAIに使用されたのかではなく、なぜ今はあまり使用されていないのかを尋ねていると気が散ります...

とにかく、AIコードのほとんどが本質的に研究コードだったからだと思います。Lispは、探索的プログラミング、困難なアルゴリズムの実装、自己変更および頻繁に変更されるコードのための優れた言語です。言い換えれば、研究コード。

今日、lispをいくつかの研究コード(数学、信号処理)に使用しています。これは、ほとんどの言語よりも柔軟で強力でありながら、ほとんどの言語よりも効率的なコードを生成するためです。通常、たとえばc ++の速度の+/- 2の係数内でパフォーマンスを得ることができますが、はるかに速く実装でき、c ++、java、c#を使用した場合よりもはるかに時間がかかる複雑さに対処できます。

しかし、それは話題から外れています。AIコードは、コードを研究するための強力なアプローチであるため、しばらくの間、主にcommon lispで作成されたと思います。それはまだです。しかし、「AI」アルゴリズムがよりよく理解され、探求されるようになるにつれて、それらの一部は教えると使用するのがはるかに簡単になり、学部課程の年間風味の言語で登場しました。そこから、それは人々がすでに知っていること、利用可能なライブラリー、そして大規模なグループにとって何がうまくいくかという問題になります。


6

大きな理由は、基本的なデータ構造としてのリストの柔軟性にあったと思います。

当時、それらをあらゆる種類の複合オブジェクトに変えることができ、メッセージの受け渡しやポリモーフィズムとしての新しいものを選択するための言語になりました。特にAI向けではなく、大きく複雑なタスク向けです。特に彼らが概念を実験していたとき。


4

Lispは物事をハッキングするための便利なツールでした。これは、プログラムとデータをあまり区別していなかったためです。これにより、ハッカーはデータのように非常に簡単に機能を操作できました。

しかし、lispは中括弧があり、データとプログラムが区別されないため、人間が読むのは非常に困難です。今日、私はlispをプロダクションAIコード(またはおそらくプロトタイピング)に使用しませんが、スクリプト用にpythonをはるかに好みます。

考慮すべきもう1つのことは、言語に関連する/関連する既存のライブラリ/ツールです。私はlispライブラリーとpythonライブラリーを比較する立場にはありませんが、ライブラリーとオープンソースの問題は以前よりもずっと多くなっていると思います。

この回答は、lispとpythonの以下の比較に触発されました:http : //amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html


2
私は個人的にはLispがほとんどの言語よりも読みやすいと感じており、数週間前にそれを学びました。Pythonはほとんどの言語と比較して特にきれいですが、lispをC ++のようなものと比較すると、はるかにきれいで読みやすくなります。とにかく私の経験では。
Zeusoflightning125 2014

4

Lispは関数型言語であるため、再帰アルゴリズムを実装するための非常に優れた選択肢だったと聞いたことを覚えています。意思決定プロセス(トラバーサル)と最終結果(リーフノード)を検討する場合、ツリーを追跡して戻って作業できることが不可欠です。

これは、Lispを研究している大学のAIコースで教えられました。


1
Lispのマクロは何よりも強力で、OOPをわずか50行のLispコードで実装できます。REPLを使用すると、プログラムの実行中にプログラムを編集できます... Lispだけが独自のソースコードを簡単に編集できます...
aoeu256

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.