¿Por qué es Lisp un lenguaje tan bueno para la IA?

30

He escuchado antes de científicos informáticos y de investigadores en el área de IA que Lisp es un buen lenguaje para la investigación y el desarrollo en inteligencia artificial. ¿Esto todavía se aplica, con la proliferación de redes neuronales y el aprendizaje profundo? ¿Cuál fue su razonamiento para esto? ¿En qué idiomas están integrados actualmente los sistemas actuales de aprendizaje profundo?

J. Antonio Perez
fuente

Respuestas:

30

Primero, supongo que te refieres a Common Lisp (que es una especificación de lenguaje estándar, mira su HyperSpec ) con implementaciones eficientes (a la SBCL ). Pero algunas implementaciones recientes de Scheme también podrían ser relevantes (con buenas implementaciones como Bigloo o Chicken / Scheme ). Tanto Common Lisp como Scheme (e incluso Clojure ) son de la misma familia Lisp. Y como lenguaje de script que maneja aplicaciones de big data o aprendizaje automático, Guile podría ser un reemplazo útil para Python y también es un dialecto de Lisp. Por cierto, recomiendo leer SICP, una excelente introducción a la programación usando Scheme.

Entonces, Common Lisp (y otros dialectos de Lisp) es ideal para la IA simbólica. Sin embargo, muchas bibliotecas recientes de aprendizaje automático están codificadas en lenguajes más convencionales, por ejemplo, TensorFlow está codificado en C ++ y Python. Las bibliotecas de aprendizaje profundo están codificadas principalmente en C ++ o Python o C (y a veces usan OpenCL o Cuda para las partes de computación de la GPU).

Common Lisp es ideal para la inteligencia artificial simbólica porque:

  • tiene implementaciones muy buenas (por ejemplo , SBCL , que compila en código máquina cada expresión dada a REPL )
  • es homoicónico , por lo que es fácil manejar programas como datos, en particular es fácil generar [sub-] programas, es decir, utilizar técnicas de metaprogramación .
  • Tiene un bucle de lectura-evaluación-impresión para facilitar la programación interactiva
  • proporciona una macro maquinaria muy poderosa (esencialmente, usted define su propio sublenguaje específico de dominio para su problema), mucho más poderoso que en otros lenguajes como C.
  • exige un recolector de basura (incluso el código puede ser recolectado)
  • proporciona muchos tipos de datos abstractos de contenedor y puede manejar fácilmente símbolos.
  • puede codificar tanto el código de alto nivel (de tipo dinámico) como el de bajo nivel (de tipo más o menos inicial), mediante anotaciones apropiadas.

Sin embargo, la mayoría de las bibliotecas de aprendizaje automático y redes neuronales no están codificadas en CL. Tenga en cuenta que ni la red neuronal ni el aprendizaje profundo están en el campo simbólico de la inteligencia artificial. Ver también esta pregunta .

Varios sistemas de IA simbólicos como Eurisko o CyC se han desarrollado en CL (en realidad, en algunos DSL creados por encima de CL).

Tenga en cuenta que el lenguaje de programación puede no ser muy importante. En el tema de investigación de Inteligencia General Artificial , algunas personas trabajan en la idea de un sistema de IA que generaría todo su propio código (por lo que lo están diseñando con un enfoque de arranque ). Luego, el código generado por dicho sistema puede incluso generarse en lenguajes de programación de bajo nivel como C. Ver el blog de J.Pitrat

Basile Starynkevitch
fuente
1
Me gustaría agregar aquí, que tensorflow y theano se basan en gráficos computacionales, que en realidad es una programación simbólica, pero dentro de un lenguaje imperativo.
Maxim
@Basile: Comparta el tutorial o referencia de Common LISP
Ved Prakash
@VedPrakash: Me gustaría contactarlo por correo electrónico. El mío es [email protected]; Soy demasiado viejo para usar Twitter
Basile Starynkevitch
15

David Nolen (colaborador de Clojure y ClojureScript ; creador de Core Logic, un puerto de miniKanren) en una charla llamada LISP porque demasiado poderoso declaró que en sus días LISP estaba décadas por delante de otros lenguajes de programación. Hay varias razones por las cuales el idioma no pudo mantener su nombre.

Este artículo destaca algunos puntos clave por los que LISP es bueno para la IA

  • Fácil de definir un nuevo lenguaje y manipular información compleja.
  • Flexibilidad total en la definición y manipulación de programas, así como de datos.
  • Rápido, ya que el programa es conciso junto con detalles de bajo nivel.
  • Buen entorno de programación (depuración, compiladores incrementales, editores).

La mayoría de mis amigos en este campo usualmente usan Matlab para Redes Neuronales Artificiales y Aprendizaje Automático. Sin embargo, oculta los detalles de bajo nivel. Si solo está buscando resultados y no cómo llegar allí, entonces Matlab será bueno. Pero si quieres aprender incluso cosas detalladas de bajo nivel, te sugiero que pases por LISP al menos una vez.
Es posible que el lenguaje no sea tan importante si comprende varios algoritmos y técnicas de IA. Le sugeriré que lea "Inteligencia artificial: un enfoque moderno (por Stuard J. Russell y Peter Norvig" . Actualmente estoy leyendo este libro, y es un libro muy bueno.

Ugnes
fuente
4

La IA es un campo amplio que va mucho más allá del aprendizaje automático, el aprendizaje profundo, las redes neuronales, etc. En algunos de estos campos, el lenguaje de programación no importa en absoluto (excepto por cuestiones de velocidad), por lo que LISP ciertamente no sería un tema allí .

En la búsqueda o la planificación de IA, por ejemplo, los lenguajes estándar como C ++ y Java son a menudo la primera opción, porque son rápidos (en particular C ++) y porque muchos proyectos de software como los sistemas de planificación son de código abierto, por lo que es importante usar un lenguaje estándar ( o al menos sabio en caso de que uno aprecie comentarios o extensiones). Solo conozco un único planificador que está escrito en LISP. Solo para dar alguna impresión sobre el papel de la elección del lenguaje de programación en este campo de la IA, daré una lista de algunos de los planificadores más conocidos y, por lo tanto, más importantes:

Fast-Downward:
descripción: la
URL del sistema de planificación clásica probablemente más conocida : http://www.fast-downward.org/
idioma: C ++, las partes (preprocesamiento) están en Python

FF:
descripción: junto con Fast-Downward, el sistema de planificación clásico que todos conocen
URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html
idioma: C

VHPOP:
descripción: uno de los sistemas de planificación de enlaces causales de orden parcial (POCL) más conocidos
URL: http://www.tempastic.org/vhpop/
lenguaje: C ++

SHOP y SHOP2:
descripción: la
URL del sistema de planificación HTN (jerárquica) más conocida : https://www.cs.umd.edu/projects/shop/
language: hay dos versiones de SHOP y SHOP2. Las versiones originales han sido escritas en LISP. Las versiones más recientes (llamadas JSHOP y JSHOP2) se han escrito en Java. Pyshop es otra variante de SHOP escrita en Python.

PANDA:
descripción: otra
URL de sistema de planificación HTN (e híbrida) bien conocida : http://www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
language: there Hay diferentes versiones del planificador: PANDA1 y PANDA2 están escritos en Java, PANDA3 está escrito principalmente en Java, con algunas partes en Scala.

Estos fueron solo algunos de los sistemas de planificación más conocidos que se me ocurrieron. Los más recientes se pueden recuperar de los Concursos Internacionales de Planificación (IPC, http://www.icaps-conference.org/index.php/Main/Competitions ), que tienen lugar cada dos años. Los códigos de los planificadores de la competencia se publican de código abierto (durante algunos años).

Prof.Chaos
fuente