Почему Лисп такой хороший язык для ИИ?

30

Ранее я слышал от компьютерных ученых и от исследователей в области ИИ, что этот Лисп - хороший язык для исследований и разработок в области искусственного интеллекта. Это все еще применимо, с распространением нейронных сетей и глубокого обучения? Каковы были их причины для этого? На каких языках в настоящее время встроены системы глубокого обучения?

Х. Антонио Перес
источник

Ответы:

30

Во-первых, я предполагаю, что вы имеете в виду Common Lisp (который является стандартной спецификацией языка, см. Его HyperSpec ) с эффективными реализациями (как SBCL ). Но некоторые недавние реализации Схемы также могут быть уместны (с хорошими реализациями, такими как Bigloo или Chicken / Scheme ). Common Lisp и Scheme (и даже Clojure ) принадлежат к одному семейству Lisp. И как язык сценариев, который управляет большими данными или приложениями машинного обучения, Guile может быть полезной заменой Python, а также диалектом Lisp. Кстати, я рекомендую прочитать SICP, отличное введение в программирование с использованием Scheme.

Кроме того, Common Lisp (и другие диалекты Lisp) отлично подходит для символического ИИ. Однако многие современные библиотеки машинного обучения кодируются на более распространенных языках, например, TensorFlow написан на C ++ и Python. Библиотеки глубокого обучения в основном написаны на C ++, Python или C (и иногда используют OpenCL или Cuda для вычислений на GPU).

Common Lisp отлично подходит для символического искусственного интеллекта, потому что:

  • он имеет очень хорошие реализации (например, SBCL , который компилирует в машинный код каждое выражение, переданное REPL )
  • он гомоичен , поэтому легко иметь дело с программами как данными, в частности, легко генерировать [подпрограммы], то есть использовать методы метапрограммирования .
  • он имеет цикл чтения-Eval-Print для облегчения интерактивного программирования
  • он предоставляет очень мощный механизм макросов (по сути, вы определяете свой собственный предметный подъязык для своей задачи), гораздо более мощный, чем в других языках, таких как C.
  • это требует сборщика мусора (даже код может быть сборщиком мусора)
  • он предоставляет много контейнерных абстрактных типов данных и может легко обрабатывать символы.
  • Вы можете закодировать как высокоуровневый (динамически типизированный), так и низкоуровневый (более или менее начально типизированный) код с помощью соответствующих аннотаций.

Однако большинство библиотек машинного обучения и нейронных сетей не кодируются в CL. Обратите внимание, что ни нейронная сеть, ни глубокое обучение не находятся в области символического искусственного интеллекта. Смотрите также этот вопрос .

Несколько символических систем ИИ, таких как Eurisko или CyC , были разработаны в CL (фактически, в некоторых DSL, построенных выше CL).

Обратите внимание, что язык программирования может быть не очень важным. В исследовательской теме « Искусственный общий интеллект» некоторые люди работают над идеей системы ИИ, которая будет генерировать весь свой собственный код (поэтому проектируют его с помощью метода начальной загрузки ). Затем код, который генерируется такой системой, может быть сгенерирован даже на низкоуровневых языках программирования, таких как C. См. Блог J.Pitrat.

Василий Старынкевич
источник
1
Я хотел бы добавить здесь, что тензорный поток и теано основаны на вычислительных графах, которые на самом деле являются символическим программированием, но в рамках императивного языка.
Максим
@Basile: Пожалуйста, поделитесь учебником или справочником по Common LISP
Ved Prakash
@VedPrakash: Я хотел бы связаться с вами по электронной почте. Мой есть basile@starynkevitch.net; Я слишком стар, чтобы использовать твиттер
Василий Старынкевич
15

Дэвид Нолен (участник Clojure и ClojureScript ; создатель Core Logic - порта miniKanren) в лекции под названием « LISP как слишком мощный» заявил, что в свое время LISP опережал другие языки программирования на десятилетия. Есть ряд причин, по которым язык не смог сохранить свое имя.

В этой статье освещаются ключевые моменты сома, почему LISP полезен для ИИ

  • Легко определить новый язык и манипулировать сложной информацией.
  • Полная гибкость в определении и управлении программами, а также данными.
  • Быстро, так как программа лаконична вместе с низким уровнем детализации.
  • Хорошая среда программирования (отладка, инкрементные компиляторы, редакторы).

Большинство моих друзей в этой области обычно используют Matlab для искусственных нейронных сетей и машинного обучения. Хотя скрывает детали низкого уровня. Если вы ищете только результаты, а не то, как вы туда доберетесь, тогда Matlab будет хорош. Но если вы хотите изучать даже подробности на низком уровне, то я предлагаю вам пройти LISP хотя бы один раз.
Язык может быть не так важен, если у вас есть понимание различных алгоритмов и техник искусственного интеллекта. Я предлагаю вам прочитать «Искусственный интеллект: современный подход» (автор Стюард Дж. Рассел и Питер Норвиг) . Сейчас я читаю эту книгу, и это очень хорошая книга.

Ugnes
источник
4

ИИ - это широкая область, которая выходит далеко за рамки машинного обучения, глубокого обучения, нейронных сетей и т. Д. В некоторых из этих областей язык программирования не имеет никакого значения (за исключением вопросов скорости), поэтому LISP, безусловно, не будет темой для обсуждения. ,

Например, при поиске или планировании AI стандартные языки, такие как C ++ и Java, часто являются первым выбором, потому что они быстрые (в частности, C ++) и потому, что многие программные проекты, такие как системы планирования, имеют открытый исходный код, поэтому важно использовать стандартный язык ( или, по крайней мере, разумно, если кто-то ценит обратную связь или дополнения). Я знаю только об одном планировщике, написанном на LISP. Просто чтобы составить представление о роли выбора языка программирования в этой области искусственного интеллекта, я приведу список некоторых из самых известных и, следовательно, наиболее важных планировщиков:

Fast-Downward:
описание: вероятно, самая известная классическая система планирования
URL: http://www.fast-downward.org/
язык: C ++, части (предварительная обработка) на Python

FF:
Описание: вместе с Fast-Нисходящая классическая система планирования каждый знает URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html язык: C

VHPOP:
описание: одна из самых известных систем планирования причинно-следственных связей частичного порядка (POCL)
URL: http://www.tempastic.org/vhpop/
язык: C ++

SHOP и SHOP2:
описание: самый известный
URL-адрес системы иерархического планирования HTN : https://www.cs.umd.edu/projects/shop/
language: существует две версии SHOP и SHOP2. Оригинальные версии были написаны на LISP. Более новые версии (называемые JSHOP и JSHOP2) были написаны на Java. Pyshop - это еще один вариант SHOP, написанный на Python.

PANDA:
описание: другая хорошо известная HTN (и гибридная) система планирования
URL: http://www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
язык: там Это разные версии планировщика: PANDA1 и PANDA2 написаны на Java, PANDA3 написана в основном на Java, а некоторые части написаны на Scala.

Это были только некоторые из самых известных систем планирования, которые мне приходили в голову. Более свежие из них можно найти на международных соревнованиях по планированию (IPC, http://www.icaps-conference.org/index.php/Main/Competitions ), которые проводятся каждые два года. Коды конкурирующих планировщиков публикуются с открытым исходным кодом (в течение нескольких лет).

Prof.Chaos
источник