Pourquoi Lisp est-il un si bon langage pour l'IA?


30

J'ai entendu auparavant des informaticiens et des chercheurs dans le domaine de l'IA que Lisp est un bon langage pour la recherche et le développement en intelligence artificielle. Est-ce que cela s'applique toujours, avec la prolifération des réseaux de neurones et l'apprentissage en profondeur? Quel était leur raisonnement à ce sujet? Dans quelles langues les systèmes actuels d'apprentissage en profondeur sont-ils actuellement intégrés?

Réponses:


30

Tout d'abord, je suppose que vous voulez dire Common Lisp (qui est une spécification de langage standard, voir son HyperSpec ) avec des implémentations efficaces (à la SBCL ). Mais certaines implémentations récentes de Scheme pourraient également être pertinentes (avec de bonnes implémentations telles que Bigloo ou Chicken / Scheme ). Common Lisp et Scheme (et même Clojure ) appartiennent à la même famille Lisp. Et en tant que langage de script pilotant des Big Data ou des applications d'apprentissage automatique, Guile pourrait être un remplacement utile de Python et est également un dialecte Lisp. BTW, je recommande de lire SICP, une excellente introduction à la programmation à l'aide de Scheme.

Ensuite, le Common Lisp (et d'autres dialectes du Lisp) est idéal pour l'IA symbolique. Cependant, de nombreuses bibliothèques d'apprentissage automatique récentes sont codées dans des langages plus courants, par exemple TensorFlow est codé en C ++ et Python. Les bibliothèques d'apprentissage en profondeur sont principalement codées en C ++ ou Python ou C (et utilisent parfois OpenCL ou Cuda pour les parties informatiques GPU).

Le Lisp commun est idéal pour l'intelligence artificielle symbolique car:

  • il a de très bonnes implémentations (par exemple SBCL , qui compile pour coder automatiquement chaque expression donnée au REPL )
  • il est homoiconique , il est donc facile de traiter les programmes comme des données, en particulier il est facile de générer des [sous-] programmes, c'est -à-dire des techniques de méta-programmation .
  • il a une boucle Read-Eval-Print pour faciliter la programmation interactive
  • il fournit une macro- machine très puissante (essentiellement, vous définissez votre propre sous-langue spécifique au domaine pour votre problème), beaucoup plus puissante que dans d'autres langages comme C.
  • il oblige un ramasse-miettes (même le code peut être ramassé)
  • il fournit de nombreux types de données abstraites de conteneur et peut facilement gérer les symboles.
  • vous pouvez coder du code de haut niveau (typé dynamiquement) et de bas niveau (typé de façon plus ou moins initiale), par le biais d'annotations appropriées.

Cependant, la plupart des bibliothèques d'apprentissage automatique et de réseau de neurones ne sont pas codées en CL. Remarquez que ni le réseau neuronal ni l'apprentissage profond ne se trouvent dans le domaine de l'intelligence artificielle symbolique. Voir aussi cette question .

Plusieurs systèmes d'IA symboliques comme Eurisko ou CyC ont été développés en CL (en fait, dans certains DSL construits au-dessus de CL).

Notez que le langage de programmation peut ne pas être très important. Dans le sujet de recherche Intelligence artificielle générale , certaines personnes travaillent sur l'idée d'un système d' intelligence artificielle qui générerait tout son propre code (il en va de même pour le concevoir avec une approche d' amorçage ). Ensuite, le code généré par un tel système peut même être généré dans des langages de programmation de bas niveau comme C. Voir le blog de J.Pitrat


1
Je voudrais ajouter ici que tensorflow et theano sont basés sur des graphiques de calcul, qui sont en fait de la programmation symbolique, mais dans un langage impératif.
Maxim

@Basile: veuillez partager le tutoriel LISP commun ou la référence
Ved Prakash

@VedPrakash: Je voudrais vous contacter par e-mail. Le mien est basile@starynkevitch.net; Je suis trop vieux pour utiliser Twitter
Basile Starynkevitch

15

David Nolen (contributeur à Clojure et ClojureScript ; créateur de Core Logic un portage de miniKanren) dans une conférence intitulée LISP comme trop puissant a déclaré qu'à l'époque, LISP avait des décennies d'avance sur les autres langages de programmation. Il y a plusieurs raisons pour lesquelles la langue n'a pas pu conserver son nom.

Cet article souligne certains points clés pour lesquels LISP est bon pour l'IA

  • Facile à définir une nouvelle langue et à manipuler des informations complexes.
  • Flexibilité totale dans la définition et la manipulation des programmes ainsi que des données.
  • Rapide, car le programme est concis avec des détails de bas niveau.
  • Bon environnement de programmation (débogage, compilateurs incrémentaux, éditeurs).

La plupart de mes amis dans ce domaine utilisent généralement Matlab pour les réseaux de neurones artificiels et l'apprentissage automatique. Il cache cependant les détails de bas niveau. Si vous ne cherchez que des résultats et pas comment vous y arrivez, alors Matlab sera bon. Mais si vous voulez apprendre des choses détaillées même de bas niveau, alors je vous suggère de passer par LISP au moins une fois.
Le langage peut ne pas être si important si vous avez la compréhension de divers algorithmes et techniques d'IA. Je vous propose de lire "Intelligence artificielle: une approche moderne (par Stuard J. Russell et Peter Norvig" . Je lis actuellement ce livre, et c'est un très bon livre.


4

L'IA est un vaste domaine qui va bien au-delà de l'apprentissage automatique, de l'apprentissage profond, des réseaux de neurones, etc. Dans certains de ces domaines, le langage de programmation n'a pas d'importance du tout (sauf pour les problèmes de vitesse), donc LISP ne serait certainement pas un sujet là-bas .

Dans la planification de la recherche ou de l'IA, par exemple, les langages standard comme C ++ et Java sont souvent le premier choix, car ils sont rapides (en particulier C ++) et parce que de nombreux projets logiciels comme les systèmes de planification sont open source, il est donc important d'utiliser un langage standard ( ou au moins sage si l'on apprécie les commentaires ou les extensions). Je ne connais qu'un seul planificateur écrit en LISP. Juste pour donner une idée du rôle du choix du langage de programmation dans ce domaine de l'IA, je vais donner une liste de certains des planificateurs les plus connus et donc les plus importants:

Fast-Downward:
description: l'
URL du système de planification classique probablement la plus connue : http://www.fast-downward.org/
langage: C ++, les parties (prétraitement) sont en Python

FF:
description: avec Fast-Downward le système de planification classique que tout le monde connaît
URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html
langue: C

VHPOP:
description: l' un des systèmes de planification de liens causaux d'ordre partiel (POCL) les plus connus
URL: http://www.tempastic.org/vhpop/
langage: C ++

SHOP et SHOP2:
description: l'
URL du système de planification HTN (hiérarchique) le plus connu : https://www.cs.umd.edu/projects/shop/
langue: il existe deux versions de SHOP et SHOP2. Les versions originales ont été écrites en LISP. Des versions plus récentes (appelées JSHOP et JSHOP2) ont été écrites en Java. Pyshop est une autre variante de SHOP écrite en Python.

PANDA:
description: autre système de planification HTN (et hybride) bien connu
URL: http://www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
langue: là sont différentes versions du planificateur: PANDA1 et PANDA2 sont écrits en Java, PANDA3 est écrit principalement en Java avec certaines parties étant en Scala.

Ce ne sont là que quelques-uns des systèmes de planification les plus connus qui me viennent à l'esprit. Les plus récents peuvent être consultés dans les concours internationaux de planification (IPC, http://www.icaps-conference.org/index.php/Main/Competitions ), qui ont lieu tous les deux ans. Les codes des planificateurs concurrents sont publiés en open source (pour quelques années).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.