Por que o Lisp é uma linguagem tão boa para a IA?

30

Já ouvi antes de cientistas da computação e de pesquisadores da área de IA que o Lisp é uma boa linguagem para pesquisa e desenvolvimento em inteligência artificial. Isso ainda se aplica, com a proliferação de redes neurais e aprendizado profundo? Qual foi o raciocínio deles para isso? Em quais idiomas os sistemas atuais de aprendizado profundo estão atualmente integrados?

J. Antonio Perez
fonte

Respostas:

30

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

Basile Starynkevitch
fonte
1
Eu gostaria de acrescentar aqui que o tensorflow e o theano são baseados em gráficos computacionais, que na verdade são programação simbólica, mas dentro da linguagem imperativa.
Maxim
@Basile: Por favor, compartilhe LISP comum tutorial ou referência
Ved Prakash
@VedPrakash: eu gostaria de entrar em contato por e-mail. O meu é [email protected]; Eu sou velho demais para usar o twitter
Basile Starynkevitch 01/11
15

David 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

  • Fácil de definir uma nova linguagem e manipular informações complexas.
  • Total flexibilidade na definição e manipulação de programas, bem como de dados.
  • Rápido, pois o programa é conciso, juntamente com detalhes de baixo nível.
  • Bom ambiente de programação (depuração, compiladores incrementais, editores).

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.

Ugnes
fonte
4

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).

Prof.Chaos
fonte