Tại sao Lisp được sử dụng cho AI? [đóng cửa]


184

Tôi đã học Lisp để mở rộng tầm nhìn của mình vì tôi nghe nói rằng nó được sử dụng trong lập trình AI. Sau khi thực hiện một số khám phá, tôi vẫn chưa tìm thấy các ví dụ về AI hoặc bất cứ thứ gì trong ngôn ngữ sẽ khiến nó nghiêng về phía nó hơn.

Lisp đã được sử dụng trong quá khứ bởi vì nó có sẵn, hoặc có thứ gì đó mà tôi chỉ thiếu?


5
> Xin vui lòng giả sử Lisp chỉ hữu ích cho Hoạt hình và Đồ họa,> AI, Tin sinh học, B2B và Thương mại điện tử, Khai thác dữ liệu, EDA / Bán dẫn> ứng dụng, Hệ thống chuyên gia, Tài chính, Đại lý thông minh, Kiến thức> Quản lý, CAD cơ khí , Mô hình hóa và mô phỏng, ngôn ngữ tự nhiên,> Tối ưu hóa, nghiên cứu, phân tích rủi ro, lập lịch, viễn thông và web> Tác giả chỉ vì đây là những điều duy nhất họ xảy ra với> danh sách. --Kent Pitman
Avi

2
Tôi đã không nghĩ rằng Lisp chỉ hữu ích cho AI, tôi chỉ tự hỏi tại sao nó được sử dụng cho nó.
Cristián Romo

Tôi sẽ viết lại câu hỏi là "những tính năng nào của ngôn ngữ là cần thiết cho AI cứng?" Đây là một câu hỏi hợp lệ và hữu ích, và kết quả sẽ là chỉ Lisp Forth & lắp ráp mới có những gì nó cần để làm AI khó.
Albert van der Horst

Câu trả lời:


125

Lisp WAS được sử dụng trong AI cho đến cuối những năm 1980. Tuy nhiên, trong thập niên 80, Common Lisp đã được bán cho thế giới kinh doanh như là "ngôn ngữ AI"; phản ứng dữ dội đã buộc hầu hết các lập trình viên AI đến C ++ trong một vài năm. Ngày nay, các nguyên mẫu thường được viết bằng ngôn ngữ động trẻ hơn (Perl, Python, Ruby, v.v.) và việc triển khai nghiên cứu thành công thường là bằng C hoặc C ++ (đôi khi là Java).

Nếu bạn tò mò về những năm 70 ... tốt, tôi đã không ở đó. Nhưng tôi nghĩ Lisp đã thành công trong nghiên cứu AI vì ba lý do (theo thứ tự quan trọng):

  1. Lisp là một công cụ tạo mẫu tuyệt vời. Đó là điều tốt nhất trong một thời gian rất dài. Lisp vẫn rất giỏi trong việc giải quyết vấn đề mà bạn chưa biết cách giải quyết. Mô tả đó đặc trưng cho AI một cách hoàn hảo.
  2. Lisp hỗ trợ lập trình biểu tượng tốt. AI cũ cũng mang tính biểu tượng. Nó cũng là duy nhất trong vấn đề này trong một thời gian dài.
  3. Lisp rất mạnh mẽ. Sự phân biệt mã / dữ liệu yếu hơn nên có cảm giác mở rộng hơn các ngôn ngữ khác vì các chức năng và macro của bạn trông giống như các công cụ tích hợp.

Tôi không có cuốn sách AI cũ của Peter Norvig , nhưng nó được cho là một cách tốt để học lập trình các thuật toán AI trong Lisp.

Tuyên bố miễn trừ trách nhiệm: Tôi là một sinh viên tốt nghiệp ngành ngôn ngữ học tính toán. Tôi biết lĩnh vực xử lý ngôn ngữ tự nhiên tốt hơn rất nhiều so với các lĩnh vực khác. Có lẽ Lisp được sử dụng nhiều hơn trong các trường con khác.


33
Lisp chắc chắn vẫn còn sống và đá trong thế giới Machine learning / ILP
HasaniH

13
Tôi đã có một khóa học đại học về AI được dạy ở C. Tôi đã có một khóa học cấp độ cao về AI được dạy từ cuốn sách của Norvig. Cuốn sách trong C tập trung vào các thuật toán và cấu trúc AI. Cuốn sách của Norvig có cảm giác như: "chúng ta hãy học LISP trong khi chúng ta đọc về lịch sử AI." Theo ý kiến ​​của tôi, một người dọn dẹp thời gian hoàn toàn.
San Jacinto

7
Một lý do mà mọi người dường như bỏ lỡ là John McCarthy đã viết Lisp và là một Nhà khoa học máy tính có ảnh hưởng rất lớn, đặc biệt trong lĩnh vực AI. Đương nhiên, rất nhiều công việc của ông đã được thực hiện ở Lisp, và do đó Lisp đã có được chỗ đứng.
cha0site

2
Lisp thông thường không bao giờ có ý định trở thành ngôn ngữ AI , nó được tạo ra để sử dụng trong ngành công nghiệp. Đối với nghiên cứu, Scheme thường được sử dụng. Và không bao giờ, đánh giá một ngôn ngữ theo độ tuổi của nó - nó không tỷ lệ thuận với sự mát mẻ và ngược lại. C đã già nhưng rất tuyệt, vậy tại sao tuổi của Lisp lại quan trọng?
Luka Ramishvili

1
Tôi không chính xác là Lisp WAS đã được sử dụng cho AI cho đến cuối những năm 1980. Trong năm 2016 MIT vẫn là một tổ chức khá nổi tiếng trong lĩnh vực AI. Sách giáo khoa được đề xuất cho khóa học robot nâng cấp của MIT là Artificial Intelligence by Patrick Henry Winston. Đến phiên bản thứ 2, các chương lập trình của cuốn sách đó được phân nhánh thành cuốn sách đồng bộ hóa của riêng họ - Lisp. Như tên của nó, chương trình hoàn toàn nằm trong Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

61

Lisp được sử dụng cho AI vì nó hỗ trợ triển khai phần mềm tính toán với các biểu tượng rất tốt. Biểu tượng, biểu thức biểu tượng và tính toán với chúng là cốt lõi của Lisp.

Các lĩnh vực AI điển hình để tính toán với các ký hiệu là / là: đại số máy tính, chứng minh định lý, hệ thống lập kế hoạch, chẩn đoán, hệ thống viết lại, biểu diễn và lý luận kiến ​​thức, ngôn ngữ logic, dịch máy, hệ thống chuyên gia, v.v.

Sau đó, không có gì ngạc nhiên khi nhiều ứng dụng AI nổi tiếng trong các lĩnh vực này được viết bằng Lisp:

  • Macsyma là hệ thống đại số máy tính lớn đầu tiên.
  • ACL2 như một phương châm định lý được sử dụng rộng rãi, ví dụ được AMD sử dụng.
  • DART là nhà hoạch định hậu cần được sử dụng trong cuộc chiến vùng Vịnh đầu tiên của quân đội Hoa Kỳ. Chỉ riêng ứng dụng Lisp này được cho là đã trả lại cho tất cả các khoản đầu tư của Mỹ vào nghiên cứu AI vào thời điểm đó.
  • SPIKE, ứng dụng lập kế hoạch và lập kế hoạch cho Kính thiên văn vũ trụ Hubble. Cũng được sử dụng bởi một số kính thiên văn lớn khác.
  • CYC, một trong những hệ thống phần mềm lớn nhất được viết. Đại diện và lý luận trong lĩnh vực kiến ​​thức thông thường của con người.
  • METAL, một trong những hệ thống dịch thuật ngôn ngữ tự nhiên được sử dụng thương mại đầu tiên.
  • Trợ lý ủy quyền của American Express, kiểm tra các giao dịch thẻ tín dụng.

Có hàng ngàn ứng dụng trong các lĩnh vực này được viết bằng Lisp. Rất phổ biến đối với những người đó là họ cần các khả năng đặc biệt trong lĩnh vực xử lý biểu tượng. Người ta thực hiện các ngôn ngữ đặc biệt có trình thông dịch / trình biên dịch đặc biệt trong các miền này trên Lisp. Lisp cho phép một người tạo ra các biểu diễn cho dữ liệu và chương trình tượng trưng và có thể thực hiện tất cả các loại máy móc để thao tác các biểu thức này (công thức toán học, công thức logic, kế hoạch, ...).

(Lưu ý rằng rất nhiều ngôn ngữ lập trình cho mục đích chung khác cũng được sử dụng trong AI. Tôi đã cố gắng trả lời tại sao đặc biệt Lisp được sử dụng trong AI.)


10
Vâng, trong lịch sử AI là về tính toán tượng trưng hơn bất cứ điều gì khác. " Mùa đông AI " trong thập niên 80 có lẽ là một cuộc khủng hoảng của AI tượng trưng - vào thời điểm đó, có một sự hồi sinh quan tâm đến các phương pháp biểu tượng phụ (mạng lưới thần kinh, học máy, v.v.). Việc triển khai Lisp thường khá yếu ở máy tính số. Tôi không biết nếu họ cải thiện trên mặt trận này.
MaD70

2
@ MaD70: mùa đông AI trong thập niên 80 nói chung về AI. Quân đội đã ngừng phần lớn tài trợ và AI hầu như thất bại trong thị trường thương mại. Ngay cả những thứ mạng lưới thần kinh tồn tại vào thời điểm đó. Nếu ai đó thấy rằng AI là 'phương pháp phát triển phần mềm mới' (sử dụng các quy tắc, logic, mạng thần kinh, bộ sưu tập rác, ...) - thì điều đó cũng thất bại. Phần lớn trong số đó thậm chí không được sử dụng rộng rãi / thích ngày nay.
Rainer Joswig

Ấn tượng của tôi tại thời điểm và hồi tưởng là / khác biệt: Tôi nhớ rõ sự hồi sinh của lợi ích, cả trong nghiên cứu và trên thị trường (thậm chí còn có các bộ xử lý thần kinh chuyên dụng), trong các phương pháp biểu tượng phụ trong nửa sau của thập niên 80 đầu thập niên 90, sau nhiều thập kỷ bị tẩy chay (xem câu trả lời của tôi, trong đó tôi đề cập đến ảnh hưởng của sự chỉ trích của Minsky & Papert đối với các tri giác: stackoverflow.com/questions/683124/neural-networks-obsolete/ .)
MaD70

1
AI tượng trưng đã thất bại, IMO, vì phần cứng của thời gian (không đủ mạnh / đủ rẻ) VÀ bởi vì sự tương phản gay gắt như vậy giữa các trại biểu tượng và biểu tượng phụ đã loại trừ bất kỳ sức mạnh tổng hợp nào. Wrt "thậm chí được sử dụng rộng rãi / thích ngày nay": Tôi nghi ngờ rằng một số kỹ thuật được phát triển trong AI (ở cả hai phe) được sử dụng nhiều hơn người ta có thể nghĩ (may mắn hơn, không may mắn hơn).
MaD70

Chỉ là một ví dụ: vào cuối những năm 90, một số người quen của tôi đã hỏi tôi về tính khả thi của một dự án để kiểm soát chất lượng trong lĩnh vực dệt may. Ngoài đỉnh đầu tôi đã đề cập đến các mạng lưới thần kinh như một cách tiếp cận đầy hứa hẹn cho vấn đề phân biệt đối xử như vậy (về cơ bản là phân loại hình ảnh). Chỉ với gợi ý như vậy, trong một vài tuần, họ đã tìm thấy một phần mềm đã được phát triển, sử dụng các mạng thần kinh và họ có được quyền phân phối của nó - hợp lý hơn nhiều so với bắt tay vào một dự án liên quan đến R & D.
MaD70

22

Một lý do là nó cho phép bạn mở rộng ngôn ngữ với các cấu trúc cụ thể cho tên miền của bạn, làm cho ngôn ngữ đó trở thành ngôn ngữ cụ thể theo tên miền. Kỹ thuật này cực kỳ mạnh mẽ vì nó cho phép bạn suy luận về vấn đề bạn đang giải quyết, thay vì về việc xáo trộn các bit.


Bạn có thể cung cấp hoặc liên kết đến một ví dụ về điều này?
DuckMaestro

9
@DuckMaestro: Trong khoảng 30 phút làm việc macro trong tuần này, tôi đã triển khai phiên bản lỗi đặc biệt của SQL Chọn. Nó diễn ra như sau: (truy vấn CHỌN * TỪ tập dữ liệu WHERE expr).
Paul Nathan

Nhúng một giải đại số trong Lisp youtube.com/... Nhúng một ngôn ngữ mạch trong Lisp youtube.com/... Nhúng Lisp vào Lisp youtube.com/... Nhúng Prolog trong Lisp - Chỉ cần xem toàn bộ loạt
aoeu256


12

Tôi đoán luôn luôn là, là một ngôn ngữ chức năng, nó không phân biệt giữa mã và dữ liệu. Tất cả mọi thứ, bao gồm các định nghĩa hàm và các lệnh gọi hàm có thể được coi là danh sách và được sửa đổi như bất kỳ phần dữ liệu nào khác.

Vì vậy, mã tự kiểm tra, tự sửa đổi có thể được viết dễ dàng.


10
Đó không phải là vì nó hoạt động. Prolog có cùng một thuộc tính - mọi thứ đều là "thuật ngữ" và các điều khoản là dữ liệu cũng như mã. (Prolog là ngôn ngữ lập trình logic và cũng được sử dụng rất nhiều cho AI)
Hugh Allen

Thuật ngữ ưa thích cho điều này được gọi là Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen

9

Một câu trả lời có thể là AI là một tập hợp các vấn đề rất khó và Lisp là một ngôn ngữ tốt để giải quyết các vấn đề khó khăn, không chỉ AI.

Về lý do đó là: macro, hàm chung và nội quan phong phú cho phép mã ngắn gọn và dễ dàng giới thiệu trừu tượng tên miền - đó là ngôn ngữ mà bạn có thể tạo ra mạnh mẽ hơn. Đối với rất nhiều vấn đề không cần thiết, và nó đi kèm với chi phí riêng của nó, nhưng đối với các vấn đề khác, sức mạnh là cần thiết để thực hiện bất kỳ bước tiến nào.


7

Tôi nghĩ thật sai lầm khi nghĩ về điều này chỉ về mặt AI. Những thứ như AI-winter và các hiệu ứng thương mại trên lisp thông thường sẽ gây mất tập trung nếu bạn hỏi tại sao nó được sử dụng cho AI, chứ không phải tại sao nó không được sử dụng thường xuyên bây giờ ...

Dù sao, tôi nghĩ đó là vì phần lớn mã AI về cơ bản là mã nghiên cứu. Lisp là một ngôn ngữ tuyệt vời để lập trình khám phá, để thực hiện các thuật toán khó, để tự sửa đổi và thường sửa đổi mã. Nói cách khác, đối với mã nghiên cứu.

Hôm nay tôi sử dụng lisp cho một số mã nghiên cứu của tôi (toán học, xử lý tín hiệu) bởi vì nó linh hoạt và mạnh mẽ hơn hầu hết các ngôn ngữ trong khi vẫn tạo ra mã hiệu quả hơn hầu hết các ngôn ngữ. Tôi thường có thể đạt được hiệu suất trong khoảng +/- 2 tốc độ c ++, nhưng tôi có thể thực hiện mọi thứ nhanh hơn nhiều và xử lý sự phức tạp sẽ khiến tôi mất nhiều thời gian hơn nếu tôi sử dụng c ++, java, c #.

Đó là lang thang ra khỏi chủ đề mặc dù. Tôi nghĩ rằng mã AI chủ yếu được viết bằng ngôn ngữ chung trong một thời gian bởi vì nó là một cách tiếp cận mạnh mẽ để nghiên cứu mã. Nó vẫn là; nhưng khi các thuật toán của 'AI' trở nên được hiểu và khám phá tốt hơn, các phần của chúng dễ dạy và sử dụng hơn rất nhiều, vì vậy chúng xuất hiện trong các ngôn ngữ của năm trong các khóa học đại học. Từ đó, nó trở thành một vấn đề về những gì mọi người đã biết, những thư viện nào có sẵn và những gì hoạt động tốt cho các nhóm lớn.


6

Tôi đoán rằng một lý do lớn là tính linh hoạt của danh sách như một cấu trúc dữ liệu cơ bản.

tại thời điểm đó, việc có thể biến chúng thành tất cả các loại đối tượng tổng hợp, và những điều mới như thông điệp và đa hình, biến nó thành ngôn ngữ được lựa chọn; không đặc biệt cho AI, nhưng cho các nhiệm vụ lớn, phức tạp. đặc biệt là khi họ đang thử nghiệm các khái niệm.


4

Tôi nghĩ bạn đã đúng: Lisp là một công cụ hữu ích để hack mọi thứ. Điều này là do nó không phân biệt nhiều giữa chương trình và dữ liệu. Điều này cho phép tin tặc thao tác các chức năng rất dễ dàng, giống như dữ liệu.

Nhưng lisp khá khó cho con người đọc, với dấu ngoặc nhọn và không phân biệt giữa dữ liệu và chương trình. Hôm nay, tôi sẽ không sử dụng lisp cho bất kỳ mã AI sản xuất nào (hoặc thậm chí là tạo mẫu) nhưng sẽ thích python hơn cho kịch bản.

Một điều khác cần xem xét là các thư viện / công cụ hiện có trong / liên quan đến ngôn ngữ. Tôi không ở vị trí để so sánh các thư viện lisp với các thư viện python, nhưng tôi đoán các thư viện và vấn đề nguồn mở bây giờ rất nhiều so với trước đây.

Câu trả lời này được lấy cảm hứng từ sự so sánh sau đây giữa lisp và python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html


2
Cá nhân tôi thấy Lisp dễ đọc hơn hầu hết các ngôn ngữ và tôi chỉ học được vài tuần trước. Python đặc biệt sạch sẽ so với hầu hết các ngôn ngữ, vâng, nhưng nếu bạn so sánh lisp với một cái gì đó như C ++ thì nó sạch hơn và dễ đọc hơn. Theo kinh nghiệm của tôi nào.
Zeusoflightning125

4

Tôi nhớ đã nghe rằng, là một ngôn ngữ chức năng, Lisp là một lựa chọn rất tốt để thực hiện các thuật toán đệ quy. Có thể theo dõi một cây và làm việc theo cách của bạn trở lại là điều cần thiết khi xem xét các quá trình ra quyết định (truyền tải) và kết quả cuối cùng (nút lá).

Điều này đã được nói với tôi trong một khóa học về AI tại trường đại học nơi chúng tôi học Lisp.


1
Macro trong Lisp mạnh hơn bất kỳ thứ gì khác, cho phép bạn triển khai OOP chỉ trong 50 dòng mã Lisp và REPL cho phép bạn chỉnh sửa chương trình của mình trong khi chương trình vẫn chạy ... Chỉ Lisp mới có thể chỉnh sửa mã nguồn của riêng mình một cách dễ dàng ...
aoeu256

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.