Почему Лисп используется для ИИ? [закрыто]

185

Я изучал Lisp, чтобы расширить свой кругозор, потому что я слышал, что он используется в программировании ИИ. После некоторого изучения я все еще не нашел примеров искусственного интеллекта или чего-либо еще в языке, который бы сделал его более склонным к нему.

Использовался ли Lisp в прошлом, потому что он был доступен, или мне чего-то не хватает?

Кристиан Ромо
источник
5
>… Пожалуйста, не думайте, что Lisp полезен только для анимации и графики,> AI, биоинформатики, B2B и электронной коммерции, интеллектуального анализа данных, EDA / Semiconductor> приложений, экспертных систем, финансов, интеллектуальных агентов, знаний> управления, механических САПР , Моделирование и симуляция, Естественный язык,> Оптимизация, Исследования, Анализ рисков, Планирование, Телекоммуникации и Веб> Авторизация только потому, что это единственное, что им удалось> перечислить. - Кент Питман
Ави
2
Я не думал, что Lisp полезен только для ИИ, мне просто интересно, почему он используется для него.
Кристиан Ромо
Я бы перефразировал вопрос как "какие особенности языка необходимы для жесткого ИИ?" Это верный и полезный вопрос, и в результате будет получено, что только Lisp Forth и ассемблер имеют то, что требуется для выполнения сложного ИИ.
Альберт ван дер Хорст

Ответы:

126

Лисп использовался в искусственном интеллекте до конца 1980-х годов. Однако в 80-х Common Lisp был перепродан деловому миру как «язык искусственного интеллекта»; обратная реакция вынудила большинство программистов ИИ на C ++ в течение нескольких лет. В наши дни прототипы обычно пишутся на более молодом динамическом языке (Perl, Python, Ruby и т. Д.), А реализации успешных исследований обычно на C или C ++ (иногда на Java).

Если вам интересно про 70-е ... ну, меня там не было. Но я думаю, что Лисп был успешен в исследованиях ИИ по трем причинам (в порядке важности):

  1. Лисп - отличный инструмент для создания прототипов. Это было лучшее очень долгое время. Лисп по-прежнему хорош в решении проблемы, которую вы еще не знаете, как решить. Это описание прекрасно характеризует ИИ.
  2. Лисп хорошо поддерживает символическое программирование. Старый ИИ тоже был символическим. Это было также уникально в этом отношении в течение долгого времени.
  3. Лисп очень мощный. Различие кода / данных слабее, поэтому оно кажется более расширяемым, чем другие языки, потому что ваши функции и макросы выглядят как встроенные элементы.

У меня нет старой книги Питера Норвига об ИИ , но она должна быть хорошим способом научиться программировать алгоритмы ИИ в Лиспе.

Отказ от ответственности: я аспирант в области компьютерной лингвистики. Я знаю подполе обработки естественного языка намного лучше, чем другие области. Возможно, Лисп используется больше в других подполях.

Натан Шивели-Сандерс
источник
33
Лисп определенно все еще жив и здоров в мире машинного обучения / ILP
HasaniH
13
У меня был курс бакалавриата по искусству искусственного интеллекта, преподаваемый в C. У меня был курс магистратуры по искусственному интеллекту, преподаваемый по книге Норвиг. Книга на языке C посвящена алгоритмам и структурам искусственного интеллекта. Книга Норвига звучала так: «Давайте изучать LISP, пока мы читаем об истории ИИ». На мой взгляд, полная трата времени.
Сан Хасинто
7
Одна из причин, по которой все, похоже, скучают, заключается в том, что Джон Маккарти написал Лисп и был очень влиятельным учёным-компьютерщиком, особенно в области ИИ. Естественно, большая часть его работ была реализована в Лиспе, и, таким образом, Лисп закрепился.
cha0site
2
Common Lisp никогда не задумывался как язык искусственного интеллекта , он был создан для использования в промышленности. Для исследования обычно используется схема. И никогда, никогда не судите язык по возрасту - он просто не пропорционален хладнокровию, и наоборот. C старый, но крутой, так почему возраст Lisp имеет значение?
Лука Рамишвили
1
Я не это с точностью, что Lisp не WAS используется для ИИ до конца 1980 -х годов. В 2016 году MIT остается довольно известным институтом в области ИИ. Рекомендуемый учебник для курса робототехники MIT Artificial Intelligence by Patrick Henry Winston. Ко 2-му изданию главы программирования этой книги разветвляются на свои собственные, синхронизированные, книги Lisp. Как следует из названия, программирование полностью в Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R
61

Lisp используется для AI, потому что он поддерживает реализацию программного обеспечения, которое очень хорошо вычисляет символы. Символы, символические выражения и их вычисления лежат в основе Lisp.

Типичными областями ИИ для вычислений с символами были / являются: компьютерная алгебра, доказательство теорем, системы планирования, диагностика, системы перезаписи, представление знаний и рассуждения, логические языки, машинный перевод, экспертные системы и многое другое.

Тогда неудивительно, что многие известные приложения ИИ в этих областях были написаны на Лиспе:

  • Macsyma как первая большая система компьютерной алгебры.
  • ACL2 как широко используемый инструмент для доказательства теорем, например, используемый AMD.
  • DART как планировщик логистики использовался во время первой войны в Персидском заливе американскими военными. Говорят, что только это приложение на Лисп окупило все американские инвестиции в исследования ИИ в то время.
  • SPIKE, приложение для планирования и планирования космического телескопа Хаббла. Также используется несколько других крупных телескопов.
  • CYC, одна из крупнейших написанных программных систем. Представление и рассуждение в области знаний человеческого здравого смысла.
  • METAL, одна из первых коммерчески используемых систем перевода на естественный язык.
  • Помощник авторизатора American Express, который проверяет транзакции по кредитным картам.

В этих областях написаны тысячи приложений, написанных на Лиспе. Очень распространенным для них является то, что им нужны специальные возможности в области символьной обработки. Один реализует специальные языки, которые имеют специальные интерпретаторы / компиляторы в этих доменах поверх Lisp. Lisp позволяет создавать представления для символических данных и программ и может реализовывать все виды механизмов для управления этими выражениями (математические формулы, логические формулы, планы, ...).

(Обратите внимание, что в AI также используется множество других языков программирования общего назначения. Я попытался ответить, почему в AI особенно используется Lisp.)

Райнер Йосвиг
источник
10
Да, исторически ИИ был больше о символических вычислениях, чем что-либо еще. « Зима ИИ » в 80-х годах, вероятно, была скорее кризисом символического ИИ - в это время всплыл интерес к субсимволическим методам (нейронные сети, машинное обучение и т. Д.). Реализации Lisp обычно были довольно слабыми в числовых вычислениях. Я не знаю, улучшились ли они на этом фронте.
MaD70
2
@ MaD70: AI зима 80-х годов была про AI в целом. Военные прекратили большую часть финансирования, а ИИ в основном провалился на коммерческом рынке. Даже вещи нейронной сети, которые существовали в то время. Если кто-то видит этот ИИ как «новые методы разработки программного обеспечения» (используя правила, логику, нейронные сети, сборщик мусора и т. Д.), То это тоже не удалось. Многое из этого даже не широко используется / не нравится сегодня.
Райнер Йосвиг
Мое впечатление в то время и в ретроспективе было / отличается: я хорошо помню всплеск интереса, как к исследованиям, так и к рынку (были даже выделенные нейронные процессоры), к субсимвольным методам во второй половине 80-х годов / в начале 90-х, после десятилетий остракизма (см. мой ответ, где я упоминаю влияние критики персептронов Минского и Пейперта: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70
1
Символьный ИИ потерпел неудачу, IMO, из-за аппаратных средств того времени (недостаточно мощного / достаточно дешевого) И из-за того, что такой резкий контраст между символическими и субсимвольными лагерями исключал любую синергию. «Даже широко используется / нравится сегодня»: я подозреваю, что некоторые из методов, разработанных в ИИ (в обоих лагерях), используются гораздо чаще, чем можно подумать (к счастью, не более раскручены).
MaD70
Просто пример: в конце 90-х некоторые мои знакомые спросили меня о целесообразности проекта по контролю качества в текстильной области. Вдобавок ко всему, я упомянул нейронные сети как многообещающий подход к такой проблеме дискриминации (по существу, классификация изображений). Только с таким предложением через несколько недель они нашли уже разработанное программное обеспечение, использующее нейронные сети, и приобрели его права на распространение - гораздо более разумные, чем приступить к проекту, связанному с НИОКР.
MaD70
22

Одна из причин заключается в том, что он позволяет расширять язык конструкциями, специфичными для вашего домена, что делает его по сути языком, специфичным для домена. Эта техника невероятно мощная, так как позволяет вам рассуждать о проблеме, которую вы решаете, а не перетасовывать биты.

ДСМ
источник
Можете ли вы предоставить или ссылку на пример этого?
DuckMaestro
9
@DuckMaestro: Примерно за 30 минут работы с макросами на этой неделе я реализовал специальную версию SQL Select с ошибками. Это выглядит так: (запрос SELECT * FROM набор данных WHERE expr).
Пол Натан
Встраивание решателя алгебры в Лисп youtube.com/… Встраивание языка схем в Лисп youtube.com/… Встраивание Лиспа в Лисп youtube.com/… Встраивание пролога в Лисп - просто посмотрите всю серию
aoeu256
youtube.com/watch?v=SLcZXbyGC3E <- Это хорошо
aoeu256
12

Я всегда думал, что, будучи функциональным языком, он не различает код и данные. Все, включая определения функций и вызовы функций, можно рассматривать как списки и изменять как любые другие данные.

Таким образом, самопроверяющийся, самоизменяющийся код может быть написан легко.

AIB
источник
10
Это не потому, что это функционально. Пролог обладает тем же свойством - все является «термином», а термины - это данные и код. (Пролог является языком логического программирования и также часто используется для ИИ)
Хью Аллен,
Причудливый термин для этого называется Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Мортен Дженсен
9

Один из возможных ответов заключается в том, что ИИ - это набор очень сложных проблем, а Лисп - хороший язык для решения сложных проблем, а не только ИИ.

Почему это так: макросы, универсальные функции и богатый самоанализ позволяют создавать краткий код и легко вводить абстракции доменов - это язык, который вы можете сделать более мощным. Для многих проблем это не нужно, и оно сопряжено с собственными затратами, но для других проблем эта сила необходима, чтобы добиться прогресса.

Богатый
источник
7

Я думаю, что неправильно думать об этом только с точки зрения ИИ. Такие вещи, как AI-зима и коммерческие эффекты на обычном шутнике, отвлекают, если вы спрашиваете, почему он использовался для AI, а не почему он не часто используется сейчас ...

Во всяком случае, я думаю, это потому, что большая часть кода AI была в основном исследовательским кодом. Lisp - отличный язык для исследовательского программирования, для реализации сложных алгоритмов, для самоизменяющегося и часто модифицируемого кода. Другими словами, для исследования кода.

Сегодня я использую lisp для некоторых моих исследовательских программ (математика, обработка сигналов), потому что они более гибкие и мощные, чем большинство языков, и в то же время генерируют более эффективный код, чем большинство языков. Обычно я могу получить производительность в пределах +/- 2, скажем, скорости c ++, но я могу реализовать вещи намного быстрее и справиться со сложностью, которая заняла бы у меня гораздо больше времени, чем у меня, если бы я использовал c ++, java, c #.

Это бродит не по теме, хотя. Я думаю, что код AI был написан в основном на некоторое время, потому что это мощный подход к исследованию кода. Это все еще есть; но по мере того, как алгоритмы «ИИ» становились лучше поняты и изучены, некоторые из них стало намного легче учить и использовать, поэтому они появлялись на разных языках года на курсах старшекурсников. Оттуда становится проблемой то, что люди уже знают, какие библиотеки доступны, и что хорошо работает для больших групп.

Саймон
источник
6

Я предполагаю, что главной причиной была гибкость списков в качестве базовой структуры данных.

в то время, будучи способным превращать их во все виды составных объектов, а также в новые вещи, такие как передача сообщений и полиморфизм, сделали его предпочтительным языком; не специально для ИИ, но для больших, сложных задач. особенно когда они экспериментировали с концепциями.

Хавьер
источник
4

Я думаю, что вы правы: Лисп был удобным инструментом для взлома вещей. Это потому, что в нем мало что различалось между программой и данными. Это позволило хакерам очень легко манипулировать функциями, как данные.

Но людям довольно трудно читать lisp, с его скобками и отсутствием различия между данными и программами. Сегодня я не буду использовать lisp для какого-либо производственного кода AI (или, возможно, даже для создания прототипов), но я бы предпочел Python для сценариев.

Еще одна вещь, которую следует учитывать, это существующие библиотеки / инструменты в / связанные с языком. Я не в состоянии сравнивать библиотеки lisp с библиотеками python, но я полагаю, что библиотеки и open source имеют гораздо большее значение, чем раньше.

Этот ответ был вдохновлен следующим сравнением между lisp и python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

Амит
источник
2
Лично мне Лисп легче читать, чем большинству языков, и я выучил его всего несколько недель назад. Python особенно чист по сравнению с большинством языков, да, но если вы сравните lisp с чем-то вроде C ++, он станет намного чище и легче для чтения. По моему опыту все равно.
Zeusoflightning125
4

Я помню, что, будучи функциональным языком, Lisp был очень хорошим выбором для реализации рекурсивных алгоритмов. Возможность отследить дерево и вернуться обратно очень важна при рассмотрении процессов принятия решений (обход) и конечного результата (конечный узел).

Об этом мне рассказали во время курса ИИ в университете, где мы изучали Лисп.

mlambie
источник
1
Макросы в Лиспе более мощные, чем все остальное, позволяя вам реализовать ООП всего в 50 строках кода на Лиспе, а REPL позволяет редактировать вашу программу, пока она еще работает ... Только Лисп может легко редактировать свой собственный исходный код ...
aoeu256