Mengapa Lisp merupakan bahasa yang baik untuk AI?


30

Saya pernah mendengar sebelumnya dari para ilmuwan komputer dan dari para peneliti di bidang AI bahwa Lisp adalah bahasa yang baik untuk penelitian dan pengembangan dalam kecerdasan buatan. Apakah ini masih berlaku, dengan perkembangan jaringan saraf dan pembelajaran yang mendalam? Apa alasan mereka untuk ini? Bahasa apa sajakah sistem pembelajaran mendalam saat ini dibangun di saat ini?

Jawaban:


30

Pertama, saya kira maksud Anda Common Lisp (yang merupakan spesifikasi bahasa standar, lihat HyperSpec -nya ) dengan implementasi yang efisien (à la SBCL ). Tetapi beberapa implementasi Skema baru -baru ini juga bisa relevan (dengan implementasi yang baik seperti Bigloo atau Chicken / Scheme ). Baik Common Lisp dan Scheme (dan bahkan Clojure ) berasal dari keluarga Lisp yang sama. Dan sebagai bahasa scripting mengemudi data besar atau aplikasi pembelajaran mesin, Guile mungkin menjadi pengganti berguna untuk Python dan juga merupakan dialek Lisp. BTW, saya sarankan membaca SICP, pengantar yang sangat baik untuk pemrograman menggunakan Skema.

Kemudian, Common Lisp (dan dialek Lisp lainnya) sangat bagus untuk AI simbolik. Namun, banyak perpustakaan pembelajaran mesin dikodekan dalam bahasa yang lebih umum, misalnya TensorFlow dikodekan dalam C ++ & Python. Pustaka pembelajaran mendalam sebagian besar dikodekan dalam C ++ atau Python atau C (dan kadang-kadang menggunakan OpenCL atau Cuda untuk bagian komputasi GPU).

Common Lisp sangat bagus untuk kecerdasan buatan simbolis karena:

  • ini memiliki implementasi yang sangat baik (misalnya SBCL , yang mengkompilasi ke kode mesin setiap ekspresi yang diberikan kepada REPL )
  • itu homoiconic , sehingga mudah untuk menangani program sebagai data, khususnya mudah untuk menghasilkan [sub-] program, yang menggunakan teknik meta-programming .
  • ia memiliki Read-Eval-Print Loop untuk memudahkan pemrograman interaktif
  • ini menyediakan mesin makro yang sangat kuat (pada dasarnya, Anda menentukan subbahasa khusus domain Anda sendiri untuk masalah Anda), jauh lebih kuat daripada dalam bahasa lain seperti C.
  • itu mengamanatkan seorang pemulung (bahkan kode dapat menjadi sampah yang dikumpulkan)
  • ini menyediakan banyak tipe data kontainer abstrak, dan dapat dengan mudah menangani simbol.
  • Anda dapat mengkode kode level tinggi (diketik secara dinamis) dan level rendah (lebih atau kurang diketik), melalui anotasi yang sesuai.

Namun sebagian besar pustaka pembelajaran mesin & jaringan saraf tidak diberi kode dalam CL. Perhatikan bahwa baik jaringan saraf maupun pembelajaran dalam tidak ada dalam bidang kecerdasan buatan simbolis. Lihat juga pertanyaan ini .

Beberapa sistem AI simbolis seperti Eurisko atau CyC telah dikembangkan di CL (sebenarnya, di beberapa DSL dibangun di atas CL).

Perhatikan bahwa bahasa pemrograman mungkin tidak terlalu penting. Dalam topik penelitian Artificial General Intelligence , beberapa orang bekerja pada gagasan sistem AI yang akan menghasilkan semua kode sendiri (jadi merancang dengan pendekatan bootstrap ). Kemudian, kode yang dihasilkan oleh sistem seperti itu bahkan dapat dihasilkan dalam bahasa pemrograman tingkat rendah seperti C. Lihat blog J.Pratrat


1
Saya ingin menambahkan di sini, bahwa tensorflow dan theano didasarkan pada grafik komputasi, yang sebenarnya adalah pemrograman simbolis, tetapi dalam bahasa imperatif.
Maxim

@ Basile: Silakan bagikan tutorial atau referensi LISP Umum
Ved Prakash

@VedPrakash: Saya ingin menghubungi Anda melalui email. Milik saya adalah basile@starynkevitch.net; Saya terlalu tua untuk menggunakan twitter
Basile Starynkevitch

15

David Nolen (kontributor Clojure dan ClojureScript ; pencipta Core Logic sebuah port miniKanren) dalam sebuah ceramah yang disebut LISP karena terlalu kuat menyatakan bahwa pada zamannya LISP adalah dekade di depan bahasa pemrograman lainnya. Ada sejumlah alasan mengapa bahasa tersebut tidak dapat mempertahankan namanya.

Artikel ini menyoroti beberapa poin utama mengapa LISP baik untuk AI

  • Mudah mendefinisikan bahasa baru dan memanipulasi informasi yang kompleks.
  • Fleksibilitas penuh dalam mendefinisikan dan memanipulasi program serta data.
  • Cepat, karena program singkat dan detail tingkat rendah.
  • Lingkungan pemrograman yang baik (debugging, kompiler tambahan, editor).

Sebagian besar teman saya ke bidang ini biasanya menggunakan Matlab untuk Jaringan Syaraf Tiruan dan Pembelajaran Mesin. Itu menyembunyikan detail level rendah. Jika Anda hanya mencari hasil dan bukan bagaimana Anda sampai di sana, maka Matlab akan baik. Tetapi jika Anda ingin mempelajari bahkan hal-hal rinci tingkat rendah, maka saya akan menyarankan Anda membaca LISP setidaknya sekali.
Bahasa mungkin tidak begitu penting jika Anda memiliki pemahaman tentang berbagai algoritma dan teknik AI. Saya akan menyarankan Anda untuk membaca "Inteligensi Buatan: Suatu Pendekatan Modern (oleh Stuard J. Russell dan Peter Norvig") . Saat ini saya sedang membaca buku ini, dan itu buku yang sangat bagus.


4

AI adalah bidang luas yang jauh melampaui pembelajaran mesin, pembelajaran mendalam, jaringan saraf, dll. Dalam beberapa bidang ini, bahasa pemrograman tidak masalah sama sekali (kecuali untuk masalah kecepatan), jadi LISP tentu tidak akan menjadi topik di sana .

Dalam pencarian atau perencanaan AI, misalnya, bahasa standar seperti C ++ dan Java sering menjadi pilihan pertama, karena mereka cepat (khususnya C ++) dan karena banyak proyek perangkat lunak seperti sistem perencanaan adalah open source, jadi menggunakan bahasa standar itu penting ( atau paling tidak bijaksana jika ada yang menghargai umpan balik atau ekstensi). Saya hanya mengetahui satu perencana tunggal yang ditulis dalam LISP. Hanya untuk memberi kesan tentang peran pilihan bahasa pemrograman di bidang AI ini, saya akan memberikan daftar beberapa perencana paling terkenal dan karena itu paling penting:

Cepat-Downward:
deskripsi:
URL sistem perencanaan klasik yang mungkin paling terkenal : http://www.fast-downward.org/
bahasa: C ++, bagian-bagian (preprocessing) menggunakan Python

FF:
deskripsi: bersama-sama dengan Cepat-Downward yang klasik sistem perencanaan semua orang tahu
URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html
bahasa: C

VHPOP:
deskripsi: salah satu
URL sistem perencanaan tautan sebab-akibat (POCL) yang paling terkenal : http://www.tempastic.org/vhpop/
bahasa: C ++

SHOP dan SHOP2:
deskripsi:
URL sistem perencanaan HTN (hierarkis) yang paling terkenal : https://www.cs.umd.edu/projects/shop/
bahasa: ada dua versi SHOP dan SHOP2. Versi aslinya telah ditulis dalam LISP. Versi yang lebih baru (disebut JSHOP dan JSHOP2) telah ditulis dalam Java. Pyshop adalah varian SHOP lebih lanjut yang ditulis dengan Python.

PANDA:
deskripsi:
URL sistem perencanaan HTN (dan hybrid) terkenal lainnya : http://www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
bahasa: ada adalah versi yang berbeda dari perencana: PANDA1 dan PANDA2 ditulis dalam Java, PANDA3 ditulis terutama di Jawa dengan beberapa bagian dalam Scala.

Ini hanya beberapa sistem perencanaan paling terkenal yang muncul di benak saya. Yang lebih baru dapat diambil dari Kompetisi Perencanaan Internasional (IPC, http://www.icaps-conference.org/index.php/Main/Competitions ), yang berlangsung setiap dua tahun. Kode perencana yang bersaing diterbitkan sumber terbuka (selama beberapa tahun).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.