LispがAIにとってこんなに良い言語なのはなぜですか?


30

Lispは人工知能の研究開発に適した言語であるとコンピューター科学者やAIの分野の研究者から聞いたことがあります。ニューラルネットワークとディープラーニングの普及により、これはまだ当てはまりますか?この理由は何ですか?現在の深層学習システムは現在どの言語に組み込まれていますか?

回答:


30

まず、私はあなたが意味することを推測するのCommon Lisp(標準言語仕様で、その参照HyperSpecを効率的な実装(ラàで)SBCL)。ただし、Schemeの最近の実装も関連する可能性があります(BiglooChicken / Schemeなどの適切な実装)。Common LispとScheme(さらにClojureも)は、同じLispファミリーのものです。そして、ビッグデータや機械学習アプリケーションを駆動するスクリプト言語として、ガイルかもしれないことはPythonに便利な交換ともLispの方言です。ところで、私はSICPを読むことをお勧めします、Schemeを使用したプログラミングの優れた紹介。

次に、Common Lisp(およびLispの他の方言)は、シンボリックAIに最適です。ただし、最近の多くの機械学習ライブラリは、より主流の言語でコーディングされています。たとえば、TensorFlowはC ++およびPythonでコーディングされています。ディープラーニングライブラリは、主にC ++またはPythonまたはCでコーディングされます(GPUコンピューティングパーツにOpenCLまたはCudaを使用することもあります)。

Common Lispは、以下の理由により、シンボリック人工知能に最適です。

  • 非常に優れた実装(たとえば、REPLに与えられたすべての式をマシンコードにコンパイルするSBCL
  • それはホモイコニックなので、プログラムをデータとして扱いやすく、特に[サブ]プログラムを生成しやすく、つまりメタプログラミング手法を使用します。
  • それは持って読む-EVAL-印刷ループをインタラクティブなプログラミングを容易にするために
  • Cのような他の言語よりもはるかに強力な、非常に強力なマクロ機構を提供します(基本的に、問題に対して独自のドメイン固有のサブ言語を定義します)。
  • それが義務付けガベージコレクタを(たとえコードがごみを収集することができます)
  • 多くのコンテナ抽象データ型を提供し、シンボルを簡単に処理できます。
  • 適切なアノテーションを使用して、高レベル(動的に型指定された)コードと低レベル(多かれ少なかれ開始的に型指定された)コードの両方をコーディングできます。

ただし、ほとんどの機械学習およびニューラルネットワークライブラリはCLでコーディングされていません。ニューラルネットワークもディープラーニングも、シンボリック人工知能分野にはないことに注意してください。この質問も参照してください。

EuriskoCyCのようないくつかのシンボリックAIシステムがCLで開発されました(実際には、CLの上に構築されたDSLで)。

プログラミング言語はあまり重要ではないことに注意してください。で人工一般知能の研究テーマ、一部の人々は、すべて独自のコード(そうでそれを設計している生成するAIシステムのアイデアに取り組んでブートストラップアプローチを)。次に、そのようなシステムによって生成されるコードは、Cのような低レベルのプログラミング言語でも生成できます。J.Pitratのブログを参照してください。


1
ここに追加したいのは、テンソルフローとテアノが計算グラフに基づいていることです。これは実際には記号プログラミングですが、命令型言語内にあります。
マキシム

@Basile:Common LISPのチュートリアルまたはリファレンスを共有してください
Ved Prakash

@VedPrakash:メールでご連絡したいと思います。私のはbasile@starynkevitch.net; 私はツイッターを使用するには
取り

15

David Nolen(ClojureClojureScriptの寄稿者、Core LogicのminiKanrenの移植者)は、LISPがあまりにも強力であるとの講演で、LISPは他のプログラミング言語よりも数十年先だったと述べました。言語が名前を維持できなかった理由いくつかあります。

この記事では、LISPがAIに適している重要なポイントを強調しています

  • 新しい言語の定義と複雑な情報の操作が簡単。
  • プログラムとデータを定義および操作する際の完全な柔軟性。
  • プログラムは簡潔で低レベルの詳細であるため、高速です。
  • 優れたプログラミング環境(デバッグ、インクリメンタルコンパイラ、エディタ)。

この分野の私の友人のほとんどは、通常、人工ニューラルネットワークと機械学習にMatlabを使用しています。ただし、低レベルの詳細は非表示にします。結果を探しているだけで、そこにたどり着く方法を探していないのであれば、Matlabは良いでしょう。しかし、低レベルの詳細なものでも学習したい場合は、少なくとも一度はLISPを使用することをお勧めします。
さまざまなAIアルゴリズムとテクニックを理解している場合、言語はそれほど重要ではないかもしれません。「人工知能:現代のアプローチ(Stuard J. RussellとPeter Norvig著)」を読むことをお勧めします。現在この本を読んでおり、とても良い本です。


4

AIは、機械学習、ディープラーニング、ニューラルネットワークなどをはるかに超える幅広い分野です。これらの分野の一部では、プログラミング言語はまったく問題にならないため(速度の問題を除く)、LISPは確かにトピックではありません。

たとえば、検索やAIの計画では、C ++やJavaなどの標準言語が最初の選択肢であることがよくあります。これは、高速(特にC ++)であり、計画システムなどの多くのソフトウェアプロジェクトがオープンソースであるため、標準言語の使用が重要であるためです(または少なくともフィードバックや拡張機能を評価する場合には賢明です)。LISPで記述されたプランナーは1つだけです。AIのこの分野におけるプログラミング言語の選択の役割についての印象を与えるために、最もよく知られている、したがって最も重要なプランナーのリストを示します。

Fast-Downward:
説明:おそらく最も有名な古典的な計画システム
URL: http : //www.fast-downward.org/
言語: C ++、パーツ(前処理)はPython

FF:
説明:一緒に高速下向きで、古典的な計画システムの誰もが知っているURLを:https://fai.cs.uni-saarland.de/hoffmann/ff.html 言語: C

VHPOP:
説明:最も有名な半順序因果リンク(POCL)計画システムの1つ
URL: http : //www.tempastic.org/vhpop/
言語: C ++

SHOPおよびSHOP2:
説明:最もよく知られているHTN(階層)計画システム
URL: https : //www.cs.umd.edu/projects/shop/
言語: SHOPおよびSHOP2には2つのバージョンがあります。元のバージョンはLISPで記述されています。新しいバージョン(JSHOPおよびJSHOP2と呼ばれる)はJavaで記述されています。Pyshopは、Pythonで書かれたSHOPバリアントです。

PANDA:
説明:別の有名なHTN(およびハイブリッド)計画システム
URL: http : //www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
言語:そこPANDA1とPANDA2はJavaで記述され、PANDA3は主にJavaで記述され、一部の部分はScalaにあります。

これらは、私の頭に浮かんだ最も有名な計画システムのほんの一部です。最新のものは、2年ごとに開催される国際計画コンペティション(IPC、http: //www.icaps-conference.org/index.php/Main/Competitions )から取得できます。競合するプランナーのコードは、オープンソースとして公開されています(数年間)。

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