Кажется, существует давнее убеждение (в основном не из-за шуток), что шутка лучше, чем большинство языков в ИИ.
Откуда возникла эта вера? И есть ли основания для этого?
Кажется, существует давнее убеждение (в основном не из-за шуток), что шутка лучше, чем большинство языков в ИИ.
Откуда возникла эта вера? И есть ли основания для этого?
Ответы:
Одно из ключевых отличий между LISP-подобными языками и другими языками состоит в том, что в LISP код и данные - это одно и то же. Это позволяет делать такие вещи, как программа изменяет некоторые из своих алгоритмов во время выполнения, поскольку она «изучает» новые вещи, как родную часть языка.
Другим аспектом, который затрагивает это, хотя и не так много, является способность LISP легко добавлять новую семантику языка через макросы. Это позволяет фактически определить и определить DSL, с которым ваш ИИ работает и может развиваться, с возможностью роста, самокорректирования и развития этого языка во время работы ИИ.
Соглашаясь с Quadrescence, история использования LISP имеет большое значение для имиджа LISP, который полезен для ИИ. Почему LISP используется для ИИ, рассказывает историю гораздо более подробно.
Одними из самых первых программ на lisp были средства проверки теорем, символическая математика, классическая ELIZA и т. Д. В дополнение к таким книгам, как PAIP Питера Норвига, а также тот факт, что lisp происходит в лаборатории MIT AI, он как бы получил этот образ. этот шутка хороша для ИИ.
DARPA также финансировала университеты для исследований в области искусственного интеллекта и закупала значительное количество оборудования у Symbolics. Нехватка средств в итоге привела к так называемой «зиме ИИ».
Наконец, исходные языки, такие как Fortran (или «языки», такие как ASM), использовались в основном для численных вычислений. Вы работали с числами и массивами из них. В наши дни у нас есть символы или возможность создавать практически любой объект на большинстве современных языков.
Таким образом, причина, по которой lisp был лучше для ИИ в свое время, больше не имеет места. Тем не менее, идея о том, что «шутка полезна для ИИ», все еще остается.
Является ли лисп лучше языком из-за его особенностей и структуры, это совсем другой случай (поскольку на самом деле такого рода вещи применимы ко многим другим областям, кроме ИИ, и, как правило, ведут к старой войне пламени).
Давайте посмотрим на некоторые текущие программы ИИ: (1) Роботы, например, автомобили с самостоятельным управлением. В грандиозном вызове DARPA превосходным программным обеспечением для вождения автомобилей был не Lisp. Скорее это был процедурный язык, такой как C ++ или Java. (2) Машинный перевод естественного языка. Лисп не используется для этой цели широко используемыми производственными системами. (3) Игры, например, шахматные программы. Lisp не используется для этой цели широко используемыми, превосходными шахматными программами, такими как Fritz.
Lisp был изобретен и разработан американскими лабораториями ИИ в 1960-х годах для быстрого прототипирования программ символьной логики, в которых собственные структуры данных Lisp соответствуют требуемому уровню символьной абстракции - например, английские слова могут быть символами в списке, логические формулы могут быть легко представлены в виде списков операторов и операндов.
Но для производственных программ преимущества программной инженерии для статических типизированных языков и широкого спектра сторонних библиотек означают, что Lisp даже не рассматривается для больших современных систем, которые выполняют задачи ИИ.
@ Стефан Рид сказал это очень хорошо. Я могу только добавить, что я был в MIT AI Lab в 70-х годах. Я слышал историю о происхождении Лисп. Я не могу поклясться, что это правда, но это выглядит так:
Джон Маккарти был в MIT в 50-х годах, и он работал над проверкой свойств программ, и для этого он использовал простой синтаксис, похожий на Lambda Calculus.
История состояла в том, что один из аспирантов хотел сделать проект (аналогия, или доказательство теорем, или символическая математика, я не помню, какой), и спросил Маккарти, какой язык использовать. Ответ - Фортран конечно. (Больше ничего не было, и сама обработка списков тогда была довольно хорошо известна, но только как пакеты подпрограмм, а не как языки.) Ну, как-то это привело к программе, которая обрабатывала бы символы в структурах вложенных списков. Вместе с возможностью читать и распечатывать их, а затем eval
функцию, и вуаля - это язык. СПИСОК Язык обработки. Снял оттуда.
Для алгоритмов, которые мы делали в те дни (и которые до сих пор делают очень мало людей), был необходим язык, который мог бы легко манипулировать символическими выражениями. Это то, что Лисп был хорош в. Было много вариаций базовой концепции, которые назывались «Пролог», «Схема» и т. Д. И т. Д.
Таким образом, ИИ означает много вещей для многих людей, и разные языки хороши для разных вещей, но для проблем, которые могут быть описаны как манипулирование символами, трудно найти полезный язык, который каким-то образом не произошел от Лисп.
У Lisp есть преимущества для видов вещей, которые назывались ИИ - по крайней мере, логика, поиск и анализ связанных вещей, которые были большей частью ИИ вплоть до 90-х годов.
Основным преимуществом Lisp является его поддержка макросов - кода как данных, метапрограммирование.
Стандартный ML (SML) - это другой язык, который широко используется в искусственном интеллекте, например, с 80-х годов. Объективные CAML и F # являются эволюцией SML.
Основным преимуществом семейства ML (и Haskell, и т. Д.) Является сопоставление с образцом. Это, вероятно, доступно и в Лиспе, но через библиотеку метапрограммирования, а не встроено в язык. Он также доступен в Haskell, но, по крайней мере, на данный момент сопоставление с образцом не распространено за пределами функциональных языков программирования.
Я видел утверждения, что LISP - это в основном расширенное нетипизированное лямбда-исчисление, а ML - в основном расширенное типизированное лямбда-исчисление. У меня нет знания типизированного лямбда-исчисления, чтобы сказать наверняка.
С годами ИИ также стал гораздо более широкой темой - до такой степени, что он почти полностью исчез. Интеллектуальный анализ данных можно рассматривать как одно из полей ИИ. Многие вещи ИИ (распознавание речи, распознавание речи) практически перестали быть ИИ - они просто приложения, как и любые другие. И ИИ намного больше зависит от обработки сигналов и других видов обработки чисел, чем это было раньше.
Для распознавания речи и распознавания речи ИИ, конечно же, всегда зависел от обработки сигнала и обработки чисел. Да, в этом есть некоторые противоречия ;-) Я не могу дать вес для вещей, поскольку я действительно не знаю.
Как бы то ни было, в результате, вероятно, не существует ни одного языка, подходящего даже для всего одного современного приложения ИИ - я бы предположил (без знаний из первых рук), что в современном ИИ много языковой разработки. И я почти гарантирую, что вы найдете C и C ++ в некоторых проектах, чтобы добиться максимальной производительности. Я не удивлюсь, если по подобным причинам будет много Python - с хорошей числовой библиотекой, Python может легко справляться с задачами, требующими обработки чисел.
Я полагаю, что в одном из этих автомобилей с автоматическим управлением система видения написана на другом языке (и работает на другом оборудовании) по сравнению с системой планирования маршрута.