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
[email protected]
; Soy demasiado viejo para usar TwitterDavid 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
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.
fuente
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).
fuente