Primeiro, acho que você quer dizer Common Lisp (que é uma especificação de linguagem padrão, consulte o HyperSpec ) com implementações eficientes (à SBCL ). Mas algumas implementações recentes do Scheme também podem ser relevantes (com boas implementações, como Bigloo ou Chicken / Scheme ). Common Lisp e Scheme (e até Clojure ) são da mesma família Lisp. E como uma linguagem de script que impulsiona aplicativos de big data ou de aprendizado de máquina, o Guile pode ser um substituto útil para o Python e também é um dialeto do Lisp. BTW, eu recomendo a leitura do SICP, uma excelente introdução à programação usando o Scheme.
Então, Common Lisp (e outros dialetos do Lisp) é ótimo para IA simbólica. No entanto, muitas bibliotecas recentes de aprendizado de máquina são codificadas em linguagens mais populares, por exemplo, o TensorFlow é codificado em C ++ e Python. As bibliotecas de aprendizado profundo são codificadas principalmente em C ++ ou Python ou C (e às vezes usando OpenCL ou Cuda para peças de computação de GPU).
O Lisp comum é ótimo para inteligência artificial simbólica porque:
- possui implementações muito boas (por exemplo , SBCL , que compila para codificar a máquina todas as expressões dadas ao REPL )
- é homoicônico , por isso é fácil lidar com programas como dados, em particular é fácil gerar [sub] programas, ou seja, usar técnicas de metaprogramação .
- possui um loop Read-Eval-Print para facilitar a programação interativa
- ele fornece um mecanismo de macro muito poderoso (essencialmente, você define sua própria sub-linguagem específica do domínio para o seu problema), muito mais poderoso do que em outros idiomas como C.
- ele exige um coletor de lixo (mesmo código pode ser coletado)
- Ele fornece muitos tipos de dados abstratos de contêiner e pode manipular símbolos facilmente.
- você pode codificar códigos de alto nível (tipicamente dinamicamente) e de baixo nível (tipicamente mais ou menos estrelamente), através das anotações apropriadas.
No entanto, a maioria das bibliotecas de aprendizado de máquina e de rede neural não é codificada no CL. Observe que nem a rede neural nem o aprendizado profundo estão no campo simbólico da inteligência artificial. Veja também esta pergunta .
Vários sistemas de inteligência artificial simbólicos como Eurisko ou CyC foram desenvolvidos em CL (na verdade, em alguns DSL construído acima CL).
Observe que a linguagem de programação pode não ser muito importante. No tópico de pesquisa de Inteligência Geral Artificial , algumas pessoas trabalham com a idéia de um sistema de IA que geraria todo o seu próprio código (então o estão projetando com uma abordagem de bootstrapping ). Então, o código que é gerado por esse sistema pode até ser gerado em linguagens de programação de baixo nível como C. Veja o blog de J.Pitrat
[email protected]
; Eu sou velho demais para usar o twitterDavid Nolen (colaborador do Clojure e do ClojureScript ; criador do Core Logic, um porto do miniKanren) em uma palestra chamada LISP por ser muito poderoso, afirmou que em seus dias o LISP estava décadas à frente de outras linguagens de programação. Existem várias razões pelas quais o idioma não conseguiu manter seu nome.
Este artigo destaca alguns pontos-chave por que o LISP é bom para a IA
A maioria dos meus amigos nesse campo geralmente usa o Matlab para redes neurais artificiais e aprendizado de máquina. Ele oculta os detalhes de baixo nível. Se você está procurando apenas resultados e não como chegar lá, o Matlab será bom. Mas se você quiser aprender coisas detalhadas de baixo nível, sugerirei que você faça o LISP pelo menos uma vez.
A linguagem pode não ser tão importante se você tiver o entendimento de vários algoritmos e técnicas de IA. Sugiro que você leia "Inteligência Artificial: Uma Abordagem Moderna (por Stuard J. Russell e Peter Norvig") . Atualmente, estou lendo este livro, e é um livro muito bom.
fonte
A IA é um campo amplo que vai muito além do aprendizado de máquina, aprendizado profundo, redes neurais etc. Em alguns desses campos, a linguagem de programação não importa (exceto para problemas de velocidade), portanto o LISP certamente não seria um tópico lá. .
No planejamento de pesquisa ou AI, por exemplo, linguagens padrão como C ++ e Java geralmente são a primeira escolha, porque são rápidas (em particular C ++) e porque muitos projetos de software como sistemas de planejamento são de código aberto, portanto, o uso de uma linguagem padrão é importante ( ou, pelo menos, sensato, caso aprecie feedback ou extensões). Estou ciente de apenas um planejador que está escrito no LISP. Apenas para dar uma impressão sobre o papel da escolha da linguagem de programação neste campo da IA, darei uma lista de alguns dos planejadores mais conhecidos e, portanto, mais importantes:
Fast-Downward:
description: provavelmente o
URL do sistema de planejamento clássico provavelmente mais conhecido : http://www.fast-downward.org/
idioma: C ++, partes (pré-processamento) estão em Python
FF:
description: juntamente com o Fast-Downward, o sistema de planejamento clássico que todos conhecem
URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html
idioma: C
VHPOP:
descrição: um dos mais conhecidos sistemas de planejamento de link causal de ordem parcial (POCL)
URL: http://www.tempastic.org/vhpop/
language: C ++
SHOP e SHOP2:
descrição: o
URL do sistema de planejamento HTN (hierárquico) mais conhecido : https://www.cs.umd.edu/projects/shop/
language: existem duas versões do SHOP e SHOP2. As versões originais foram escritas em LISP. Versões mais recentes (chamadas JSHOP e JSHOP2) foram escritas em Java. Pyshop é outra variante da LOJA escrita em Python.
PANDA:
descrição: outro conhecido sistema de planejamento HTN (e híbrido)
URL: http://www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
idioma: existe existem versões diferentes do planejador: PANDA1 e PANDA2 são escritos em Java, PANDA3 é escrito principalmente em Java, com algumas partes no Scala.
Esses foram apenas alguns dos sistemas de planejamento mais conhecidos que me vieram à mente. Os mais recentes podem ser obtidos nas Competições Internacionais de Planejamento (IPCs, http://www.icaps-conference.org/index.php/Main/Competitions ), que ocorrem a cada dois anos. Os códigos dos planejadores concorrentes são publicados de código aberto (por alguns anos).
fonte