Чому Lisp є такою доброю мовою для ШІ?


30

Раніше я чув від науковців та дослідників в області ШІ, що Лісп - це гарна мова для досліджень та розробок у сфері штучного інтелекту. Чи все-таки це стосується поширення нейронних мереж та глибокого навчання? Що було для цього їх міркуванням? На яких мовах зараз вбудовані сучасні системи глибокого навчання?

Відповіді:


30

По-перше, я здогадуюсь, що ви маєте на увазі Common Lisp (який є стандартною специфікацією мови, див. Його HyperSpec ) з ефективними реалізаціями (à la SBCL ). Але деякі останні впровадження схеми також можуть бути актуальними (з хорошими реалізаціями, такими як Bigloo чи Chicken / Scheme ). Обидва звичайних Lisp і Scheme (і навіть Clojure ) походять із однієї родини Lisp. І як мова сценаріїв, що керує великими даними або машинними програмами навчання, Guile може стати корисною заміною Python, а також є діалектом Lisp. До речі, я рекомендую прочитати SICP, відмінний вступ до програмування за допомогою Scheme.

Тоді, звичайний Лісп (та інші діалекти Ліспа) чудово підходить для символічного AI. Однак багато останніх бібліотек машинного навчання кодуються більш основними мовами, наприклад, TensorFlow кодується в C ++ і Python. Бібліотеки глибокого навчання в основному кодуються в C ++ або Python або C (а іноді використовують OpenCL або Cuda для обчислювальних частин GPU).

Звичайний Лісп чудово підходить для символічного штучного інтелекту, оскільки:

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

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

Кілька символічних систем штучного інтелекту , як EURISKO або Сус були розроблені в CL ( на насправді, в деяких DSL побудований вище CL).

Зауважте, що мова програмування може бути не дуже важливою. У темі дослідження штучного загального інтелекту деякі люди працюють над ідеєю системи AI, яка б генерувала весь власний код (так розробляють його з підходом до завантаження ). Тоді код, що генерується такою системою, може навіть генеруватися на мовах програмування низького рівня, таких як C. Див. Блог Дж. Пітрата


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

@Basile: Будь ласка, поділіться загальним підручником чи посиланням на LISP
Вед Пракаш,

@VedPrakash: Я хотів би зв’язатися з вами електронною поштою. Моє є basile@starynkevitch.net; Я занадто старий, щоб використовувати щебет
Базиль Старинкевич

15

Девід Нолен (доповідач Clojure та ClojureScript ; творець Core Logic - порт miniKanren) у розмові під назвою LISP як занадто потужний заявив, що ще в його часи LISP був на десятиліття випереджаючи інші мови програмування. Існує ряд причин, чому мова не змогла зберегти своє ім'я.

У цій статті висвітлено основні моменти, чому LISP хороший для ШІ

  • Легко визначити нову мову та маніпулювати складною інформацією.
  • Повна гнучкість у визначенні та маніпулюванні програмами, а також даними.
  • Швидкий, оскільки програма є лаконічною, а також деталями низького рівня.
  • Гарне середовище програмування (налагодження, інкрементальні компілятори, редактори).

Більшість моїх друзів у цій галузі зазвичай використовують Matlab для штучних нейронних мереж та машинного навчання. Хоча він ховає деталі низького рівня. Якщо ви шукаєте лише результати, а не те, як дістатися, Matlab буде добре. Але якщо ви хочете навчитися навіть детальних матеріалів на низькому рівні, то я запропоную вам пройти LISP хоча б раз.
Мова може бути не настільки важливою, якщо ви розумієте різні алгоритми та методи AI. Я запропоную вам прочитати "Штучний інтелект: сучасний підхід (Стюард Дж. Рассел та Пітер Норвіг" . Зараз я читаю цю книгу, і це дуже хороша книга.


4

AI - це широке поле, яке виходить далеко за рамки машинного навчання, глибокого навчання, нейронних мереж і т. Д. У деяких з цих мов мова програмування зовсім не має значення (за винятком питань швидкості), тому LISP точно не буде темою .

Наприклад, у пошуку або AI плануванні, звичайні мови, такі як C ++ та Java, часто є першим вибором, оскільки вони швидкі (зокрема, C ++) і через те, що багато програмних програм, таких як системи планування, є відкритим кодом, тому важливо використовувати стандартну мову ( або, принаймні, мудро, якщо хтось цінує відгуки або розширення). Мені відомо лише один планувальник, який написаний у LISP. Тільки, щоб скласти деяке враження щодо ролі вибору мови програмування в цій галузі AI, я наведу список деяких найбільш відомих і, отже, найважливіших планувальників:

Швидкий вниз:
опис: напевно, найвідоміша класична система планування
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/
мова: є дві версії SHOP і SHOP2. Оригінальні версії написані в LISP. Новіші версії (звані JSHOP і JSHOP2) написані на Java. Pyshop - це ще один варіант МАГАЗИН, написаний на Python.

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

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

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