Чому Лісп використовується при ШІ? [зачинено]


185

Я навчився Lisp розширювати свій кругозір, бо чув, що він використовується в програмуванні AI. Провівши деякі дослідження, мені ще належить знайти приклади AI або щось на тій мові, яка б зробила це більш схильним до цього.

Чи використовувався Lisp в минулому, тому що він був доступний, або є щось, чого мені просто не вистачає?


5
> ... Не вважайте, що Lisp корисний лише для анімації та графіки,> AI, біоінформатика, B2B та електронна комерція, обмін даними, EDA / напівпровідники> програми, експертні системи, фінанси, інтелектуальні агенти, знання> управління, механічний CAD , Моделювання та моделювання, Природна мова,> Оптимізація, Дослідження, Аналіз ризиків, Планування, Телекомунікації та Веб> Авторство лише тому, що це єдине, що їм трапилось> перелічити. --Кент Пітман
Аві

2
Я не думав, що Lisp корисний лише для ШІ, мені просто цікаво, чому він для цього використовується.
Кріштіан Ромо,

Я б перефразував питання як "які особливості мови необхідні для жорсткого ШІ?" Це справедливе і корисне питання, і результатом буде те, що тільки Lisp Forth та асемблер мають те, що потрібно зробити, щоб зробити важкий AI.
Альберт ван дер Хорст

Відповіді:


126

Лісп використовувався в ШІ до кінця 1980-х. Однак у 80-х звичайний Лісп був перепроданий у діловий світ як "мова AI"; люфт змусив більшість програмістів AI на C ++ протягом декількох років. У ці дні прототипи зазвичай пишуться молодшою ​​динамічною мовою (Perl, Python, Ruby тощо), а впровадження успішних досліджень зазвичай знаходиться на C або C ++ (іноді на Java).

Якщо вам цікаво 70-ті… ну, я там не був. Але я думаю, що Лісп був успішним в дослідженні ШІ з трьох причин (за важливістю):

  1. Lisp - чудовий інструмент для прототипування. Це було найкращим дуже довгий час. Лісп все ще чудово вирішує проблему, яку ще не знаєш, як її вирішити. Цей опис чудово характеризує ШІ.
  2. Lisp добре підтримує символічне програмування. Старий ІІ був також символічним. Він також був унікальним у цьому плані протягом тривалого часу.
  3. Лісп дуже потужний. Розрізнення коду / даних слабкіше, тому він відчуває себе більш розширеним, ніж інші мови, оскільки ваші функції та макроси виглядають як вбудовані речі.

У мене немає старої книги ІП Петра Норвіга , але це, мабуть, буде хорошим способом навчитися програмувати алгоритми ШІ в Ліспі.

Відмова: Я студент з обчислювальної лінгвістики. Я знаю підполя обробки природних мов набагато краще, ніж інші поля. Можливо, Lisp використовується більше в інших підполях.


33
Лісп, безумовно, все ще живий і б'є по світу машинного навчання / ILP
HasaniH

13
Я мав бакалаврський курс з AI, який викладав у C. Я мав курс аспірантури AI, викладався з книги Норвіга. Книга на С була зосереджена на алгоритмах та структурах ШІ. Книга Норвіга відчувала себе так: "давайте вивчимо LISP, поки ми читатимемо про історію ШІ". На мою думку, цілком витрачений час.
Сан-Джакінто

7
Однією з причин, що, як видається, всі пропускають, є те, що Джон Маккарті писав Лісп і був дуже впливовим комп'ютерним вченим, зокрема в галузі ШІ. Природно, багато його робіт було здійснено в Ліспі, і таким чином Лісп закріпився.
cha0site

2
Звичайний Lisp ніколи не мав бути мовою ШІ , він був створений для використання в галузі. Для досліджень зазвичай використовується схема. І ніколи, ніколи не судіть про мову за її віком - вона просто не пропорційна прохолоді, і навпаки. C стара, але класна, тому чому вік Ліспа має значення?
Лука Рамішвілі

1
Я не думаю, що це було те, що Lisp WAS використовувався для ШІ до кінця 1980-х. У 2016 році MIT залишається досить відомим закладом у галузі AI. Рекомендований навчальний посібник для курсу «Математика з нижчої робототехніки» є Artificial Intelligence by Patrick Henry Winston. До другого видання глави програмування цієї книги розгалужуються на власні, синхронізовані, книги - Lisp. Як випливає з назви, програмування повністю в Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

61

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

Типовими областями AI для обчислення символів були / є: комп’ютерна алгебра, доведення теорем, системи планування, діагностика, переписати системи, представлення та міркування знань, логічні мови, машинний переклад, експертні системи тощо.

Тоді не дивно, що багато відомих програм AI у цих областях написано на Lisp:

  • Максима як перша велика система комп’ютерної алгебри.
  • ACL2 як широко використовуваний доказ теореми, наприклад, використовуваний AMD.
  • DART як планувальник логістики, який використовували під час першої війни в Перській затоці американські військові. Як відомо, ця програма Lisp окупилася за всі інвестиції США в дослідження AI на той час.
  • SPIKE, додаток для планування та планування космічного телескопа Хаббла. Також використовується декількома іншими великими телескопами.
  • CYC, одна з найбільших написаних програмних систем. Представлення та міркування в галузі людського знання про здоровий глузд.
  • МЕТАЛ, одна з перших комерційно використовуваних систем перекладу на природні мови.
  • Помічник авторизованого агентства American Express, який перевіряє операції з кредитними картками.

У цих областях написано тисячі додатків, які написані в Lisp. Дуже загальним для них є те, що їм потрібні спеціальні можливості в області символічної обробки. Один реалізує спеціальні мови, які мають спеціальні інтерпретатори / компілятори в цих областях поверх Lisp. Lisp дозволяє створювати уявлення для символічних даних і програм і може застосовувати всі види механізмів для управління цими виразами (математичні формули, логічні формули, плани, ...).

(Зверніть увагу, що багато інших мов програмування загального призначення теж використовуються в AI. Я намагався відповісти, чому саме в Lisbon використовується особливо Lisp.)


10
Так, історично AI стосувався більше символічних обчислень, ніж всього іншого. " Зимова AI " у 80-х, ймовірно, була більшою мірою кризою символічного AI - в той час відбулося пожвавлення інтересу до субсимволічних методів (нейронні мережі, машинне навчання тощо). Реалізації Lisp зазвичай були досить слабкими в числових обчисленнях. Я не знаю, чи покращилися вони на цьому фронті.
MaD70

2
@ MaD70: Зимова AI в 80-х була загалом про AI. Військові припинили значну частину фінансування, і AI здебільшого провалився на комерційному ринку. Навіть речі нейронної мережі, що існували на той час. Якщо хтось бачить цей AI як "нові методи розробки програмного забезпечення" (з використанням правил, логіки, нейронних мереж, збору сміття, ...) - це теж не вдалося. Багато з них сьогодні навіть не широко використовується / не подобається.
Rainer Joswig

Моє враження в той час і в ретроспективі було / різне: я чітко пам’ятаю, як виникло інтерес як до досліджень, так і на ринку (були навіть виділені нейронні процесори), до субсимволічних методів у другій половині 80-х / на початку 90-х, після десятиліть остракізму (див. мою відповідь, де я згадую про вплив критики на сприйняття Мінським та Папертом: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70

1
Символічний AI не вдався, IMO, через апаратне забезпечення часу (недостатньо потужне / дешеве) І тому, що такий різкий контраст між символічними та субсимволічними таборами перешкоджав будь-якій синергії. Wrt "навіть широко використовується / сподобався сьогодні": я підозрюю, що деякі методи, розроблені в ШІ (в обох таборах), набагато більше використовуються, ніж можна думати (на щастя, не більше розкрученого).
MaD70

Лише приклад: наприкінці 90-х деякі мої знайомі запитували мене про доцільність проекту з контролю якості в текстильній галузі. Вгорі голови я згадав нейронні мережі як перспективний підхід до такої проблеми дискримінації (по суті, класифікація зображень). Маючи лише таку пропозицію, через кілька тижнів вони знайшли вже розроблене програмне забезпечення, використовуючи нейронні мережі, і вони придбали його права на розповсюдження - набагато розумніші, ніж брати участь у проекті, що займається НДДКР.
MaD70

22

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


Чи можете ви надати чи посилання на приклад цього?
DuckMaestro

9
@DuckMaestro: Приблизно за 30 хвилин роботи з макроконтролем на цьому тижні я реалізував спеціальну баггі-версію SQL Select. Виходить так: (запит SELECT * FROM database WHERE expr).
Пол Натан

Вставлення розв’язувача алгебри в Lisp youtube.com/… Вставлення мови схеми в Lisp youtube.com/… Вставлення Lisp в Lisp youtube.com/… Вставлення Prolog в Lisp - Просто дивіться всю серію
aoeu256


12

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

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


10
Це не тому, що це функціонально. Prolog має однакову властивість - все є "терміном", а терміни - це дані, а також код. (Prolog - це мова логічного програмування, а також багато використовується для AI)
Х'ю Аллен,

Ефектний термін для цього називається Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Мортен Дженсен

9

Одна з можливих відповідей полягає в тому, що AI - це сукупність дуже важких проблем, а Lisp - це гарна мова для вирішення важких проблем, а не лише AI.

Що стосується того, чому це так: макроси, загальні функції та багата самоаналіз дозволяють стислий код та просте введення абстракцій домену - це мова, яку ви можете зробити більш потужною. Для багатьох проблем це непотрібно, і це пов'язано з власними витратами, але для інших проблем необхідна влада, щоб зробити будь-який пробіг.


7

Я думаю, що неправильно думати про це лише з точки зору AI. Такі речі, як AI-зима та комерційний вплив на звичайну лиску, відволікають, якщо ви запитуєте, чому він використовувався для ШІ, а не чому він зараз не часто використовується ...

У всякому разі, я думаю, що це тому, що більшість кодів ШІ по суті був дослідницьким кодом. Lisp - це чудова мова для дослідницького програмування, для реалізації складних алгоритмів, для самовиправлення та часто модифікованого коду. Іншими словами, для коду дослідження.

Сьогодні я використовую Lisp для деяких моїх дослідницьких кодів (математика, обробка сигналів), оскільки він більш гнучкий та потужний, ніж більшість мов, при цьому генерує більш ефективний код, ніж більшість мов. Я, як правило, можу досягти продуктивності в коефіцієнті +/- 2, наприклад, зі швидкістю c ++, але я можу реалізовувати речі набагато швидше і мати справу зі складністю, яка забирає у мене набагато більше часу, ніж у мене, якби я використовував c ++, java, c #.

Це хоча блукання з теми. Я думаю, що AI-код був певний час написаний загальним ліпом, оскільки це потужний підхід до коду дослідження. Це все ще є; але як алгоритми `AI 'стали краще розуміти та досліджувати, деякі з них були набагато простішими в навчанні та використанні, тому вони з'являлися на мовах ароматів року на курсах з низької кваліфікації. Звідси стає питанням того, що люди вже знають, які бібліотеки доступні та що добре працює для великих груп.


6

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

в той час, маючи змогу перетворити їх на всілякі складові об’єкти, а нові речі, як передачі повідомлень та поліморфізм, зробили це мовою вибору; не спеціально для AI, а для великих, складних завдань. особливо коли вони експериментували з концепціями.


4

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

Але Lisp досить важко читати людям з його дужками та нерозрізненням даних та програми. Сьогодні я не буду використовувати Lisp для будь-якого виробничого коду AI (або, можливо, навіть для прототипування), але дуже віддаю перевагу python для сценаріїв.

Інша річ, яку слід враховувати, - це наявні бібліотеки / інструменти в / пов'язані з мовою. Мені не вдається порівнювати бібліотеки Lisp з бібліотеками python, але я думаю, що бібліотеки та відкритий код мають значення набагато більше, ніж раніше.

Ця відповідь надихнула наступного порівняння між lisp та python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html


2
Я особисто вважаю, що Лісп легше читати, ніж більшість мов, і це я дізнався лише кілька тижнів тому. Так, Python особливо чистий порівняно з більшістю мов, але якщо порівнювати lisp з чимось на зразок C ++, він набагато чистіший і простіший для читання. З мого досвіду все одно.
Zeusoflightning125

4

Я пам’ятаю, чуючи, що, будучи функціональною мовою, Лісп був дуже хорошим вибором для реалізації рекурсивних алгоритмів. Уміння відстежувати дерево та опрацьовувати свій шлях назад є важливим при розгляді процесів прийняття рішень (обхід) та кінцевого результату (листовий вузол).

Про це мені сказали під час курсу AI в університеті, де ми навчалися Лісп.


1
Макроси в Lisp є більш потужними, ніж будь-що інше, дозволяючи вам реалізувати OOP лише у 50 рядках Lisp-коду, а REPL дозволяє редагувати програму під час її роботи ... Тільки Lisp може легко редагувати власний вихідний код ...
aoeu256

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.