Во-первых, я предполагаю, что вы имеете в виду 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.
basile@starynkevitch.net
; Я слишком стар, чтобы использовать твиттерДэвид Нолен (участник Clojure и ClojureScript ; создатель Core Logic - порта miniKanren) в лекции под названием « LISP как слишком мощный» заявил, что в свое время LISP опережал другие языки программирования на десятилетия. Есть ряд причин, по которым язык не смог сохранить свое имя.
В этой статье освещаются ключевые моменты сома, почему LISP полезен для ИИ
Большинство моих друзей в этой области обычно используют Matlab для искусственных нейронных сетей и машинного обучения. Хотя скрывает детали низкого уровня. Если вы ищете только результаты, а не то, как вы туда доберетесь, тогда Matlab будет хорош. Но если вы хотите изучать даже подробности на низком уровне, то я предлагаю вам пройти LISP хотя бы один раз.
Язык может быть не так важен, если у вас есть понимание различных алгоритмов и техник искусственного интеллекта. Я предлагаю вам прочитать «Искусственный интеллект: современный подход» (автор Стюард Дж. Рассел и Питер Норвиг) . Сейчас я читаю эту книгу, и это очень хорошая книга.
источник
ИИ - это широкая область, которая выходит далеко за рамки машинного обучения, глубокого обучения, нейронных сетей и т. Д. В некоторых из этих областей язык программирования не имеет никакого значения (за исключением вопросов скорости), поэтому 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 ), которые проводятся каждые два года. Коды конкурирующих планировщиков публикуются с открытым исходным кодом (в течение нескольких лет).
источник