Dlaczego Lisp jest używany dla AI? [Zamknięte]


187

Uczyłem się Lispa, aby poszerzyć swoje horyzonty, ponieważ słyszałem, że jest używany w programowaniu AI. Po kilku badaniach nie znalazłem jeszcze przykładów sztucznej inteligencji ani czegokolwiek w języku, który skłoniłby go do tego bardziej.

Czy Lisp był używany w przeszłości, ponieważ był dostępny, czy jest coś, czego mi brakuje?


5
>… Proszę nie zakładać, że Lisp jest przydatny tylko w animacji i grafice,> AI, bioinformatyka, B2B i e-commerce, eksploracja danych, EDA / półprzewodniki> aplikacje, systemy ekspertowe, finanse, inteligentni agenci, wiedza> zarządzanie, mechaniczne CAD , Modelowanie i symulacja, Język naturalny,> Optymalizacja, Badania, Analiza ryzyka, Planowanie, Telekomunikacja i Internet> Tworzenie tylko dlatego, że są to jedyne rzeczy, które im się przydarzyły> lista. - Kent Pitman
Avi,

2
Nie sądziłem, że Lisp jest przydatny tylko dla AI, po prostu zastanawiam się, dlaczego jest do tego używany.
Cristián Romo,

Przeformułowałbym pytanie jako „jakie cechy języka są niezbędne dla twardej sztucznej inteligencji?” To ważne i użyteczne pytanie, a wynik będzie taki, że tylko Lisp Forth i assembler mają wszystko, czego potrzeba do wykonania twardej sztucznej inteligencji.
Albert van der Horst

Odpowiedzi:


127

Lisp BYŁ używany w AI do końca lat 80. Jednak w latach 80. Common Lisp został wyprzedany w świecie biznesu jako „język AI”; ta reakcja zmusiła większość programistów AI do C ++ na kilka lat. Obecnie prototypy są zwykle pisane w młodszym dynamicznym języku (Perl, Python, Ruby itp.), A implementacje udanych badań są zwykle w C lub C ++ (czasami w Javie).

Jeśli jesteś ciekawy lat 70-tych ... cóż, mnie tam nie było. Ale myślę, że Lisp odniósł sukces w badaniach AI z trzech powodów (w kolejności od najważniejszych):

  1. Lisp to doskonałe narzędzie do prototypowania. To było najlepsze przez bardzo długi czas. Lisp nadal świetnie radzi sobie z problemem, którego jeszcze nie wiesz, jak rozwiązać. Ten opis doskonale charakteryzuje SI.
  2. Lisp dobrze obsługuje programowanie symboliczne. Stara SI była również symboliczna. Również pod tym względem był wyjątkowy przez długi czas.
  3. Lisp jest bardzo potężny. Rozróżnienie między kodem a danymi jest słabsze, więc wydaje się, że jest bardziej rozszerzalne niż w innych językach, ponieważ funkcje i makra wyglądają jak elementy wbudowane.

Nie mam starej książki Petera Norviga o AI , ale ma to być dobry sposób na nauczenie się programowania algorytmów AI w Lispie.

Zastrzeżenie: Jestem absolwentem lingwistyki komputerowej. Poddziedzinę przetwarzania języka naturalnego znam znacznie lepiej niż inne dziedziny. Może Lisp jest używany częściej w innych podpolach.


34
Lisp zdecydowanie wciąż żyje i działa w świecie uczenia maszynowego / ILP
HasaniH.

14
Miałem kurs licencjacki z AI prowadzony w C. Miałem kurs magisterski z AI prowadzony z książki Norviga. Książka w C skupiała się na algorytmach i strukturach AI. Książka Norviga brzmiała jak: „nauczmy się LISP-a, czytając o historii sztucznej inteligencji”. Moim zdaniem kompletna strata czasu.
San Jacinto

8
Jednym z powodów, dla których wszyscy wydają się tęsknić, jest to, że John McCarthy napisał Lispa i był bardzo wpływowym informatykiem, szczególnie w dziedzinie sztucznej inteligencji. Oczywiście, wiele jego prac zostało zaimplementowanych w Lisp, dzięki czemu Lisp zyskał przyczółek.
cha0site

2
Common Lisp nigdy nie miał być językiem AI , został stworzony do użytku w branży. Do badań zwykle używany jest Schemat. I nigdy, przenigdy nie oceniaj języka na podstawie jego wieku - po prostu nie jest on proporcjonalny do chłodu i odwrotnie. C jest stary, ale fajny, więc dlaczego wiek Lispa ma znaczenie?
Luka Ramishvili

1
Nie jest to dokładne, że Lisp BYŁ używany do sztucznej inteligencji do końca lat 80-tych. W roku 2016 MIT pozostaje dość renomowaną instytucją w dziedzinie AI. Zalecany podręcznik do studiów licencjackich z robotyki na MIT to Artificial Intelligence by Patrick Henry Winston. W drugiej edycji rozdziały programistyczne tej książki rozgałęziały się na własną, zsynchronizowaną książkę - Lisp. Jak sama nazwa wskazuje, programowanie odbywa się całkowicie w Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

62

Lisp jest używany dla sztucznej inteligencji, ponieważ obsługuje implementację oprogramowania, które bardzo dobrze oblicza symbole. Symbole, wyrażenia symboliczne i obliczenia z nimi są podstawą Lispa.

Typowymi obszarami sztucznej inteligencji do obliczeń z użyciem symboli były / są: algebra komputerowa, dowodzenie twierdzeń, systemy planowania, diagnostyka, systemy przepisywania, reprezentacja wiedzy i rozumowanie, języki logiczne, tłumaczenie maszynowe, systemy ekspertowe i inne.

Nic więc dziwnego, że wiele znanych aplikacji AI w tych domenach zostało napisanych w Lispie:

  • Macsyma jako pierwszy duży system algebry komputerowej.
  • ACL2 jako szeroko stosowane narzędzie do twierdzenia, na przykład używane przez AMD.
  • DART jako planista logistyki używany przez wojsko amerykańskie podczas pierwszej wojny w Zatoce Perskiej. Mówi się, że tylko ta aplikacja Lispa zwróciła się za wszystkie amerykańskie inwestycje w badania nad sztuczną inteligencją w tamtym czasie.
  • SPIKE, aplikacja do planowania i tworzenia harmonogramów dla Kosmicznego Teleskopu Hubble'a. Używany również przez kilka innych dużych teleskopów.
  • CYC, jeden z największych napisanych systemów oprogramowania. Reprezentacja i rozumowanie w dziedzinie wiedzy zdroworozsądkowej człowieka.
  • METAL, jeden z pierwszych komercyjnych systemów tłumaczenia języka naturalnego.
  • Asystent Autoryzatora American Express, który sprawdza transakcje kartą kredytową.

Istnieją tysiące aplikacji w tych obszarach, które są napisane w Lispie. Często zdarza się, że potrzebują specjalnych zdolności w dziedzinie przetwarzania symbolicznego. Jeden implementuje specjalne języki, które oprócz Lispa mają specjalne interpretery / kompilatory w tych domenach. Lisp pozwala tworzyć reprezentacje danych symbolicznych i programów oraz może implementować wszelkiego rodzaju maszyny do manipulowania tymi wyrażeniami (formuły matematyczne, formuły logiczne, plany, ...).

(Zauważ, że wiele innych języków programowania ogólnego przeznaczenia jest również używanych w AI. Próbowałem odpowiedzieć, dlaczego szczególnie Lisp jest używany w AI.)


11
Tak, historycznie sztuczna inteligencja bardziej dotyczyła obliczeń symbolicznych niż czegokolwiek innego. „ Zima AI ” lat 80-tych była prawdopodobnie bardziej kryzysem symbolicznej sztucznej inteligencji - w tym czasie odrodziło się zainteresowanie metodami sub-symbolicznymi (sieci neuronowe, uczenie maszynowe itd.). Implementacje Lispa były zwykle dość słabe w obliczeniach numerycznych. Nie wiem, czy poprawili się na tym froncie.
MaD70

2
@ MaD70: zima AI w latach 80. dotyczyła ogólnie sztucznej inteligencji. Wojsko wstrzymało większość finansowania, a sztuczna inteligencja przeważnie zawiodła na rynku komercyjnym. Nawet rzeczy związane z siecią neuronową, które istniały w tamtym czasie. Jeśli postrzega się tę sztuczną inteligencję jako „nowatorskie metody tworzenia oprogramowania” (przy użyciu reguł, logiki, sieci neuronowych, zbierania śmieci itp.) - to również się nie powiodło. Wiele z tego nie jest dziś nawet powszechnie używane / lubiane.
Rainer Joswig

Moje wrażenie w tamtym czasie iz perspektywy czasu było / jest inne: pamiętam wyraźnie odrodzenie zainteresowania, zarówno badaniami, jak i rynkiem (były nawet dedykowane procesory neuronowe), metodami sub-symbolicznymi w drugiej połowie lat 80-tych / wczesne lata 90., po dekadach ostracyzmu (patrz moja odpowiedź, gdzie wspominam o wpływie krytyki perceptronów Minsky'ego i Paperta: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70

1
Symboliczna sztuczna inteligencja zawiodła, IMO, z powodu ówczesnego sprzętu (niewystarczająco wydajnego / taniego) ORAZ dlatego, że taki ostry kontrast między obozami symbolicznymi i sub-symbolicznymi wykluczał jakąkolwiek synergię. Wrt „Nawet powszechnie używane / lubiane dzisiaj”: Podejrzewam, że niektóre techniki opracowane w AI (w obu obozach) są znacznie bardziej w użyciu, niż mogłoby się wydawać (na szczęście nie są bardziej rozbudzone).
MaD70

Oto przykład: pod koniec lat 90. niektórzy znajomi pytali mnie o wykonalność projektu kontroli jakości w branży tekstylnej. Z góry wspomniałem o sieciach neuronowych jako obiecującym podejściu do takiego problemu dyskryminacji (zasadniczo klasyfikacja obrazów). Mając tylko taką sugestię, w ciągu kilku tygodni znaleźli już opracowane oprogramowanie, korzystając z sieci neuronowych, i nabyli prawa do jego dystrybucji - o wiele bardziej sensowne niż rozpoczęcie projektu obejmującego badania i rozwój.
MaD70

22

Jednym z powodów jest to, że pozwala ci rozszerzyć język o konstrukcje specyficzne dla twojej domeny, czyniąc go efektywnie językiem specyficznym dla domeny. Ta technika jest niesamowicie potężna, ponieważ pozwala na rozumowanie problemu, który rozwiązujesz, zamiast tasowania bitów.


Czy możesz podać przykład lub link do niego?
DuckMaestro

9
@DuckMaestro: W ciągu około 30 minut pracy z makrami w tym tygodniu zaimplementowałem błędną wersję programu SQL Select ad hoc. Działa to tak: (zapytanie SELECT * FROM dataset WHERE wyrażenie).
Paul Nathan

Osadzanie solvera algebry w Lisp youtube.com/… Osadzanie języka obwodu w Lisp youtube.com/… Osadzanie Lispa w Lisp youtube.com/… Osadzanie Prologu w Lisp - Po prostu obejrzyj całą serię
aoeu256


12

Domyślam się, że będąc językiem funkcjonalnym, nie rozróżnia kodu i danych. Wszystko, w tym definicje funkcji i wywołania funkcji, może być traktowane jako listy i modyfikowane jak każdy inny fragment danych.

Dzięki temu samokontroli, samomodyfikujący się kod można łatwo napisać.


10
Nie dlatego, że jest funkcjonalny. Prolog ma tę samą właściwość - wszystko jest „terminem”, a terminy to zarówno dane, jak i kod. (Prolog jest logicznym językiem programowania i jest również często używany w sztucznej inteligencji)
Hugh Allen

Fantazyjny termin na to nazywa się Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen

9

Jedną z możliwych odpowiedzi jest to, że sztuczna inteligencja to zbiór bardzo trudnych problemów, a Lisp to dobry język do rozwiązywania trudnych problemów, a nie tylko sztuczna inteligencja.

Dlaczego tak jest: makra, funkcje ogólne i bogata introspekcja pozwalają na zwięzły kod i łatwe wprowadzanie abstrakcji domeny - jest to język, który możesz uczynić potężniejszym. W przypadku wielu problemów jest to niepotrzebne i wiąże się to z własnymi kosztami, ale w przypadku innych problemów ta moc jest potrzebna, aby poczynić postępy.


7

Myślę, że myślenie o tym wyłącznie w kategoriach sztucznej inteligencji jest złe. Rzeczy takie jak AI-zima i komercyjne skutki zwykłego seplenienia rozpraszają, jeśli pytasz, dlaczego został użyty do sztucznej inteligencji, a nie dlaczego nie jest teraz często używany ...

W każdym razie myślę, że to dlatego, że większość kodu AI była zasadniczo kodem badawczym. Lisp to świetny język do programowania eksploracyjnego, do implementowania trudnych algorytmów, do samomodyfikacji i często modyfikowanego kodu. Innymi słowy, do badania kodu.

Obecnie używam lisp do niektórych moich badań (matematyka, przetwarzanie sygnałów), ponieważ jest bardziej elastyczny i potężniejszy niż większość języków, a jednocześnie generuje bardziej wydajny kod niż większość języków. Zwykle mogę uzyskać wydajność w zakresie +/- 2 szybkości, powiedzmy c ++, ale mogę implementować rzeczy znacznie szybciej i radzić sobie ze złożonością, która zajęłaby mi znacznie więcej czasu niż mam, gdybym używał c ++, java, c #.

To jednak odchodzi od tematu. Myślę, że kod AI został przez jakiś czas napisany głównie w zwykłym seplenieniu, ponieważ jest to potężne podejście do badania kodu. To nadal jest; ale w miarę jak algorytmy „Ja” stały się lepiej rozumiane i badane, części z nich były znacznie łatwiejsze do nauczenia i używania, więc na kursach licencjackich pojawiały się w językach z nutą roku. Stamtąd staje się kwestią tego, co ludzie już wiedzą, jakie biblioteki są dostępne i co działa dobrze w przypadku dużych grup.


6

Domyślam się, że dużym powodem była elastyczność list jako podstawowej struktury danych.

w tamtych czasach możliwość przekształcania ich we wszelkiego rodzaju obiekty złożone i nowe rzeczy, takie jak przekazywanie wiadomości i polimorfizm, uczyniły go językiem preferowanym; nie specjalnie dla AI, ale dla dużych, złożonych zadań. zwłaszcza gdy eksperymentowali z koncepcjami.


4

Myślę, że masz rację: Lisp był poręcznym narzędziem do hakowania rzeczy. Dzieje się tak, ponieważ nie rozróżniał zbytnio programu i danych. Pozwoliło to hakerom na bardzo łatwe manipulowanie funkcjami, podobnie jak danymi.

Ale lisp jest dość trudny do odczytania dla ludzi, z jego nawiasami klamrowymi i brakiem rozróżnienia między danymi a programem. Dzisiaj nie będę używał lisp do żadnego produkcyjnego kodu AI (a może nawet do tworzenia prototypów), ale zdecydowanie wolałbym Pythona do tworzenia skryptów.

Inną rzeczą do rozważenia są istniejące biblioteki / narzędzia w / związane z językiem. Nie jestem w stanie porównać bibliotek lisp z bibliotekami Pythona, ale wydaje mi się, że biblioteki i open source mają teraz znacznie większe znaczenie niż wcześniej.

Ta odpowiedź została zainspirowana następującym porównaniem między lispem a pythonem: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html


2
Osobiście uważam, że Lisp jest łatwiejszy do czytania niż większość języków i nauczyłem się go dopiero kilka tygodni temu. Python jest szczególnie czysty w porównaniu z większością języków, tak, ale jeśli porównasz seplenienie z czymś takim jak C ++, jest znacznie czystszy i łatwiejszy do odczytania. W każdym razie z mojego doświadczenia.
Zeusoflightning125

4

Pamiętam, że słyszałem, że Lisp jako język funkcjonalny był bardzo dobrym wyborem do implementacji algorytmów rekurencyjnych. Możliwość wyśledzenia drzewa i cofnięcia się jest niezbędna przy rozważaniu procesów decyzyjnych (przechodzenie) i wyniku końcowego (węzeł liścia).

Powiedziano mi to podczas kursu sztucznej inteligencji na uniwersytecie, na którym uczyliśmy się Lispa.


1
Makra w Lisp są potężniejsze niż cokolwiek innego, pozwalając ci zaimplementować OOP tylko w 50 liniach kodu Lisp, a REPL pozwala ci edytować twój program, gdy jest on nadal uruchomiony ... Tylko Lisp może łatwo edytować swój własny kod źródłowy ...
aoeu256

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.