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?
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?
Odpowiedzi:
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.
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).
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.
@ 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 eval
funkcją 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.
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.