Mengapa Lisp digunakan untuk AI? [Tutup]


185

Saya telah belajar Lisp untuk memperluas wawasan saya karena saya telah mendengar bahwa itu digunakan dalam pemrograman AI. Setelah melakukan beberapa penjelajahan, saya belum menemukan contoh AI atau apa pun dalam bahasa yang akan membuatnya lebih cenderung ke sana.

Apakah Lisp digunakan di masa lalu karena itu tersedia, atau ada sesuatu yang saya lewatkan?


5
> ... Tolong jangan berasumsi bahwa Lisp hanya berguna untuk Animasi dan Grafik,> AI, Bioinformatika, B2B dan E-Commerce, Penambangan Data, EDA / Semikonduktor> aplikasi, Sistem Pakar, Keuangan, Agen Cerdas, Pengetahuan> Manajemen, Mekanik CAD , Pemodelan dan Simulasi, Bahasa Alam,> Optimasi, Penelitian, Analisis Risiko, Penjadwalan, Telekomunikasi, dan Web> Penulisan hanya karena ini adalah satu-satunya hal yang terjadi pada> daftar. --Kent Pitman
Avi

2
Saya tidak berpikir bahwa Lisp hanya berguna untuk AI, saya hanya ingin tahu mengapa itu digunakan untuk itu.
Cristián Romo

Saya akan mengulangi pertanyaannya sebagai "fitur bahasa apa yang diperlukan untuk AI keras?" Ini adalah pertanyaan yang valid dan berguna, dan hasilnya hanya Lisp Forth & assembler yang dapat melakukan AI keras.
Albert van der Horst

Jawaban:


126

Lisp digunakan di AI sampai akhir 1980-an. Namun, pada tahun 80-an, Common Lisp dijual ke dunia bisnis sebagai "bahasa AI"; reaksi memaksa sebagian besar programmer AI ke C ++ selama beberapa tahun. Saat ini, prototipe biasanya ditulis dalam bahasa dinamis yang lebih muda (Perl, Python, Ruby, dll) dan implementasi penelitian yang sukses biasanya dalam C atau C ++ (kadang-kadang Java).

Jika Anda ingin tahu tentang 70-an ... well, saya tidak ada di sana. Tapi saya pikir Lisp berhasil dalam penelitian AI karena tiga alasan (dalam urutan kepentingan):

  1. Lisp adalah alat prototyping yang sangat baik. Itu yang terbaik untuk waktu yang sangat lama. Lisp masih pandai menangani masalah yang belum Anda pecahkan. Deskripsi itu menggambarkan AI dengan sempurna.
  2. Lisp mendukung pemrograman simbolik dengan baik. AI lama juga simbolis. Itu juga unik dalam hal ini untuk waktu yang lama.
  3. Getah sangat kuat. Perbedaan kode / data lebih lemah sehingga terasa lebih dapat dikembangkan daripada bahasa lain karena fungsi dan makro Anda terlihat seperti barang bawaan.

Saya tidak memiliki buku AI lama Peter Norvig , tetapi ini seharusnya menjadi cara yang baik untuk belajar memprogram algoritma AI dalam Lisp.

Penafian: Saya seorang mahasiswa pascasarjana di bidang linguistik komputasi. Saya tahu subbidang pengolahan bahasa alami jauh lebih baik daripada bidang lainnya. Mungkin Lisp lebih banyak digunakan di subbidang lain.


33
Lisp pasti masih hidup dan menendang di dunia Machine learning / ILP
HasaniH

13
Saya memiliki program sarjana di AI yang diajarkan di C. Saya memiliki program tingkat pascasarjana di AI yang diajarkan dari buku Norvig. Buku dalam C berfokus pada algoritma dan struktur AI. Buku Norvig terasa seperti: "mari kita belajar LISP sementara kita membaca tentang sejarah AI." Menurut pendapat saya, pembuang waktu yang tepat.
San Jacinto

7
Salah satu alasan yang tampaknya semua orang lewatkan adalah bahwa John McCarthy menulis Lisp dan merupakan seorang Ilmuwan Komputer yang sangat berpengaruh, khususnya di bidang AI. Secara alami, banyak dari karyanya diimplementasikan di Lisp, dan dengan demikian Lisp memperoleh pijakan.
cha0site

2
Lisp umum tidak pernah dimaksudkan untuk menjadi bahasa AI , itu diciptakan untuk digunakan dalam industri. Untuk penelitian, Skema biasanya digunakan. Dan tidak pernah, pernah menilai bahasa berdasarkan umurnya - bahasa itu tidak sebanding dengan kesejukan, dan sebaliknya. C sudah tua tapi keren, jadi mengapa usia Lisp penting?
Luka Ramishvili

1
Saya tidak itu akurat untuk adalah bahwa Lisp WS digunakan untuk AI sampai akhir tahun 1980-an. Pada tahun 2016 MIT tetap menjadi institusi yang cukup terkenal di bidang AI. Buku teks yang direkomendasikan untuk kursus robotika sarjana S1 MIT adalah Artificial Intelligence by Patrick Henry Winston. Pada edisi ke 2 bab pemrograman buku itu bercabang menjadi buku mereka sendiri, yang disinkronkan, - Lisp. Seperti namanya, pemrograman sepenuhnya dalam Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

61

Lisp digunakan untuk AI karena mendukung implementasi perangkat lunak yang menghitung dengan simbol dengan sangat baik. Simbol, ekspresi simbolis dan komputasi dengan mereka adalah inti dari Lisp.

Area AI khusus untuk komputasi dengan simbol adalah: aljabar komputer, pembuktian teorema, sistem perencanaan, diagnosis, sistem penulisan ulang, representasi dan penalaran pengetahuan, bahasa logika, terjemahan mesin, sistem pakar, dan banyak lagi.

Maka tidak mengherankan bahwa banyak aplikasi AI terkenal di domain ini ditulis dalam Lisp:

  • Macsyma sebagai sistem aljabar komputer besar pertama.
  • ACL2 sebagai prover teorema yang banyak digunakan, misalnya digunakan oleh AMD.
  • DART sebagai perencana logistik digunakan selama perang Teluk pertama oleh militer AS. Aplikasi Lisp ini sendiri dikatakan telah membayar kembali untuk semua investasi AS dalam penelitian AI pada waktu itu.
  • SPIKE, aplikasi perencanaan dan penjadwalan untuk Hubble Space Telescope. Juga digunakan oleh beberapa teleskop besar lainnya.
  • CYC, salah satu sistem perangkat lunak terbesar yang ditulis. Representasi dan penalaran dalam domain pengetahuan akal sehat manusia.
  • METAL, salah satu sistem terjemahan bahasa alami pertama yang digunakan secara komersial.
  • Asisten Penulis dari American Express, yang memeriksa transaksi kartu kredit.

Ada ribuan aplikasi di area ini yang ditulis dalam Lisp. Sangat umum bagi mereka adalah bahwa mereka membutuhkan kemampuan khusus di bidang pemrosesan simbolik. Satu mengimplementasikan bahasa khusus yang memiliki juru bahasa / kompiler khusus dalam domain-domain ini di atas Lisp. Lisp memungkinkan seseorang untuk membuat representasi untuk data dan program simbolik dan dapat mengimplementasikan semua jenis mesin untuk memanipulasi ekspresi ini (rumus matematika, rumus logika, rencana, ...).

(Perhatikan bahwa banyak bahasa pemrograman tujuan umum lainnya digunakan dalam AI juga. Saya telah mencoba untuk menjawab mengapa khususnya Lisp digunakan dalam AI.)


10
Ya, secara historis AI lebih tentang perhitungan simbolik daripada yang lainnya. " AI musim dingin " di tahun 80-an mungkin lebih merupakan krisis AI simbolis - pada waktu itu ada kebangkitan minat dalam metode sub-simbolik (jaringan saraf, pembelajaran mesin dan sebagainya). Implementasi Lisp biasanya cukup lemah pada komputasi numerik. Saya tidak tahu apakah mereka membaik dalam hal ini.
MaD70

2
@ MaD70: musim dingin AI di tahun 80-an adalah tentang AI secara umum. Militer menghentikan banyak pendanaan dan AI sebagian besar gagal di pasar komersial. Bahkan hal-hal jaringan saraf yang ada pada saat itu. Jika seseorang melihat AI itu sebagai 'metode pengembangan perangkat lunak baru' (menggunakan aturan, logika, jaringan saraf, pengumpulan sampah, ...) - itu juga gagal. Banyak dari itu bahkan tidak banyak digunakan / disukai hari ini.
Rainer Joswig

Kesan saya pada saat itu dan dalam retrospeksi berbeda: saya ingat dengan jelas kebangkitan minat, baik dalam penelitian maupun di pasar (bahkan ada prosesor saraf khusus), dalam metode sub-simbolik pada paruh kedua tahun 80-an / awal 90-an, setelah puluhan tahun pengucilan (lihat jawaban saya, di mana saya menyebutkan pengaruh kritik Minsky & Papert terhadap perceptrons: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70

1
Symbolic AI gagal, IMO, karena perangkat keras pada waktu itu (tidak kuat / tidak cukup murah) DAN karena kontras yang keras antara kubu simbolik dan kubus sub-simbolik menghalangi adanya sinergi. Wrt "bahkan banyak digunakan / disukai hari ini": Saya curiga bahwa beberapa teknik yang dikembangkan dalam AI (di kedua kubu) jauh lebih banyak digunakan daripada yang dapat dipikirkan orang (untungnya, tidak lebih hyped, untungnya).
MaD70

Sebagai contoh saja: pada akhir tahun 90-an beberapa kenalan saya bertanya kepada saya tentang kelayakan suatu proyek untuk pengendalian kualitas di bidang tekstil. Dari atas kepala saya, saya menyebut jaringan saraf sebagai pendekatan yang menjanjikan untuk masalah diskriminasi semacam itu (pada dasarnya klasifikasi gambar). Dengan hanya saran seperti itu, dalam beberapa minggu mereka menemukan perangkat lunak yang sudah dikembangkan, menggunakan jaringan saraf, dan mereka memperoleh hak distribusinya - jauh lebih masuk akal daripada memulai proyek yang melibatkan R&D.
MaD70

22

Salah satu alasannya adalah ia memungkinkan Anda memperluas bahasa dengan konstruksi khusus untuk domain Anda, menjadikannya, secara efektif, bahasa khusus domain. Teknik ini sangat kuat karena memungkinkan Anda untuk berpikir tentang masalah yang Anda selesaikan, bukan tentang mengocok bit.


Bisakah Anda memberikan atau menautkan ke contoh ini?
DuckMaestro

9
@DuckMaestro: Dalam sekitar 30 menit pekerjaan makro minggu ini, saya mengimplementasikan versi ad-hoc buggy dari SQL Select. Bunyinya seperti ini: (query SELECT * FROM dataset WHERE expr).
Paul Nathan

Menyematkan pemecah aljabar di Lisp youtube.com/... Menanamkan bahasa sirkuit di Lisp youtube.com/... Menanamkan Lisp ke dalam Lisp youtube.com/... Menanamkan Prolog di Lisp - Hanya saksikan keseluruhan seri
aoeu256


12

Dugaan saya adalah, sebagai bahasa fungsional, tidak membedakan antara kode dan data. Semuanya, termasuk definisi fungsi dan panggilan fungsi dapat diperlakukan sebagai daftar dan dimodifikasi seperti bagian data lainnya.

Jadi, kode yang dapat memodifikasi sendiri dan memodifikasi sendiri dapat ditulis dengan mudah.


10
Itu bukan karena itu fungsional. Prolog memiliki properti yang sama - semuanya adalah "istilah" dan istilahnya adalah data serta kode. (Prolog adalah bahasa pemrograman logika dan juga banyak digunakan untuk AI)
Hugh Allen

Istilah mewah untuk ini disebut Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen

9

Satu jawaban yang mungkin adalah bahwa AI adalah kumpulan masalah yang sangat sulit, dan Lisp adalah bahasa yang baik untuk memecahkan masalah yang sulit, bukan hanya AI.

Adapun alasannya adalah: makro, fungsi generik, dan introspeksi yang kaya memungkinkan kode ringkas dan pengenalan abstraksi domain yang mudah - ini adalah bahasa yang dapat Anda jadikan lebih kuat. Untuk banyak masalah yang tidak perlu, dan itu datang dengan biayanya sendiri, tetapi untuk masalah lain dibutuhkan kekuatan untuk membuat kemajuan.


7

Saya pikir itu salah untuk berpikir tentang hal ini dalam hal AI saja. Hal-hal seperti AI-musim dingin dan efek komersial pada lemak umum mengganggu jika Anda bertanya mengapa itu digunakan untuk AI, bukan mengapa itu tidak sering digunakan sekarang ...

Bagaimanapun, saya pikir itu karena sebagian besar kode AI pada dasarnya adalah kode penelitian. Lisp adalah bahasa yang bagus untuk pemrograman eksplorasi, untuk mengimplementasikan algoritma yang sulit, untuk memodifikasi sendiri dan sering memodifikasi kode. Dengan kata lain, untuk kode penelitian.

Saya menggunakan lisp hari ini untuk beberapa kode penelitian saya (matematika, pemrosesan sinyal) karena lebih fleksibel dan kuat daripada kebanyakan bahasa sementara masih menghasilkan kode yang lebih efisien daripada kebanyakan bahasa. Saya biasanya bisa mendapatkan kinerja dalam faktor +/- 2 dari katakanlah kecepatan c ++, tapi saya bisa mengimplementasikan banyak hal lebih cepat, dan menangani kompleksitas yang akan membawa saya jauh lebih banyak waktu daripada yang saya miliki jika saya menggunakan c ++, java, c #.

Itu mengembara dari topik sekalipun. Saya pikir kode AI terutama ditulis dalam bahasa umum untuk sementara waktu karena itu adalah pendekatan yang kuat untuk kode penelitian. Itu masih; tetapi karena algoritme `AI 'menjadi lebih dipahami dan dieksplorasi, sebagian dari mereka lebih mudah untuk diajarkan dan digunakan, sehingga mereka muncul dalam bahasa yang sesuai dengan selera dalam kursus tingkat sarjana. Dari sana, itu menjadi masalah tentang apa yang sudah diketahui orang, perpustakaan apa yang tersedia, dan apa yang berfungsi dengan baik untuk kelompok besar.


6

Saya kira alasan utama adalah fleksibilitas daftar sebagai struktur data dasar.

pada saat itu, mampu mengubahnya menjadi semua jenis objek komposit, dan hal-hal baru sebagai pesan dan polimorfisme, menjadikannya bahasa pilihan; tidak khusus untuk AI, tetapi untuk tugas besar, kompleks,. terutama ketika mereka bereksperimen dengan konsep.


4

Saya pikir Anda benar: Lisp adalah alat yang berguna untuk meretas segalanya. Ini karena tidak banyak membedakan antara program dan data. Ini memungkinkan peretas untuk memanipulasi fungsi dengan sangat mudah, seperti halnya data.

Tapi cisp cukup sulit bagi manusia untuk membaca, dengan kawat gigi dan perbedaan antara data dan program. Hari ini, saya tidak akan menggunakan lisp untuk kode AI produksi apa pun (atau mungkin bahkan prototipe) tetapi akan lebih suka python untuk skrip.

Hal lain yang perlu dipertimbangkan adalah perpustakaan / alat yang ada di / terkait dengan bahasa. Saya tidak dalam posisi untuk membandingkan lisp libraries dengan python libraries, tapi saya kira libraries dan open source lebih penting sekarang daripada sebelumnya.

Jawaban ini terinspirasi oleh perbandingan antara lisp dan python berikut: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html


2
Saya pribadi menemukan Lisp lebih mudah dibaca daripada kebanyakan bahasa, dan saya baru mempelajarinya beberapa minggu yang lalu. Python sangat bersih dibandingkan dengan kebanyakan bahasa, ya, tetapi jika Anda membandingkan cisp dengan sesuatu seperti C ++ itu jauh lebih bersih dan lebih mudah dibaca. Lagipula dalam pengalaman saya.
Zeusoflightning125

4

Saya ingat pernah mendengar itu, sebagai bahasa fungsional, Lisp adalah pilihan yang sangat baik untuk menerapkan algoritma rekursif. Mampu melacak pohon dan bekerja kembali sangat penting ketika mempertimbangkan proses pengambilan keputusan (traversal) dan hasil akhir (leaf leaf).

Ini diberitahukan kepada saya selama kursus AI di universitas tempat kami belajar Lisp.


1
Macro di Lisp lebih kuat daripada yang lain, membiarkan Anda menerapkan OOP hanya dalam 50 baris kode Lisp dan REPL memungkinkan Anda mengedit program Anda saat masih berjalan ... Hanya Lisp dapat mengedit kode sumbernya sendiri dengan mudah ...
aoeu256

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.