Dlaczego Lisp jest tak dobrym językiem dla AI?

30

Wcześniej słyszałem od informatyków i badaczy z obszaru sztucznej inteligencji, że Lisp jest dobrym językiem dla badań i rozwoju sztucznej inteligencji. Czy to nadal obowiązuje, wraz z rozprzestrzenianiem się sieci neuronowych i głębokim uczeniem się? Jakie było ich uzasadnienie? W jakich językach są obecnie wbudowane obecne systemy głębokiego uczenia się?

J. Antonio Perez
źródło

Odpowiedzi:

30

Po pierwsze, myślę, że masz na myśli Common Lisp (który jest standardową specyfikacją języka, zobacz jego HyperSpec ) z wydajnymi implementacjami (à la SBCL ). Ale niektóre niedawne implementacje Schematu mogą być również istotne (z dobrymi implementacjami, takimi jak Bigloo lub Chicken / Scheme ). Zarówno Common Lisp, jak i Scheme (a nawet Clojure ) pochodzą z tej samej rodziny Lisp. Jako język skryptowy sterujący aplikacjami Big Data lub uczenia maszynowego, Guile może być przydatnym zamiennikiem Pythona i jest dialektem Lisp. BTW, polecam przeczytać SICP, doskonałe wprowadzenie do programowania za pomocą schematu.

Zatem Common Lisp (i inne dialekty Lisp) jest świetny dla symbolicznej AI. Jednak wiele najnowszych bibliotek uczenia maszynowego jest zakodowanych w bardziej popularnych językach, na przykład TensorFlow jest napisany w C ++ i Python. Biblioteki głębokiego uczenia są w większości zakodowane w C ++, Python lub C (i czasami używają OpenCL lub Cuda do części obliczeniowych na GPU).

Common Lisp doskonale nadaje się do symbolicznej sztucznej inteligencji, ponieważ:

  • ma bardzo dobre implementacje (np. SBCL , który kompiluje do kodu maszynowego każde wyrażenie podane do REPL )
  • to homoiconic , więc jest to łatwe do czynienia z programami jak dane, w szczególności jest to łatwe do wygenerowania [sub] programów, czyli wykorzystanie meta-programowania techniki.
  • posiada pętlę Read-Eval-Print, która ułatwia programowanie interaktywne
  • zapewnia bardzo potężną maszynerię makr (zasadniczo definiujesz swój własny podjęzyk specyficzny dla domeny dla twojego problemu), znacznie potężniejszy niż w innych językach, takich jak C.
  • nakazuje moduł odśmiecający (nawet kod może być odśmiecany)
  • zapewnia wiele abstrakcyjnych typów danych kontenera i może z łatwością obsługiwać symbole.
  • możesz kodować zarówno kod wysokiego poziomu (dynamicznie), jak i niskiego poziomu (mniej więcej na początku), poprzez odpowiednie adnotacje.

Jednak większość bibliotek uczenia maszynowego i sieci neuronowych nie jest zakodowana w języku CL. Zauważ, że ani sieć neuronowa, ani głębokie uczenie się nie należą do symbolicznej dziedziny sztucznej inteligencji. Zobacz także to pytanie .

Kilka symbolicznych systemów AI, takich jak Eurisko lub CyC , zostało opracowanych w CL (w rzeczywistości w niektórych DSL zbudowanych powyżej CL).

Zauważ, że język programowania może nie być bardzo ważny. W temacie badawczym Artificial General Intelligence , niektórzy ludzie pracują nad ideą systemu AI, który generowałby cały swój własny kod (więc projektują go przy użyciu metody ładowania początkowego ). Następnie kod generowany przez taki system można nawet wygenerować w językach programowania niskiego poziomu, takich jak C. Zobacz blog J.Pitrat

Basile Starynkevitch
źródło
1
Chciałbym tu dodać, że tensorflow i theano oparte są na grafach obliczeniowych, co w rzeczywistości jest programowaniem symbolicznym, ale w języku imperatywnym.
Maxim,
@Basile: Udostępnij wspólny samouczek LISP lub odniesienie
Ved Prakash
@VedPrakash: Chciałbym skontaktować się z tobą przez e-mail. Moje jest [email protected]; Jestem za stary, aby używać Twittera
Basile Starynkevitch
15

David Nolen (współautor Clojure i ClojureScript ; twórca Core Logic jako portu miniKanren) w rozmowie o nazwie LISP, ponieważ zbyt potężny stwierdził, że w jego czasach LISP wyprzedzał inne języki programowania o dekady. Istnieje wiele powodów, dla których język nie był w stanie utrzymać swojej nazwy.

W tym artykule podkreślono niektóre kluczowe punkty, dlaczego LISP jest dobry dla AI

  • Łatwo zdefiniować nowy język i manipulować złożonymi informacjami.
  • Pełna elastyczność w definiowaniu i manipulowaniu programami oraz danymi.
  • Szybko, ponieważ program jest zwięzły i zawiera szczegóły na niskim poziomie.
  • Dobre środowisko programistyczne (debugowanie, kompilatory przyrostowe, edytory).

Większość moich znajomych z tej dziedziny zwykle używa Matlaba do sztucznych sieci neuronowych i uczenia maszynowego. Ukrywa jednak szczegóły niskiego poziomu. Jeśli szukasz tylko wyników, a nie tego, jak się tam dostać, Matlab będzie dobry. Ale jeśli chcesz nauczyć się nawet szczegółowych rzeczy na niskim poziomie, sugeruję, abyś przynajmniej raz przejrzał LISP.
Język może nie być tak ważny, jeśli rozumiesz różne algorytmy i techniki AI. Sugeruję przeczytanie „Sztucznej inteligencji: nowoczesne podejście (Stuarda J. Russella i Petera Norviga”) . Obecnie czytam tę książkę i jest to bardzo dobra książka.

Ugnes
źródło
4

AI to szeroka dziedzina, która wykracza daleko poza uczenie maszynowe, głębokie uczenie się, sieci neuronowe itp. W niektórych z tych dziedzin język programowania nie ma żadnego znaczenia (z wyjątkiem problemów z prędkością), więc LISP z pewnością nie byłby tam tematem .

Na przykład w wyszukiwaniu lub planowaniu AI standardowe języki, takie jak C ++ i Java, są często pierwszym wyborem, ponieważ są szybkie (w szczególności C ++) i ponieważ wiele projektów oprogramowania, takich jak systemy planowania, jest typu open source, dlatego użycie standardowego języka jest ważne ( lub przynajmniej mądrze, jeśli ktoś docenia opinie lub rozszerzenia). Znam tylko jednego planistę napisanego w LISP. Aby wywrzeć wrażenie na temat roli wyboru języka programowania w tej dziedzinie sztucznej inteligencji, podam listę najbardziej znanych i dlatego najważniejszych planistów:

Szybko w dół:
opis: prawdopodobnie najbardziej znany
adres URL klasycznego systemu planowania : http://www.fast-downward.org/
język: C ++, części (przetwarzanie wstępne) są w języku Python

FF:
opis: razem z fast-dół klasyczny system planowania każdy wie URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html język: C

VHPOP:
opis: jeden z najbardziej znanych systemów planowania linków przyczynowych zamówień częściowych (POCL)
URL: http://www.tempastic.org/vhpop/
język: C ++

SKLEP i SKLEP 2:
opis: najbardziej znany
URL (hierarchiczny) system planowania HTN : https://www.cs.umd.edu/projects/shop/
język: istnieją dwie wersje SKLEPU i SKLEPU2. Oryginalne wersje zostały napisane w LISP. Nowsze wersje (zwane JSHOP i JSHOP2) zostały napisane w Javie. Pyshop to kolejny wariant SKLEPU napisany w języku Python.

PANDA:
opis: inny dobrze znany
URL systemu planowania HTN (i hybryd) : http://www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
język: tam są różne wersje terminarza: PANDA1 i PANDA2 są napisane w Javie, PANDA3 jest napisane głównie w Javie, a niektóre części są w Scali.

To tylko niektóre z najbardziej znanych systemów planowania, które przyszły mi do głowy. Nowsze można znaleźć w Międzynarodowych Konkursach Planowania (IPC, http://www.icaps-conference.org/index.php/Main/Competitions ), które odbywają się co dwa lata. Kody konkurujących planistów są publikowane na zasadach open source (przez kilka lat).

Prof.Chaos
źródło