Lisp neden AI için bu kadar iyi bir dil?


30

Daha önce bilgisayar bilimcilerinden ve AI alanındaki araştırmacılardan Lisp'in yapay zeka alanındaki araştırma ve geliştirme için iyi bir dil olduğunu duymuştum. Bu hala sinir ağlarının yayılması ve derin öğrenme ile geçerli midir? Bunun sebepleri neydi? Şu anda mevcut derin öğrenme sistemleri hangi dilleri inşa ediyor?

Yanıtlar:


30

Öncelikle, verimli bir uygulamayla ( SB la SBCL ) Common Lisp (standart bir dil özelliği olan HyperSpec’e bakınız ) demek istediğinizi düşünüyorum . Ancak bazı yeni Program uygulamaları da ilgili olabilir ( Bigloo veya Chicken / Scheme gibi iyi uygulamalar ile ). Hem Common Lisp hem de Scheme (ve hatta Clojure ) aynı Lisp ailesindendir. Ve büyük veri veya makine öğrenme uygulamaları sürüş bir betik dili olarak, Guile olabilir olmak Python için yararlı bir yedek ve aynı zamanda bir Lisp dilidir. Btw, tavsiye öneririm sicpŞema kullanarak programlama için mükemmel bir giriş.

O zaman, Common Lisp (ve Lisp'in diğer lehçeleri) sembolik AI için harikadır. Bununla birlikte, birçok yeni makine öğrenme kütüphanesi daha genel dillerde kodlanmıştır, örneğin TensorFlow C ++ ve Python'da kodlanmıştır. Derin öğrenme kütüphaneleri çoğunlukla C ++ veya Python veya C olarak kodlanır (ve bazen GPU hesaplama parçaları için OpenCL veya Cuda kullanılır ).

Common Lisp sembolik yapay zeka için mükemmeldir çünkü:

  • çok iyi uygulamaları var (örneğin, REPL'e verilen her ifadeyi makine koduna derleyen SBCL )
  • öyle homoiconic o veri olarak programlarla uğraşmak kolaydır böylece, özellikle bu kullanım olduğunu, [alt] programları oluşturmak kolaydır meta-programlama teknikleri.
  • Etkileşimli programlamayı kolaylaştırmak için bir Okuma-Değerlendirme-Baskı Döngüsüne sahiptir
  • C gibi diğer dillerden çok daha güçlü, çok güçlü bir makro makine (temelde, sorun için kendi alanınıza özgü alt dilinizi tanımlarsınız) sağlar.
  • bir çöp toplayıcıyı zorunlu kılar (kod bile çöp toplanabilir)
  • Birçok konteyner soyut veri türü sağlar ve sembolleri kolayca kullanabilir.
  • Uygun açıklamalarla hem yüksek seviye (dinamik olarak yazılmış) hem de düşük seviye (daha çok veya daha az başlangıçta yazılmış) kodu kodlayabilirsiniz.

Ancak, çoğu makine öğrenme ve sinir ağı kütüphanesi CL'de kodlanmamıştır. Ne sinir ağının ne de derin öğrenmenin sembolik yapay zeka alanında olmadığına dikkat edin. Ayrıca bu soruya bakınız .

CL'de Eurisko veya CyC gibi bazı sembolik AI sistemleri geliştirilmiştir (aslında, CL'nin üzerinde kurulu bazı DSL'lerde ).

Programlama dilinin çok önemli olmayabileceğine dikkat edin. In Yapay Genel İstihbarat araştırma konusu, bazı insanlar kendine özgü kod (yani onu tasarlıyorsunuz üretecek bir AI sistemi geliştirme fikri üzerinde çalışmaya önyükleme yaklaşımı). Daha sonra, böyle bir sistem tarafından üretilen kod, C gibi düşük seviyeli programlama dillerinde bile üretilebilir. Bkz. J.Pitrat'ın blogu.


1
Burada, tensorflow ve theano'nun aslında sembolik programlama olan ama zorunlu dil dahilindeki hesaplama grafiklerine dayandığını eklemek isterim.
Maxim,

@Basile: Lütfen Ortak LISP eğitimini veya referansını paylaşın
Ved Prakash

@VedPrakash: Sizinle e-posta yoluyla iletişim kurmak istiyorum. Benimki basile@starynkevitch.net; Twitter kullanmak için çok yaşlıyım
Basile Starynkevitch

15

David Nolen ( Clojure ve ClojureScript'in yazarı ; Core Logic'in yaratıcısı bir miniKanren limanı) LISP adlı bir konuşmada , çok güçlü bir şekilde LISP'nin diğer programlama dillerinden on yıl önce olduğunu belirtti. Orada nedenlerden sayısı dili 's adını korumak mümkün değildi neden.

Bu makale LISP'in AI için neden iyi olduğu konusunda bazı önemli noktaları vurgulamaktadır

  • Yeni bir dil tanımlamak ve karmaşık bilgileri değiştirmek kolaydır.
  • Verilerin yanı sıra programların tanımlanmasında ve işlenmesinde tam esneklik.
  • Hızlı, program düşük seviye ayrıntı ile birlikte özlü olduğu gibi.
  • İyi programlama ortamı (hata ayıklama, artımlı derleyiciler, editörler).

Bu alandaki arkadaşlarımın çoğu Yapay Sinir Ağları ve Makine Öğrenmesi için genellikle Matlab kullanıyor. Olsa da düşük seviye detayları gizler. Eğer sadece sonuçları arıyorsanız ve oraya nasıl ulaştığınızı bilmiyorsanız, Matlab iyi olacaktır. Ancak, düşük seviyeli detaylı şeyleri bile öğrenmek istiyorsanız, o zaman en azından bir kez LISP'den geçmenizi önereceğim.
Çeşitli AI algoritmaları ve tekniklerini anlıyorsanız, dil o kadar önemli olmayabilir. Okumaktan önerir : "Stuard J. Russell ve Peter Norvig A Modern Yaklaşım (yapay zeka" Şu anda bu kitap okuyorum ve çok iyi bir kitap..


4

AI, makine öğrenmenin, derin öğrenmenin, sinir ağlarının vb. Ötesine geçen geniş bir alandır. Bu alanların bazılarında, programlama dili hiç önemli değildir (hız sorunları hariç), bu nedenle LISP kesinlikle orada bir konu olmaz .

Örneğin, aramada veya AI planlamada, C ++ ve Java gibi standart diller genellikle ilk tercihtir, çünkü hızlıdırlar (özellikle C ++) ve planlama sistemleri gibi pek çok yazılım projesi açık kaynak olduğundan, standart bir dil kullanmak önemlidir ( veya en azından, bir kişinin geribildirim veya uzantıları takdir etmesi durumunda akıllıca). Yalnızca LISP'de yazılmış tek bir planlayıcının farkındayım. Sadece bu AI alanındaki bu programlama dilinin seçiminin rolü hakkında bir fikir vermek için, en iyi bilinen ve bu yüzden en önemli planlayıcılardan bazılarının bir listesini vereceğim:

Hızlı-Aşağı:
açıklama: muhtemelen en iyi bilinen klasik planlama sistemi
URL'si: http://www.fast-downward.org/
dil: C ++, kısımlar (ön işleme) Python'da

FF:
tanım: Fast-Downward ile birlikte klasik planlama sistemi herkesin bildiği
URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html
Dil: C

VHPOP:
tanım: en iyi bilinen kısmi sıralı nedensel bağlantı (POCL) planlama sistemlerinden biri
URL: http://www.tempastic.org/vhpop/
language: C ++

MAĞAZA ve MAĞAZA2:
tanım: en iyi bilinen HTN (hiyerarşik) planlama sistemi
URL'si: https://www.cs.umd.edu/projects/shop/
language: SHOP ve SHOP2'nin iki sürümü vardır. Orijinal versiyonlar LISP'de yazılmıştır. Daha yeni sürümler (JSHOP ve JSHOP2 olarak adlandırılır) Java ile yazılmıştır. Pyshop, Python'da yazılmış başka bir SHOP çeşididir.

PANDA:
tanım: başka bir tanınmış HTN (ve hibrit) planlama sistemi
URL'si: http://www.uni-ulm.de/tr/in/ki/research/software/panda/panda-planning-system/
language: there planlayıcının farklı versiyonlarıdır: PANDA1 ve PANDA2, Java ile yazılmıştır, PANDA3, öncelikle Java ile yazılmıştır, bazı kısımlar Scala'dadır.

Bunlar aklıma gelen en iyi bilinen planlama sistemlerinden sadece birkaçıydı. Her iki yılda bir yapılan Uluslararası Planlama Yarışmalarından (IPC'ler, http://www.icaps-conference.org/index.php/Main/Competitions ) daha yeni olanları bulabilirsiniz . Rakip planlamacının kodları açık kaynak kodludur (birkaç yıl).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.