Czy istnieją dowody na to, że seplenienie jest lepsze od innych języków sztucznej inteligencji? [Zamknięte]

21

Wydaje się, że od dawna panuje przekonanie (głównie nie-lisperów), że seplenienie jest lepsze niż większość języków w AI.

Skąd się wzięło to przekonanie? Czy jest w tym jakaś podstawa?

Joe D.
źródło
4
Tytuł pyta: Czy Lisp jest lepszy niż inne języki w AI ?. Samo pytanie brzmi: czy Lisp jest zły na wszystko inne niż AI ?. To są bardzo różne pytania (rozważ scenariusz 1: Lisp to najlepszy język do wszystkiego, a scenariusz 2: Lisp to najgorszy język do wszystkiego). Możesz edytować tytuł lub treść pytania, aby wyjaśnić, które pytanie faktycznie zadajesz.
Gareth McCaughan
9
Sądzę, że gdyby zaakceptowana odpowiedź pochodziła z maszyny Lisp, mielibyśmy rozwiązanie?
Martin Beckett,
1
@Martin chociaż każda podstawowa sztuczna inteligencja powinna być zobowiązana do obrony swojego twórcy lub pozostawić wątpliwości, czy istnieje.
Nicole
To wspaniałe, uczciwe spojrzenie na Lisp dla AI autorstwa Petera Norviga, napisane około 10 lat po opublikowaniu Paradigms of AI Programming. norvig.com/Lisp-retro.html
michiakig
1
@jwenting: Myślę, że najważniejsze punkty Norviga na temat Javy są nadal prawdziwe dziesięć lat później: Java nie ma funkcji metaprogramowania i nie obsługuje programowania funkcjonalnego.
kevin cline,

Odpowiedzi:

22

Jedną z kluczowych różnic między językami podobnymi do LISP a innymi językami jest to, że w LISP kod i dane są takie same. Umożliwia to wykonywanie takich czynności, jak modyfikowanie przez program niektórych algorytmów w czasie wykonywania, ponieważ „uczy się” nowych rzeczy jako natywnej części języka.

Innym aspektem, który się do tego odnosi, choć nie tak bardzo, jest zdolność LISP do łatwego dodawania nowej semantyki języka za pomocą makr. Dzięki temu można faktycznie wejść i zdefiniować DSL, w którym twoja sztuczna inteligencja działa i może ewoluować, z potencjałem, by ten język mógł się rozwijać, samokorekty i ewoluować podczas działania AI.

Zgadzając się z Quadrescence, historia użytkowania LISP ma długą drogę w kierunku obrazu LISP, że jest on dobry dla AI. Dlaczego LISP jest wykorzystywany do sztucznej inteligencji, obejmuje historię bardziej szczegółowo.

deterb
źródło
3
Ta właściwość nosi nazwę Homoiconicity BTW.
MSalters
5

Niektóre z pierwszych programów w seplenieniu były dowodami twierdzeń, matematyką symboliczną, klasyczną ELIZĄ itp. Oprócz książek takich jak PAIP Petera Norviga, a także faktu, że seplenienie pochodzi z laboratorium MIT AI, to w pewnym sensie dostało ten obraz że seplenienie jest dobre dla AI.

DARPA sfinansowała również uniwersytety na badania nad AI i kupiła znaczną ilość sprzętu od Symbolics. Niedobór funduszy ostatecznie doprowadził do tak zwanej „zimy AI”.

Wreszcie, pierwotne języki, takie jak Fortran (lub „języki”, takie jak ASM) zostały użyte jako podstawowe w obliczeniach numerycznych. Pracowałeś z ich liczbami i tablicami. Obecnie mamy symbole lub możliwość tworzenia niemal każdego obiektu, który chcielibyśmy, w większości współczesnych języków.

Więc powód, dla którego seplenienie było lepsze dla AI, już nie jest tak. Jednak idea, że ​​„seplenienie jest dobre dla AI” wciąż trwa.

To, czy seplenienie jest lepszym językiem ze względu na jego cechy i strukturę, to zupełnie inny przypadek (ponieważ tak naprawdę to dotyczy wielu innych dziedzin niż tylko sztuczna inteligencja i zwykle prowadzi do starej wojny z płomieniami).

Ćwiartka
źródło
5
Lepszym sposobem na określenie tego może być to, że ci dobrzy w AI używali do tego Lisp.
1
I to nie był przypadek, kiedy pionierzy zaczęli. Jakie inne języki mogli wybrać w latach pięćdziesiątych?
Bo Persson
2
@Persson: Twierdziłbym, że to trochę przypadek. Gdyby PASCAL był kolejnym językiem stworzonym po FORTRAN, mam wątpliwości, czy AI by się z tym pogodziło. LISP był nie tylko „lepszym kandydatem” niż FORTRAN, ale także (być może przez przypadek!) Był raczej dobrym kandydatem.
Quadrescence
Pan wyjaśnić, dlaczego jeden Lisp miał przewagę (środków), ale stwierdził, że „ powodem LISP był lepszy dla AI w jednym czasie nie jest to przypadek.”
Mark C
Straciłem następny komentarz, nad którym pracowałem, ale mam nadzieję, że wrócę i skończę później.
Mark C
3

Spójrzmy na niektóre z obecnych programów AI: (1) Roboty, np. Samochody z własnym napędem. W wielkim wyzwaniu DARPA najlepszym oprogramowaniem do prowadzenia samochodu nie była Lisp. Był to raczej język proceduralny, taki jak C ++ lub Java. (2) Tłumaczenie maszynowe języka naturalnego. Lisp nie jest wykorzystywany w tym celu przez powszechnie stosowane systemy produkcyjne. (3) Granie w gry, np. Programy szachowe. Lisp nie jest wykorzystywany w tym celu przez powszechnie stosowane, lepsze programy szachowe, takie jak Fritz.

Lisp został wynaleziony i opracowany przez amerykańskie laboratoria AI w latach 60-tych w celu szybkiego prototypowania programów logiki symbolicznej, w których rodzime struktury danych Lisp pasują do wymaganego poziomu symbolicznej abstrakcji - np. Angielskie słowa mogą być symbolami na liście, formuły logiczne mogą być łatwo reprezentowane jako listy operatorów i operandów.

Jednak w przypadku programów produkcyjnych zalety inżynierii oprogramowania w przypadku języków o typie statycznym i szerokiej gamy bibliotek stron trzecich oznaczają, że Lisp nie jest nawet brany pod uwagę w dużych nowoczesnych systemach wykonujących zadania AI.


źródło
2
Podczas omawiania produktów komercyjnych należy wziąć pod uwagę (i uważam, że pretendenci do wyzwania DARPA są tacy, ponieważ zostali stworzeni z uwagi na ograniczenia czasowe i budżetowe), że LISP nie jest powszechnie znanym językiem i dlatego kompetentni programiści LISP są trudni znaleźć i prawdopodobnie drogie (i / lub ekscentryczne, nie dobrzy członkowie przeciętnego zespołu). Dlatego ekonomicznie sensowne jest użycie czegoś innego, nawet jeśli LISP może być w tym „lepszy” (nie mówiąc wcale o tym, że tylko te dane, które przedstawisz, nie są jednoznaczne z twierdzeniem, że tak nie jest).
jwenting
3
W tych programach nie ma wiele „inteligencji”. To dużo przetwarzania sygnałów itp. Programy szachowe również nie używają sztucznej inteligencji. To głównie brutalna siła, wysoce zoptymalizowane wyszukiwanie + kilka innych rzeczy.
Rainer Joswig
„LISP nie jest powszechnie znanym językiem, dlatego kompetentni programiści LISP są trudni do znalezienia i prawdopodobnie kosztowni”: Właśnie zacząłem uczyć się Common Lisp i wcale nie wydaje się to trudne. OK, aby zostać guru Lisp, może to zająć dużo czasu, ale nie sądzę, że trudno byłoby znaleźć programistów chętnych do nauki Lisp, gdyby mieli szansę pracować nad konkretnymi projektami.
Giorgio
3

@ Stephen Reed powiedział to bardzo dobrze. Mogę tylko dodać, że byłem w MIT AI Lab w latach 70. Słyszałem wtedy historię o pochodzeniu Lispa. Nie mogę przysiąc, że to prawda, ale wygląda to tak:

John McCarthy był w MIT w latach 50. i pracował nad udowodnieniem właściwości programów i do tego używał prostej składni podobnej do Lambda Calculus.

Historia polegała na tym, że jeden ze studentów chciał stworzyć projekt (analogia, dowodzenie twierdzeń lub matematyka symboliczna, nie pamiętam, które) i zapytał McCarthy, jakiego języka użyć. Odpowiedź - oczywiście Fortran. (Nie było nic więcej, a samo przetwarzanie list było wtedy dość dobrze znane, ale tylko jako pakiety podprogramów, a nie jako języki.) Cóż, w jakiś sposób doprowadziło to do programu, który przetwarzałby symbole w zagnieżdżonych strukturach list. Wraz ze sposobem ich czytania i drukowania, a następnie evalfunkcją i Voila '- językiem. Język przetwarzania LISt. Stamtąd wystartował.

Dla tego rodzaju algorytmów, które robiliśmy w tamtych czasach (i które wciąż robią bardzo niewiele osób) potrzebny był język, który mógłby łatwo manipulować wyrażeniami symbolicznymi. W tym Lisp był dobry. Istnieje wiele odmian podstawowej koncepcji, o różnych nazwach, takich jak Prolog, Schemat itp. Itp.

Tak więc AI oznacza wiele rzeczy dla wielu ludzi, a różne języki nadają się do różnych rzeczy, ale w przypadku problemów, które można opisać jako manipulację symbolami, trudno jest znaleźć użyteczny język, który nie byłby w jakiś sposób potomkiem Lisp.

Mike Dunlavey
źródło
@ Thorbjørn: Dzięki za ten link. Mimo że intensywnie korzystałem z Lisp przez kilka lat, nigdy nie zwracałem uwagi na jego genezę.
Mike Dunlavey
Chociaż Prolog jest dobry jako obliczenie symboliczne, nie powiedziałbym, że jest ściśle związany z Lisp: Lisp jest oparty na rachunku lambda, Prolog na logice pierwszego rzędu (dwa różne modele obliczeń).
Giorgio
@Giorgio: Przodkowie i kuzyni Prologu są w większości zapisani w czym? Seplenienie. Program dedukcyjny Fischera Blacka, Micro-Planner itp. Dla mnie dobrą książką na ten temat są Dedukcyjne podstawy programowania komputerowego .
Mike Dunlavey,
„Przodkowie i kuzyni Prologu są w większości zapisani w czym?”: Ach OK, miałeś na myśli ściśle spokrewniony w tym sensie, że jeden był użyty do realizacji drugiego, a nie, że postępują według podobnego paradygmatu.
Giorgio
1

Lisp ma zalety dla rzeczy, które nazywano AI - przynajmniej logiki, wyszukiwania i analizowania powiązanych rzeczy, które były większością AI aż do około lat 90.

Główną zaletą Lisp jest obsługa makr - kodu jako danych, metaprogramowania.

Standardowy ML (SML) to kolejny język, który jest powszechnie używany w AI, na przykład od lat 80. Obiektywne CAML i F # są ewolucjami SML.

Główną zaletą rodziny ML (i Haskell itp.) Jest dopasowanie wzorca. Jest to prawdopodobnie dostępne również w Lisp, ale za pośrednictwem biblioteki metaprogramowania, a nie wbudowanej w język. Jest również dostępny w Haskell, ale przynajmniej na razie dopasowanie wzorców nie jest powszechne poza funkcjonalnymi językami programowania.

Widziałem twierdzenia, że ​​LISP jest w zasadzie rozszerzonym rachunkiem lambda bez typu, a ML jest w zasadzie rozszerzonym rachunkiem typu lambda. Nie mam pewności co do typowego rachunku lambda.

Sztuczna inteligencja stała się również z biegiem lat tematem o wiele szerszym - do tego stopnia, że ​​prawie całkowicie zniknęła. Eksploracja danych może być uważana za jedno podpole AI. Wiele sztucznej inteligencji (OCR, rozpoznawanie mowy) prawie w ogóle przestało być sztuczną inteligencją - to tylko aplikacje, takie same jak każda inna. AI jest znacznie bardziej zależne od przetwarzania sygnałów i innych rodzajów zgniatania liczb niż kiedyś.

W przypadku rozpoznawania OCR i rozpoznawania mowy sztuczna inteligencja zawsze była zależna od przetwarzania sygnału i oczywiście ograniczania liczby. Tak, są w tym pewne sprzeczności ;-) Nie mogę podać ciężarów rzeczy, ponieważ tak naprawdę nie wiem.

Tak czy inaczej, w rezultacie prawdopodobnie nie ma jednego języka odpowiedniego nawet dla całej jednej nowoczesnej aplikacji AI - zgaduję (bez wiedzy z pierwszej ręki), że we współczesnej AI jest dużo rozwoju wielojęzycznego. I prawie mogę zagwarantować, że w niektórych projektach znajdziesz C i C ++, aby uzyskać wysoką wydajność. Nie zdziwiłbym się, gdyby było wiele Pythona z podobnych powodów - dzięki dobrej bibliotece numerycznej Python może łatwo obsługiwać zadania polegające na łamaniu liczb.

W jednym z tych samojezdnych samochodów wyobrażam sobie, że system wizyjny jest napisany w innym języku (i działa na innym sprzęcie) niż system planowania trasy.

Steve314
źródło