Lisp neden yapay zeka için kullanılıyor? [kapalı]


185

Lisp'i ufkumu genişletmeyi öğreniyorum çünkü yapay zeka programlamasında kullanıldığını duydum. Biraz araştırma yaptıktan sonra, AI örneklerini veya dilde onu daha eğimli hale getirecek herhangi bir şey bulamadım.

Lisp geçmişte mevcut olduğu için mi kullanıldı yoksa eksik olduğum bir şey var mı?


5
>… Lütfen Lisp'in yalnızca Animasyon ve Grafikler için yararlı olduğunu varsaymayın,> AI, Biyoinformatik, B2B ve E-Ticaret, Veri Madenciliği, EDA / Yarı İletken> uygulamalar, Uzman Sistemler, Finans, Akıllı Ajanlar, Bilgi> Yönetim, Mekanik CAD , Modelleme ve Simülasyon, Doğal Dil,> Optimizasyon, Araştırma, Risk Analizi, Çizelgeleme, Telekomünikasyon ve Web> Yazma, çünkü bunlar sadece yaşadıkları tek şeydir. Kent Pitman
Avi

2
Lisp'in sadece AI için yararlı olduğunu düşünmedim, sadece neden kullanıldığını merak ediyorum.
Cristián Romo

Soruyu "sert yapay zeka için bir dilin hangi özellikleri gerekli?" Bu geçerli ve yararlı bir soru ve sonuç sadece AIp Forth & montajcılarının sert AI yapmak için gerekenlere sahip olması olacak.
Albert van der Horst

Yanıtlar:


126

Lisp, 1980'lerin sonuna kadar yapay zekada kullanılmıştır. Yine de 80'lerde Common Lisp iş dünyasına “AI dili” olarak satıldı; tepki, çoğu AI programcısını birkaç yıl boyunca C ++ 'a zorladı. Bu günlerde, prototipler genellikle daha genç bir dinamik dilde (Perl, Python, Ruby, vb.) Yazılır ve başarılı araştırma uygulamaları genellikle C veya C ++ (bazen Java) dır.

70'leri merak ediyorsanız ... iyi, orada değildim. Ancak bence Lisp, AI araştırmasında üç nedenden dolayı (önem sırasına göre) başarılı oldu:

  1. Lisp mükemmel bir prototipleme aracıdır. O was iyi çok uzun bir süre için. Lisp, henüz nasıl çözeceğinizi bilmediğiniz bir sorunu çözmek için hala harika. Bu açıklama AI'yı mükemmel bir şekilde karakterize ediyor.
  2. Lisp sembolik programlamayı iyi destekler. Eski AI da sembolikti. Uzun zamandır bu konuda da eşsizdi.
  3. Lisp çok güçlü. Kod / veri ayrımı daha zayıftır, bu nedenle işlevleriniz ve makrolarınız yerleşik öğelere benzediğinden diğer dillerden daha genişletilebilir hisseder .

Ben yok Peter Norvig eski AI kitap , ama Lisp'te AI algoritmaları programı öğrenmek için iyi bir yol olması gerekiyordu.

Feragatname: Hesaplamalı dilbilim alanında yüksek lisans öğrencisiyim. Doğal dil işlemenin alt alanını diğer alanlardan çok daha iyi biliyorum. Belki Lisp diğer alt alanlarda daha fazla kullanılır.


33
Lisp, Makine öğrenimi / ILP dünyasında kesinlikle hayatta ve tekmeliyor
HasaniH

13
AI'de C'de öğretilen bir lisans dersim vardı. Norvig'in kitabından AI'da yüksek lisans düzeyinde bir dersim vardı. C'deki kitap AI algoritmaları ve yapılarına odaklandı. Norvig'in kitabı şöyle hissetti: "AI tarihini okurken LISP'yi öğrenelim." Bence, tam bir zaman kaybı.
San Jacinto

7
Herkesin özlemesinin bir nedeni, John McCarthy'nin Lisp'i yazması ve özellikle AI alanında çok etkili bir Bilgisayar Bilimcisi olmasıydı. Doğal olarak, çalışmalarının çoğu Lisp'de uygulandı ve böylece Lisp bir dayanak kazandı.
cha0site

2
Ortak Lisp asla AI dili olarak tasarlanmamıştır , endüstride kullanılmak üzere yaratılmıştır. Araştırma için, Şema genellikle kullanılır. Ve asla, bir dili yaşına göre yargılamayın - sadece serinlikle orantılı değil, tersi de geçerlidir. C eski ama havalı, peki neden Lisp'in yaşı önemli?
Luka Ramishvili

1
1980'lerin sonuna kadar Lisp WAS'ın AI için kullandığı doğru değil . 2016 yılında MIT, AI alanında oldukça ünlü bir kurum olmaya devam ediyor. MIT'nin lisans robotik kursu için önerilen ders kitabı Artificial Intelligence by Patrick Henry Winston. 2. baskıda bu kitabın programlama bölümleri kendi, senkronize edilmiş kitaplarına - dallandı Lisp. Adından da anlaşılacağı gibi, programlama olduğu tamamen içinde Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

61

Lisp yapay zeka için kullanılır, çünkü sembollerle hesaplayan yazılımın uygulanmasını çok iyi destekler. Semboller, sembolik ifadeler ve bunlarla hesaplama Lisp'in merkezinde yer alır.

Sembollerle hesaplamak için tipik AI alanları şunlardır: bilgisayar cebiri, teorem kanıtlama, planlama sistemleri, tanı, yeniden yazma sistemleri, bilgi gösterimi ve akıl yürütme, mantık dilleri, makine çevirisi, uzman sistemler ve daha fazlası.

Bu nedenle, bu alanlardaki birçok ünlü AI uygulamasının Lisp'de yazılması şaşırtıcı değildir:

  • İlk büyük bilgisayar cebir sistemi olarak Macsyma.
  • ACL2, örneğin AMD tarafından kullanılan, yaygın olarak kullanılan bir teorem kanıtlayıcı olarak.
  • ABD ordusu tarafından ilk Körfez savaşı sırasında kullanılan lojistik planlayıcısı olarak DART. Bu Lisp uygulamasının tek başına ABD'nin AI araştırmalarına yaptığı tüm yatırımlar için geri ödeme yaptığı söyleniyor.
  • SPIKE, Hubble Uzay Teleskobu için planlama ve zamanlama uygulaması. Diğer birkaç büyük teleskop tarafından da kullanılır.
  • CYC, en büyük yazılım sistemlerinden biri. İnsan sağduyu bilgisi alanında temsil ve muhakeme.
  • Ticari olarak kullanılan ilk doğal dil çeviri sistemlerinden METAL.
  • American Express 'Kredi Kartı işlemlerini kontrol eden Yetkili Asistan.

Bu alanlarda Lisp'te yazılmış binlerce başvuru vardır. Bunlar için çok yaygın olanı, sembolik işleme alanında özel yeteneklere ihtiyaç duymalarıdır. Bu alanlarda Lisp'in üstünde özel tercüman / derleyici bulunan özel diller uygulanmaktadır. Lisp, sembolik veriler ve programlar için temsiller oluşturmaya izin verir ve bu ifadeleri (matematik formülleri, mantık formülleri, planlar, ...) manipüle etmek için her türlü makineyi uygulayabilir.

(AI'da çok sayıda diğer genel amaçlı programlama dilinin de kullanıldığını unutmayın. Özellikle Lisp'in AI'de neden kullanıldığını yanıtlamaya çalıştım.)


10
Evet, tarihsel olarak AI her şeyden çok sembolik hesaplama ile ilgiliydi. 80'li yıllardaki " AI kış " muhtemelen daha büyük bir sembolik AI kriziydi - o zamanlar alt-sembolik yöntemlere (sinir ağları, makine öğrenimi vb.) Olan ilginin yeniden canlanmasıydı. Lisp uygulamaları sayısal hesaplamada genellikle oldukça zayıftı. Bu cephede düzelip düzelmediklerini bilmiyorum.
MaD70

2
@ MaD70: 80'lerde AI kışı genel olarak AI hakkındaydı. Ordu fonların çoğunu durdurdu ve AI çoğunlukla ticari pazarda başarısız oldu. O sırada var olan sinir ağları bile. Bu yapay zekâ o zamanlar 'yeni yazılım geliştirme yöntemleri' olarak görürse (kurallar, mantık, sinir ağları, çöp toplama, ...) - bu da başarısız oldu. Bunların çoğu bugün yaygın olarak kullanılmıyor / beğenilmiyor.
Rainer Joswig

O zaman ve geçmişe dönük izlenimim farklıydı / farklı: 80'lerin ikinci yarısında alt sembolik yöntemlerde, hem araştırmada hem de pazarda (özel nöral işlemciler bile vardı) ilginin yeniden canlandığını açıkça hatırlıyorum. 90'lı yılların başlarında, onlarca yıl süren dışsallıktan sonra (cevabım, Minsky ve Papert'in algı algılarının etkisinden bahsettiğim yere bakın: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70

1
Sembolik AI başarısız oldu, IMO, zamanın donanımı nedeniyle (yeterince güçlü / ucuz değil) VE sembolik ve sub-sembolik kamplar arasındaki sert kontrast herhangi bir sinerjiyi engelledi. Wrt "bugün bile yaygın olarak kullanılan / sevilen": Yapay zekada geliştirilen tekniklerin bazılarının (her iki kampta) düşünülenden çok daha fazla kullanıldığından şüpheleniyorum.
MaD70

Sadece bir örnek: 90'lı yılların sonunda tanıdıklarımdan bazıları bana tekstil alanında kalite kontrolü için bir projenin uygulanabilirliğini sordu. Başımın üstünden, sinir ağlarından böyle bir ayrımcılık problemine (aslında görüntü sınıflandırması) umut verici bir yaklaşım olarak değindim. Sadece böyle bir öneriyle, bazı haftalarda sinir ağlarını kullanarak zaten gelişmiş bir yazılım buldular ve dağıtım haklarını aldılar - Ar-Ge içeren bir projeye başlamaktan çok daha mantıklı.
MaD70

22

Bunun bir nedeni, dili etki alanınıza özgü yapılarla genişletmenize ve etkili bir şekilde etki alanına özgü bir dil haline getirmenize izin vermesidir. Bu teknik, bitleri karıştırmaktan ziyade çözdüğünüz problem hakkında akıl yürütmenize izin verdiği için inanılmaz derecede güçlüdür .


Bunun bir örneğini verebilir misiniz?
DuckMaestro

9
@DuckMaestro: Bu hafta yaklaşık 30 dakikalık makro çalışmasında, SQL Select'in geçici bir buggy sürümünü uyguladım. Şöyle gider: (SELECT * FROM veri kümesinin WHERE expr sorgusu).
Paul Nathan

Lisp'de bir cebir çözücüyü gömme youtube.com/… Lisp'de bir devre dili gömme youtube.com/… Lisp'i Lisp içine gömme youtube.com/… Prolog'u
Lisp'e gömme


12

Tahminime göre, fonksiyonel bir dil olarak kod ve veri arasında ayrım yapmıyor. İşlev tanımları ve işlev çağrıları da dahil olmak üzere her şey liste olarak ele alınabilir ve diğer herhangi bir veri parçası gibi değiştirilebilir.

Böylece, kendi kendini denetleyen, kendi kendini değiştiren kod kolayca yazılabilir.


10
Bunun nedeni işlevsel olması değil. Prolog aynı özelliğe sahiptir - her şey bir "terim" dir ve terimler kodun yanı sıra verilerdir. (Prolog bir mantık programlama dilidir ve AI için de çok kullanılır)
Hugh Allen

Bunun için süslü terime Homoiconicity denir - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen

9

Olası bir cevap, AI'nın çok zor problemlerin bir koleksiyonudur ve Lisp, sadece AI değil, zor problemleri çözmek için iyi bir dildir.

Bunun nedeni: makrolar, genel işlevler ve zengin içgözlem, özlü kod ve etki alanı soyutlamalarının kolay tanıtımına izin verir - bu, daha güçlü hale getirebileceğiniz bir dildir. Bu gereksiz birçok sorun için ve kendi maliyetleri ile birlikte gelir, ancak diğer sorunlar için herhangi bir ilerleme sağlamak için güç gereklidir.


7

Bunu sadece AI açısından düşünmenin yanlış olduğunu düşünüyorum. AI-kış gibi şeyler ve yaygın lisp üzerindeki ticari etkiler, neden AI için kullanıldığını soruyorsanız, şu anda neden sık kullanılmadığını değil ...

Her neyse, bunun nedeni AI kodunun çoğunun aslında araştırma kodu olmasıydı. Lisp, keşifsel programlama, zor algoritmalar uygulamak, kendini değiştiren ve sıklıkla değiştirilen kodlar için harika bir dildir. Başka bir deyişle, araştırma kodu için.

Bugün araştırma kodumun bazılarında (matematik, sinyal işleme) lisp kullanıyorum çünkü çoğu dilden daha verimli kod üretirken çoğu dilden daha esnek ve güçlü. Tipik olarak c ++ hızının +/- 2 faktörü içinde performans elde edebilirim, ancak işleri daha hızlı uygulayabilirim ve c ++, java, c # kullandığımdan çok daha fazla zamanımı alacak karmaşıklıkla başa çıkabilirim.

Bu konudan uzaklaşıyor. Ben AI kodu öncelikle bir süre ortak lisp yazılmış çünkü araştırma kodu için güçlü bir yaklaşım olduğunu düşünüyorum. Hala öyle; ancak `` AI '' algoritmaları daha iyi anlaşılıp keşfedildikçe, bunların bir kısmının öğretilmesi ve kullanılması çok daha kolaydı, bu yüzden lisans derslerinde yılın lezzet dillerinde ortaya çıktılar. Oradan, insanların halihazırda bildikleri, hangi kütüphanelerin mevcut olduğu ve büyük gruplar için neyin iyi çalıştığı konusu haline gelir.


6

Temel bir veri yapısı olarak listelerin esnekliğinin büyük bir neden olduğunu tahmin ediyorum.

o zaman, onları her türlü kompozit nesneye ve mesaj geçişleri ve polimorfizm gibi yeni şeylere dönüştürebilmek, onu tercih edilen dil haline getirdi; özellikle yapay zeka için değil, büyük, karmaşık görevler için. özellikle de kavramları denerken.


4

Bence haklısın: Lisp işleri hacklemek için kullanışlı bir araçtı. Bunun nedeni, program ve veri arasında fazla bir ayrım yapmadığıdır. Bu, bilgisayar korsanlarının aynı veri gibi işlevleri çok kolay bir şekilde manipüle etmesine izin verdi.

Ancak lisp, insanlar için, parantezleri ve veri ve program arasındaki ayrımsızlığı ile okumak oldukça zordur. Bugün, herhangi bir üretim AI kodu (veya belki de prototipleme) için lisp kullanmayacağım, ancak komut dosyası oluşturmak için python'u tercih ederim.

Dikkate alınması gereken başka bir şey de, dil içindeki / ile ilgili mevcut kütüphaneler / araçlardır. Lisp kütüphanelerini python kütüphaneleriyle karşılaştıracak bir konumda değilim, ama sanırım kütüphaneler ve açık kaynak, eskisinden çok daha önemli.

Bu yanıt lisp ve python arasındaki aşağıdaki karşılaştırmadan esinlenmiştir: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html


2
Kişisel olarak Lisp'i çoğu dilden daha kolay okunur buluyorum ve sadece birkaç hafta önce öğrendim. Python çoğu dile göre özellikle temiz, evet, ancak lisp'i C ++ gibi bir şeyle karşılaştırırsanız çok daha temiz ve okunması daha kolaydır. Benim tecrübelerime göre.
Zeusoflightning125

4

İşlevsel bir dil olan Lisp'in yinelemeli algoritmaları uygulamak için çok iyi bir seçim olduğunu duydum. Karar verme süreçleri (çapraz geçiş) ve sonuç (yaprak düğümü) göz önüne alındığında, bir ağacı izleyebilmeniz ve geri dönebilmeniz önemlidir.

Bu bana Lisp okuduğumuz üniversitedeki AI dersi sırasında söylendi.


1
Lisp'teki makrolar, her şeyden daha güçlüdür, sadece 50 satır Lisp kodunda OOP'yi uygulamanıza izin verir ve REPL, programınız çalışırken programınızı düzenlemenize izin verir ... Yalnızca Lisp kendi kaynak kodunu kolayca düzenleyebilir ...
aoeu256

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.