AIプログラミングでLispが使われていると聞いて、自分の視野を広げるためにLispを学んでいます。いくつかの調査を行った後、私はまだ AI の例や、AI に傾倒する言語の何かを見つけていません。
Lisp は、利用可能だったために過去に使用されていたのでしょうか。
AIプログラミングでLispが使われていると聞いて、自分の視野を広げるためにLispを学んでいます。いくつかの調査を行った後、私はまだ AI の例や、AI に傾倒する言語の何かを見つけていません。
Lisp は、利用可能だったために過去に使用されていたのでしょうか。
Lisp は 1980 年代の終わりまで AI で使用されていました。しかし、80 年代には、Common Lisp は「AI 言語」としてビジネス界に売り込まれすぎていました。この反発により、ほとんどの AI プログラマーは数年間 C++ を使用することを余儀なくされました。最近では、プロトタイプは通常、新しい動的言語 (Perl、Python、Ruby など) で記述され、成功した研究の実装は通常、C または C++ (Java の場合もあります) で行われます。
70 年代に興味があるなら、私はそこにいませんでした。しかし、Lisp が AI 研究で成功したのには次の 3 つの理由があると思います (重要度の高い順)。
私はPeter Norvig の古い AI の本を持っていませんが、Lisp で AI アルゴリズムをプログラミングする方法を学ぶには良い方法だと思われます。
免責事項: 私は計算言語学の大学院生です。私は自然言語処理のサブフィールドを他の分野よりもよく知っています。Lisp は他のサブフィールドでもっと使われているのかもしれません。
その理由の 1 つは、言語をドメイン固有の構造で拡張できるため、効果的にドメイン固有の言語にすることができるからです。この手法は、ビットをシャッフルするのではなく、解決しようとしている問題について推論できるため、非常に強力です。
私の推測では、関数型言語であるため、コードとデータを区別しません。関数定義や関数呼び出しを含むすべてをリストとして扱い、他のデータと同様に変更できます。
したがって、自己検査、自己変更コードは簡単に作成できます。
考えられる答えの 1 つは、AI は非常に難しい問題の集まりであり、Lisp は AI だけでなく、難しい問題を解決するための優れた言語であるということです。
その理由については、マクロ、ジェネリック関数、および豊富なイントロスペクションにより、簡潔なコードとドメイン抽象化の簡単な導入が可能になります。これは、より強力にすることができる言語です。不必要な多くの問題にはコストがかかりますが、他の問題では前進するために力が必要です。
これをAIだけで考えるのは間違っていると思います。AIの冬や、一般的なlispに対する商業的効果のようなものは、なぜ今ではあまり使用されていないのかではなく、なぜAIに使用されたのかを尋ねる場合は気が散ります...
とにかく、AIコードのほとんどが本質的に研究コードだったからだと思います。Lispは、探索的プログラミング、難しいアルゴリズムの実装、自己変更、そしてしばしば変更されるコードに最適な言語です。言い換えれば、研究コードのために。
私は今日、私の研究コードの一部(数学、信号処理)にlispを使用しています。これは、ほとんどの言語よりも柔軟で強力でありながら、ほとんどの言語よりも効率的なコードを生成できるためです。通常、パフォーマンスはc++の速度の+/-2倍以内で取得できますが、実装ははるかに高速で、c ++、java、c#を使用した場合よりもはるかに時間がかかる複雑さに対処できます。
しかし、それは話題から外れています。AIコードは、コードを研究するための強力なアプローチであるため、しばらくの間、主にCommonLispで作成されたと思います。それはまだです。しかし、「AI」アルゴリズムがよりよく理解され、探求されるようになると、それらの一部は教えたり使用したりするのがはるかに簡単になったため、学部課程では年のフレーバーの言語で表示されました。そこから、人々がすでに知っていること、利用可能なライブラリ、そして大規模なグループに適しているものが問題になります。
大きな理由は、基本的なデータ構造としてのリストの柔軟性にあると思います。
当時、それらをあらゆる種類の複合オブジェクトに変えることができ、メッセージの受け渡しやポリモーフィズムなどの新しいものに変えることができたため、選択した言語になりました。特に AI 向けではなく、大規模で複雑なタスク向けです。特に彼らが概念を実験していたとき。
私はあなたが正しいと思います.Lispは物事をハッキングするための便利なツールでした. これは、プログラムとデータをあまり区別しなかったためです。これにより、ハッカーはデータと同じように関数を非常に簡単に操作できるようになりました。
しかし、Lisp は中括弧があり、データとプログラムが区別されていないため、人間が読むのは非常に困難です。今日、私は生産用の AI コード (またはおそらくプロトタイピング) に Lisp を使用しませんが、スクリプト作成には Python を使用したいと考えています。
考慮すべきもう1つのことは、言語に含まれる/関連する既存のライブラリ/ツールです。私は Lisp ライブラリと Python ライブラリを比較する立場にはありませんが、ライブラリとオープン ソースは以前よりもはるかに重要になっていると思います。
この回答は、次の Lisp と python の比較に触発されました: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
Lisp は関数型言語であるため、再帰アルゴリズムの実装には非常に適していると聞いたのを覚えています。意思決定プロセス (トラバーサル) と最終結果 (リーフ ノード) を考えるとき、ツリーをたどって元に戻ることができることは不可欠です。
これは、Lisp を学んだ大学の AI コースで私に言われたことです。
もっと皮肉な答えは「1980年代に日米間の政治的AI戦争に敗れたから」かもしれない。第5世代コンピューターシステムの終焉がPrologに与える影響について推測する楽しいブログ投稿があります。