เหตุใด Lisp จึงเป็นภาษาที่ดีสำหรับ AI


30

ฉันเคยได้ยินมาก่อนจากนักวิทยาศาสตร์คอมพิวเตอร์และนักวิจัยในพื้นที่ของ AI ว่า Lisp เป็นภาษาที่ดีสำหรับการวิจัยและพัฒนาปัญญาประดิษฐ์ สิ่งนี้ยังใช้ได้หรือไม่กับการเพิ่มจำนวนของโครงข่ายประสาทและการเรียนรู้ที่ลึก อะไรคือเหตุผลของพวกเขาสำหรับเรื่องนี้? ระบบการเรียนรู้แบบลึกในปัจจุบันมีภาษาอะไรในปัจจุบัน

คำตอบ:


30

อันดับแรกฉันเดาว่าคุณหมายถึงCommon Lisp (ซึ่งเป็นข้อกำหนดภาษามาตรฐานดูHyperSpec ) ด้วยการใช้งานที่มีประสิทธิภาพ (à la SBCL ) แต่การใช้งานSchemeล่าสุดบางอย่างอาจมีความเกี่ยวข้อง (ด้วยการใช้งานที่ดีเช่นBiglooหรือChicken / Scheme ) Common Lisp และ Scheme (และClojure ) มาจากตระกูล Lisp เดียวกัน และเป็นภาษาสคริปต์ขับรถข้อมูลหรือการเรียนรู้การใช้งานเครื่องใหญ่, Guileอาจจะมีการเปลี่ยนที่มีประโยชน์ในการหลามและยังเป็นภาษาเสียงกระเพื่อม BTW ฉันขอแนะนำให้อ่านSICPเป็นการแนะนำการเขียนโปรแกรมที่ยอดเยี่ยมโดยใช้ Scheme

จากนั้น Common Lisp (และภาษาถิ่นอื่น ๆ ของ Lisp) นั้นยอดเยี่ยมสำหรับ AI สัญลักษณ์ อย่างไรก็ตามไลบรารีการเรียนรู้ของเครื่องล่าสุดจำนวนมากถูกเข้ารหัสเป็นภาษาหลักอื่น ๆ ตัวอย่างเช่นTensorFlowถูกเข้ารหัสใน C ++ & Python ไลบรารีการเรียนรู้เชิงลึกนั้นส่วนใหญ่เขียนใน C ++ หรือ Python หรือ C (และบางครั้งใช้OpenCLหรือ Cuda สำหรับชิ้นส่วนคอมพิวเตอร์ GPU)

Common Lisp นั้นยอดเยี่ยมสำหรับปัญญาประดิษฐ์เชิงสัญลักษณ์เพราะ:

  • มันมีการใช้งานที่ดีมาก(เช่นSBCLซึ่งรวบรวมรหัสเครื่องทุกนิพจน์ที่มอบให้REPL )
  • มันเป็นhomoiconicดังนั้นจึงง่ายต่อการจัดการกับโปรแกรมเป็นข้อมูลโดยเฉพาะอย่างยิ่งมันง่ายในการสร้างโปรแกรม [sub-] ซึ่งใช้เทคนิคการเขียนโปรแกรมเมตา
  • มีRead-Eval-Print Loopเพื่อความสะดวกในการตั้งโปรแกรมแบบโต้ตอบ
  • มันให้เครื่องจักรมาโครที่ทรงพลังมาก(โดยหลักแล้วคุณกำหนดโดเมนย่อยเฉพาะภาษาของคุณสำหรับปัญหาของคุณ) มีประสิทธิภาพมากกว่าในภาษาอื่นเช่น C
  • มันสั่งเก็บขยะ (แม้รหัสสามารถเก็บขยะ)
  • มันมีชนิดข้อมูลนามธรรมคอนเทนเนอร์จำนวนมากและสามารถจัดการสัญลักษณ์ได้อย่างง่ายดาย
  • คุณสามารถโค้ดได้ทั้งโค้ดระดับสูง (พิมพ์แบบไดนามิก) และโค้ดระดับต่ำ (พิมพ์มากหรือน้อยเริ่มพิมพ์) ผ่านคำอธิบายประกอบที่เหมาะสม

อย่างไรก็ตามการเรียนรู้ของเครื่องส่วนใหญ่และไลบรารีโครงข่ายประสาทเทียมไม่ได้เข้ารหัสใน CL ขอให้สังเกตว่าไม่มีเครือข่ายประสาทหรือการเรียนรู้อย่างลึกซึ้งอยู่ในเขตข้อมูลปัญญาประดิษฐ์สัญลักษณ์ ดูคำถามนี้ด้วย

ระบบ AI สัญลักษณ์หลายอย่างเช่นEuriskoหรือCyCได้รับการพัฒนาใน CL (จริง ๆ แล้วในบาง DSL ที่สร้างขึ้นเหนือ CL)

ขอให้สังเกตว่าภาษาการเขียนโปรแกรมอาจไม่สำคัญมาก ในหัวข้องานวิจัยปัญญาประดิษฐ์บางคนทำงานเกี่ยวกับความคิดของระบบ AI ซึ่งจะสร้างรหัสของตัวเองทั้งหมด (เช่นการออกแบบด้วยวิธีbootstrapping ) จากนั้นรหัสที่สร้างขึ้นโดยระบบดังกล่าวสามารถสร้างได้ในภาษาการเขียนโปรแกรมระดับต่ำเช่น C ดูบล็อกของ J.Pitrat


1
ฉันต้องการที่จะเพิ่มที่นี่, tensorflow และ theano อยู่บนพื้นฐานของกราฟการคำนวณซึ่งจริงๆแล้วเป็นการเขียนโปรแกรมเชิงสัญลักษณ์ แต่เป็นภาษาที่จำเป็น
Maxim

@Basile: กรุณาแบ่งปันการสอน LISP ทั่วไปหรือการอ้างอิง
Ved Prakash

@VedPrakash: ฉันต้องการติดต่อคุณทางอีเมล ของฉันคือbasile@starynkevitch.net; ฉันแก่เกินไปที่จะใช้ทวิตเตอร์
Basile Starynkevitch

15

David Nolen (ผู้สนับสนุนClojureและClojureScriptผู้สร้าง Core Logic เป็นพอร์ตของ miniKanren) ในการพูดคุยLISP ที่ทรงพลังเกินไประบุไว้ว่าในสมัยของเขา LISP อยู่เหนือทศวรรษของการเขียนโปรแกรมภาษาอื่น ๆ มีหลายสาเหตุที่ภาษาไม่สามารถรักษาชื่อได้

นี้บทความไฮไลท์ส้มจุดสำคัญว่าทำไมเสียงกระเพื่อมเป็นสิ่งที่ดีสำหรับ AI

  • ง่ายต่อการกำหนดภาษาใหม่และจัดการข้อมูลที่ซับซ้อน
  • ความยืดหยุ่นอย่างเต็มที่ในการกำหนดและจัดการโปรแกรมรวมถึงข้อมูล
  • เร็วเนื่องจากโปรแกรมมีความกระชับพร้อมกับรายละเอียดในระดับต่ำ
  • สภาพแวดล้อมการเขียนโปรแกรมที่ดี (การดีบักคอมไพเลอร์ที่เพิ่มขึ้นบรรณาธิการ)

เพื่อนของฉันส่วนใหญ่ในสาขานี้มักจะใช้ Matlab สำหรับเครือข่ายประสาทเทียมและการเรียนรู้ของเครื่อง มันซ่อนรายละเอียดในระดับต่ำแม้ว่า หากคุณกำลังมองหาผลลัพธ์เท่านั้นและไม่ใช่วิธีไปที่นั่น Matlab จะดีมาก แต่ถ้าคุณต้องการเรียนรู้สิ่งที่มีรายละเอียดต่ำแม้แต่น้อยฉันก็จะแนะนำให้คุณอ่าน LISP อย่างน้อยหนึ่งครั้ง
ภาษาอาจไม่สำคัญหากคุณมีความเข้าใจในอัลกอริธึมและเทคนิค AI ที่หลากหลาย ฉันจะแนะนำให้คุณอ่าน"ปัญญาประดิษฐ์: วิธีการที่ทันสมัย ​​(โดย Stuard J. Russell และ Peter Norvig"ตอนนี้ฉันกำลังอ่านหนังสือเล่มนี้และมันเป็นหนังสือที่ดีมาก


4

AI เป็นทุ่งกว้างที่ไปไกลกว่าการเรียนรู้ของเครื่องจักร, การเรียนรู้ลึก, โครงข่ายประสาทเทียม, ฯลฯ ในบางสาขา, ภาษาการเขียนโปรแกรมไม่สำคัญเลย (ยกเว้นเรื่องความเร็ว), LISP จะไม่เป็นหัวข้อที่นั่น .

ในการค้นหาหรือการวางแผน AI เช่นภาษามาตรฐานเช่น C ++ และ Java มักเป็นตัวเลือกแรกเนื่องจากรวดเร็ว (โดยเฉพาะ C ++) และเนื่องจากโครงการซอฟต์แวร์จำนวนมากเช่นระบบการวางแผนเป็นโอเพ่นซอร์สดังนั้นการใช้ภาษามาตรฐานจึงเป็นสิ่งสำคัญ ( หรืออย่างน้อยก็ฉลาดในกรณีที่คนเราชื่นชมความคิดเห็นหรือส่วนขยาย) ฉันเพิ่งทราบถึงการวางแผนเดียวที่เขียนใน LISP เพียงแค่ให้ความประทับใจเกี่ยวกับบทบาทของการเลือกภาษาการเขียนโปรแกรมในฟิลด์ของ AI นี้ฉันจะให้รายชื่อของนักวางแผนที่รู้จักกันดีและที่สำคัญที่สุด:

Fast-Downward:
description:
URL ระบบการวางแผนแบบคลาสสิกที่รู้จักกันดีที่สุด: http://www.fast-downward.org/
ภาษา: C ++, ส่วน (การประมวลผลล่วงหน้า) อยู่ใน Python

FF:
คำอธิบาย:ร่วมกับจานลงคลาสสิกที่ทุกคนรู้ว่าระบบการวางแผนURL:
https://fai.cs.uni-saarland.de/hoffmann/ff.html
ภาษา: C

VHPOP:
คำอธิบาย:หนึ่งในURL ของระบบการวางแผนสั่งการบางส่วนที่เป็นที่รู้จักมากที่สุด (POCL)
: http://www.tempastic.org/vhpop/
ภาษา: C ++

SHOP และ SHOP2:
คำอธิบาย: URLระบบการวางแผน HTN (ลำดับชั้น) ที่เป็นที่รู้จักมากที่สุด
: https://www.cs.umd.edu/projects/shop/
ภาษา: SHOP และ SHOP2 มีสองรุ่น เวอร์ชันต้นฉบับเขียนด้วย LISP เวอร์ชันที่ใหม่กว่า (เรียกว่า JSHOP และ JSHOP2) ถูกเขียนใน Java Pyshop เป็นตัวแปรเพิ่มเติมของ SHOP ที่เขียนด้วย Python

PANDA:
คำอธิบาย: URLระบบการวางแผน HTN (และไฮบริด) อื่นที่รู้จักกันดี
: http://www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
ภาษา:มี เป็นเวอร์ชันที่แตกต่างกันของการวางแผน: PANDA1 และ PANDA2 เขียนด้วยภาษา Java, PANDA3 เขียนเป็นภาษาจาวาเป็นหลักโดยบางส่วนอยู่ใน Scala

นี่เป็นเพียงระบบการวางแผนที่เป็นที่รู้จักกันดีที่มาพร้อมกับความคิดของฉัน สามารถเรียกดูล่าสุดได้จากการแข่งขันวางแผนนานาชาติ (IPCs, http://www.icaps-conference.org/index.php/Main/Competitions ) ซึ่งมีขึ้นทุกสองปี รหัสของนักวางแผนการแข่งขันได้รับการเผยแพร่โอเพนซอร์ซ (ไม่กี่ปี)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.