Perché Lisp è usato per l'IA? [chiuso]


185

Sto imparando Lisp ad espandere i miei orizzonti perché ho sentito che è usato nella programmazione AI. Dopo aver fatto un po 'di esplorazione, devo ancora trovare esempi di intelligenza artificiale o qualsiasi altra cosa nella lingua che la renderebbe più incline verso di essa.

Lisp è stato usato in passato perché era disponibile o c'è qualcosa che mi manca?


5
> ... Per favore, non dare per scontato che Lisp sia utile solo per Animazione e Grafica,> AI, Bioinformatica, B2B ed E-Commerce, Data mining, EDA / Semiconduttori> Applicazioni, Sistemi esperti, Finanza, Agenti intelligenti, Conoscenza> Gestione, CAD meccanico , Modellazione e simulazione, Linguaggio naturale,> Ottimizzazione, Ricerca, Analisi dei rischi, Pianificazione, Telecomunicazioni e Web> Authoring solo perché queste sono le uniche cose a cui sono capitati> elencare. - Kent Pitman
Avi,

2
Non pensavo che Lisp fosse utile solo per l'IA, mi chiedo solo perché sia ​​usato per questo.
Cristián Romo,

Vorrei riformulare la domanda come "quali caratteristiche di una lingua sono necessarie per l'intelligenza artificiale intensa?" Questa è una domanda valida e utile, e il risultato sarà che solo Lisp Forth e l'assemblatore hanno quello che serve per fare una dura IA.
Albert van der Horst,

Risposte:


126

Lisp era utilizzato nell'intelligenza artificiale fino alla fine degli anni '80. Negli anni '80, tuttavia, Common Lisp fu venduto al mondo degli affari come "linguaggio AI"; il contraccolpo ha costretto la maggior parte dei programmatori AI a C ++ per alcuni anni. In questi giorni, i prototipi di solito sono scritti in un linguaggio dinamico più giovane (Perl, Python, Ruby, ecc.) E le implementazioni di ricerche di successo sono di solito in C o C ++ (a volte Java).

Se sei curioso degli anni '70 ... beh, non ero lì. Ma penso che Lisp abbia avuto successo nella ricerca sull'IA per tre motivi (in ordine di importanza):

  1. Lisp è un eccellente strumento di prototipazione. È stato il migliore per molto tempo. Lisp è ancora bravo ad affrontare un problema che non sai ancora come risolvere. Questa descrizione caratterizza perfettamente l'IA.
  2. Lisp supporta bene la programmazione simbolica. Anche la vecchia IA era simbolica. È stato anche unico in questo senso per molto tempo.
  3. Lisp è molto potente. La distinzione codice / dati è più debole, quindi sembra più estendibile rispetto ad altre lingue perché le funzioni e le macro sembrano elementi incorporati.

Non ho il vecchio libro AI di Peter Norvig , ma dovrebbe essere un buon modo per imparare a programmare algoritmi AI in Lisp.

Disclaimer: sono uno studente laureato in linguistica computazionale. Conosco il sottocampo dell'elaborazione del linguaggio naturale molto meglio degli altri campi. Forse Lisp è usato di più in altri sottocampi.


33
Lisp è sicuramente ancora vivo e vegeto nel mondo di Machine learning / ILP
HasaniH,

13
Ho tenuto un corso di laurea in AI in C. Ho avuto un corso di laurea in AI insegnato dal libro di Norvig. Il libro in C si è concentrato su algoritmi e strutture di intelligenza artificiale. Il libro di Norvig sembrava: "impariamo LISP mentre leggiamo la storia dell'IA". Secondo me, un completo perditempo.
San Jacinto,

7
Uno dei motivi per cui tutti sembrano mancare è che John McCarthy ha scritto Lisp ed è stato un informatico molto influente, in particolare nel campo dell'IA. Naturalmente, molto del suo lavoro è stato implementato in Lisp, e quindi Lisp ha guadagnato un punto d'appoggio.
cha0site

2
Common Lisp non è mai stato pensato per essere il linguaggio AI , è stato creato per essere utilizzato nel settore. Per la ricerca, viene solitamente utilizzato lo schema. E mai, mai giudicare una lingua dalla sua età - semplicemente non è proporzionale alla freddezza e viceversa. C è vecchia ma bella, quindi perché conta l'età di Lisp?
Luka Ramishvili,

1
Io non è preciso a era che Lisp STATO utilizzato per AI fino alla fine del 1980. Nel 2016 il MIT rimane un'istituzione abbastanza rinomata nel campo dell'IA. Il libro di testo raccomandato per il corso di robotica agli studenti del MIT è Artificial Intelligence by Patrick Henry Winston. Alla seconda edizione i capitoli di programmazione di quel libro si ramificarono nel loro libro sincronizzato Lisp. Come suggerisce il nome, la programmazione è interamente in Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

61

Lisp è usato per l'IA perché supporta l'implementazione di software che calcola molto bene i simboli. Simboli, espressioni simboliche e calcolo con quelli sono al centro di Lisp.

Le aree tipiche dell'intelligenza artificiale per il calcolo con simboli erano / sono: algebra informatica, dimostrazione di teoremi, sistemi di pianificazione, diagnosi, sistemi di riscrittura, rappresentazione e ragionamento delle conoscenze, linguaggi logici, traduzione automatica, sistemi esperti e altro.

Non sorprende quindi che molte famose applicazioni AI in questi domini siano state scritte in Lisp:

  • Macsyma è il primo sistema di algebra per computer di grandi dimensioni.
  • ACL2 come dimostratore di teoremi ampiamente usato, ad esempio usato da AMD.
  • DART come pianificatore logistico utilizzato durante la prima guerra del Golfo dai militari statunitensi. Si dice che questa sola applicazione Lisp abbia ripagato tutti gli investimenti statunitensi nella ricerca sull'IA in quel momento.
  • SPIKE, l'applicazione di pianificazione e programmazione per il telescopio spaziale Hubble. Utilizzato anche da molti altri grandi telescopi.
  • CYC, uno dei più grandi sistemi software scritti. Rappresentazione e ragionamento nel dominio della conoscenza del senso comune umano.
  • METAL, uno dei primi sistemi di traduzione in linguaggio naturale utilizzati commercialmente.
  • American Express 'Authorizer's Assistant, che controlla le transazioni con carta di credito.

Ci sono migliaia di applicazioni in queste aree che sono scritte in Lisp. Molto comune per quelli è che hanno bisogno di capacità speciali nell'area dell'elaborazione simbolica. Uno implementa linguaggi speciali che hanno interpreti / compilatori speciali in questi domini su Lisp. Lisp consente di creare rappresentazioni di dati e programmi simbolici e può implementare tutti i tipi di macchinari per manipolare queste espressioni (formule matematiche, formule logiche, piani, ...).

(Si noti che anche molti altri linguaggi di programmazione per scopi generici sono utilizzati nell'intelligenza artificiale. Ho cercato di rispondere al motivo per cui soprattutto Lisp è utilizzato nell'intelligenza artificiale.)


10
Sì, storicamente l'IA riguardava più il calcolo simbolico che altro. L '" inverno dell'IA " negli anni '80 fu probabilmente più una crisi dell'IA simbolica - a quel tempo vi fu una rinascita di interesse per i metodi sub-simbolici (reti neurali, apprendimento automatico e così via). Le implementazioni di Lisp erano generalmente piuttosto deboli nel calcolo numerico. Non so se sono migliorati su questo fronte.
MaD70,

2
@ MaD70: l'inverno dell'IA negli anni '80 riguardava l'IA in generale. I militari hanno fermato gran parte dei finanziamenti e l'IA ha fallito per lo più nel mercato commerciale. Anche le cose della rete neurale che esistevano in quel momento. Se uno vede quell'intelligenza artificiale come "nuovi metodi di sviluppo del software" (usando regole, logica, reti neurali, garbage collection, ...) - anche questo ha fallito. Gran parte di questo non è nemmeno ampiamente usato / apprezzato oggi.
Rainer Joswig,

La mia impressione all'epoca e in retrospettiva era / è diversa: ricordo chiaramente la rinascita di interesse, sia nella ricerca che nel mercato (c'erano persino processori neurali dedicati), nei metodi sub-simbolici nella seconda metà degli anni '80 / primi anni '90, dopo decenni di ostracismo (vedi la mia risposta, in cui menziono l'influenza della critica di Minsky e Papert sui percetrons: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70,

1
L'IA simbolica fallì, IMO, a causa dell'hardware dell'epoca (non abbastanza potente / economico) E perché un contrasto così aspro tra campi simbolici e sub-simbolici precludeva qualsiasi sinergia. Scritto "anche oggi ampiamente usato / apprezzato": sospetto che alcune delle tecniche sviluppate nell'intelligenza artificiale (in entrambi i campi) siano molto più in uso di quanto si possa pensare (non più pubblicizzato, per fortuna).
MaD70,

Solo un esempio: alla fine degli anni '90 alcuni dei miei conoscenti mi hanno chiesto della fattibilità di un progetto per il controllo della qualità in campo tessile. Dalla parte superiore della mia testa ho menzionato le reti neurali come un approccio promettente per tale problema di discriminazione (essenzialmente la classificazione delle immagini). Con solo questo suggerimento, in alcune settimane hanno trovato un software già sviluppato, usando reti neurali, e hanno acquisito i suoi diritti di distribuzione - molto più sensato che intraprendere un progetto di ricerca e sviluppo.
MaD70,

22

Uno dei motivi è che ti consente di estendere la lingua con costrutti specifici per il tuo dominio, rendendolo, in effetti, una lingua specifica del dominio. Questa tecnica è incredibilmente potente in quanto ti consente di ragionare sul problema che stai risolvendo, piuttosto che di mescolare i bit.


Puoi fornire o collegare un esempio di questo?
DuckMaestro,

9
@DuckMaestro: in circa 30 minuti di lavoro macro questa settimana, ho implementato una versione buggy ad hoc di SQL Select. Va così: (query SELECT * FROM set di dati DOVE expr).
Paul Nathan,

Incorporare un risolutore di algebra in Lisp youtube.com/… Incorporare un linguaggio circuitale in Lisp youtube.com/… Incorporare Lisp in Lisp youtube.com/… Incorporare Prolog in Lisp - Basta guardare l'intera serie
aoeu256


12

La mia ipotesi è sempre stata che, essendo un linguaggio funzionale, non fa distinzione tra codice e dati. Tutto, comprese le definizioni delle funzioni e le chiamate delle funzioni, possono essere trattati come elenchi e modificati come qualsiasi altro dato.

Quindi il codice auto-ispezionato e auto-modificante potrebbe essere scritto facilmente.


10
Questo non è perché è funzionale. Prolog ha la stessa proprietà: tutto è un "termine" e i termini sono sia dati che codice. (Prolog è un linguaggio di programmazione logica e molto utilizzato anche per l'IA)
Hugh Allen

Il termine elegante per questo si chiama omoiconicità - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen

9

Una possibile risposta è che l'IA è una raccolta di problemi molto difficili, e Lisp è un buon linguaggio per risolvere problemi difficili, non solo l'IA.

Perché: macro, funzioni generiche e ricca introspezione consentono un codice conciso e una facile introduzione delle astrazioni del dominio: è un linguaggio che puoi rendere più potente. Per molti problemi non è necessario e ha i suoi costi, ma per altri problemi è necessaria la potenza per fare progressi.


7

Penso che sia sbagliato pensarci solo in termini di IA. Cose come l'inverno AI e gli effetti commerciali sul lisp comune sono fonte di distrazione se ti stai chiedendo perché è stato utilizzato per l'IA, non perché non sia spesso usato ora ...

Comunque, penso sia perché la maggior parte del codice AI era essenzialmente un codice di ricerca. Lisp è un linguaggio eccezionale per la programmazione esplorativa, per l'implementazione di algoritmi difficili, per il codice auto-modificante e spesso modificato. In altre parole, per il codice di ricerca.

Uso lisp oggi per alcuni dei miei codici di ricerca (matematica, elaborazione del segnale) perché è più flessibile e potente della maggior parte delle lingue e genera codice più efficiente della maggior parte delle lingue. In genere riesco a ottenere prestazioni entro un fattore di +/- 2 rispetto alla velocità c ++, ma posso implementare le cose molto più velocemente e gestire la complessità che mi richiederebbe molto più tempo rispetto a me se usassi c ++, java, c #.

Questo è vagare fuori tema però. Penso che il codice AI sia stato scritto principalmente in lisp comune per un po 'perché è un approccio potente al codice di ricerca. Lo è ancora; ma man mano che gli algoritmi `` AI '' venivano meglio compresi ed esplorati, parti di essi erano molto più facili da insegnare e usare, così si presentavano in lingue dell'anno in corsi universitari. Da lì, diventa un problema di ciò che le persone già sanno, quali librerie sono disponibili e cosa funziona bene per gruppi numerosi.


6

Immagino che un grande motivo sia la flessibilità degli elenchi come struttura di dati di base.

all'epoca, essendo in grado di trasformarli in tutti i tipi di oggetti compositi e di cose nuove come passaggi di messaggi e polimorfismo, ne fecero il linguaggio di scelta; non specificamente per l'IA, ma per compiti grandi, complessi. specialmente quando stavano sperimentando concetti.


4

Penso che tu abbia ragione: Lisp era uno strumento utile per hackerare le cose. Questo perché non distingueva molto tra programma e dati. Ciò ha permesso agli hacker di manipolare le funzioni molto facilmente, proprio come i dati.

Ma il lisp è abbastanza difficile da leggere per gli umani, con le sue parentesi graffe e la non distinzione tra dati e programma. Oggi non userò lisp per nessun codice AI di produzione (o forse nemmeno per la prototipazione), ma preferirei di gran lunga Python per gli script.

Un'altra cosa da considerare sono le librerie / strumenti esistenti in / relativi alla lingua. Non sono in grado di confrontare le librerie lisp con le librerie Python, ma immagino che le librerie e l'open source contino molto di più ora rispetto a prima.

Questa risposta è stata ispirata dal seguente confronto tra lisp e python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html


2
Personalmente trovo Lisp più facile da leggere rispetto alla maggior parte delle lingue e l'ho imparato solo poche settimane fa. Python è particolarmente pulito rispetto alla maggior parte delle lingue, sì, ma se si confronta lisp con qualcosa come C ++ è molto più pulito e più facile da leggere. Nella mia esperienza comunque.
Zeusoflightning125,

4

Ricordo di aver sentito che, essendo un linguaggio funzionale, Lisp era un'ottima scelta per implementare algoritmi ricorsivi. Essere in grado di rintracciare un albero e tornare indietro è essenziale quando si considerano i processi decisionali (attraversamento) e il risultato finale (nodo foglia).

Mi è stato detto durante un corso di AI all'università dove abbiamo studiato Lisp.


1
Le macro in Lisp sono più potenti di ogni altra cosa, permettendoti di implementare OOP in sole 50 righe di codice Lisp e REPL ti consente di modificare il tuo programma mentre è ancora in esecuzione ... Solo Lisp può modificare facilmente il proprio codice sorgente ...
aoeu256

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.