Có bằng chứng nào cho thấy lisp thực sự tốt hơn các ngôn ngữ khác ở trí tuệ nhân tạo không? [đóng cửa]


21

Dường như có một niềm tin đã tồn tại từ lâu (chủ yếu là bởi những người không nói dối) rằng lisp tốt hơn hầu hết các ngôn ngữ tại AI.

Niềm tin này bắt nguồn từ đâu? Và có bất kỳ cơ sở trong thực tế cho nó?


4
Tiêu đề hỏi: Lisp có tốt hơn các ngôn ngữ khác tại AI không?. Câu hỏi tự đặt ra: Lisp có tệ ở mọi thứ ngoài AI không?. Đây là những câu hỏi rất khác nhau (xem xét kịch bản 1: Lisp là ngôn ngữ tốt nhất cho mọi thứ và kịch bản 2: Lisp là ngôn ngữ tồi tệ nhất cho mọi thứ). Bạn có thể muốn chỉnh sửa tiêu đề hoặc nội dung câu hỏi để làm rõ hơn câu hỏi nào bạn thực sự hỏi.
Gareth McCaughan

9
Tôi cho rằng nếu câu trả lời được chấp nhận đến từ máy Lisp thì chúng ta sẽ có giải pháp nào?
Martin Beckett

1
@Martin mặc dù bất kỳ AI cơ bản nào cũng phải có nghĩa vụ bảo vệ người tạo ra nó hoặc bị bỏ lại để nghi ngờ về sự tồn tại của chính nó.
Nicole

Đây là một cái nhìn chân thực, tuyệt vời về Lisp cho AI từ Peter Norvig, được viết 10 năm hoặc lâu hơn sau khi Paradigms of AI Lập trình được xuất bản. norvig.com/Lisp-retro.html
michiakig

1
@jwenting: Tôi nghĩ rằng những điểm quan trọng nhất của Norvig về Java vẫn còn đúng mười năm sau: Java không có cơ sở lập trình meta và không hỗ trợ lập trình chức năng.
kevin cline

Câu trả lời:


22

Một trong những khác biệt chính giữa các ngôn ngữ giống LISP và các ngôn ngữ khác là trong LISP, mã và dữ liệu là cùng một thứ. Điều này cho phép thực hiện những việc như chương trình sửa đổi một số thuật toán của nó trong thời gian chạy vì nó "học" những điều mới, như một phần bản địa của ngôn ngữ.

Một khía cạnh khác đi sâu vào vấn đề này, mặc dù không nhiều, là khả năng của LISP để dễ dàng thêm ngữ nghĩa ngôn ngữ mới thông qua các macro. Điều này cho phép thực sự đi vào và xác định DSL mà AI của bạn hoạt động và có thể phát triển, với tiềm năng cho ngôn ngữ đó phát triển, tự sửa lỗi và phát triển trong khi AI đang chạy.

Đồng ý với Quadres Age, lịch sử sử dụng LISP đi một chặng đường dài hướng tới hình ảnh LISP rằng nó tốt cho AI. Tại sao LISP được sử dụng cho AI bao gồm lịch sử chi tiết hơn nhiều.


3
Khách sạn này được gọi là BTW Homoiconicity .
MSalters

5

Một số chương trình đầu tiên trong lisp là các định lý lý thuyết, toán học tượng trưng, ​​ELIZA cổ điển, v.v. Ngoài những cuốn sách như PAIP của Peter Norvig, cũng như thực tế là lisp bắt nguồn từ phòng thí nghiệm AI của MIT, nó có hình ảnh đó điều đó là tốt cho AI.

DARPA cũng tài trợ cho các trường đại học nghiên cứu về AI và mua số lượng phần cứng đáng kể từ Symbolics. Sự thiếu hụt tiền cuối cùng đã dẫn đến cái gọi là "mùa đông AI".

Cuối cùng, các ngôn ngữ gốc như Fortran (hay "ngôn ngữ" như ASM) đã được sử dụng chính cho điện toán số. Bạn đã làm việc với các số và mảng của chúng. Ngày nay chúng ta có các biểu tượng hoặc khả năng tạo ra hầu hết mọi đối tượng chúng ta muốn, trong hầu hết các ngôn ngữ hiện đại.

Vì vậy, lý do lisp đã tốt hơn cho AI tại một thời điểm không còn là vấn đề nữa. Tuy nhiên, ý tưởng cho rằng "lisp là tốt cho AI" vẫn còn tồn tại.

Có hay không lisp là một ngôn ngữ tốt hơn bởi vì các tính năng và cấu trúc của nó hoàn toàn là một trường hợp khác (vì thực sự loại này áp dụng cho nhiều lĩnh vực khác ngoài AI, và thường sẽ dẫn đến chiến tranh ngọn lửa của bạn).


5
Một cách tốt hơn để đặt nó có thể là những người giỏi về AI đã tình cờ sử dụng Lisp cho nó.

1
Và đó không phải là tình cờ, khi những người tiên phong bắt đầu. Những ngôn ngữ khác họ có thể chọn từ những năm 1950?
Bo Persson

2
@Persson: Tôi cho rằng đó là một phần tình cờ. Nếu PASCAL là ngôn ngữ tiếp theo được tạo ra sau FORTRAN, tôi nghi ngờ rằng AI sẽ cất cánh với điều đó. LISP không chỉ là một "ứng cử viên tốt hơn" so với FORTRAN, nó còn xảy ra (có lẽ là tình cờ!) Để trở thành một ứng cử viên khá tốt .
Tứ giác

Bạn giải thích lý do tại sao Lisp có một lợi thế (tài trợ) nhưng kết luận rằng " các lý do lisp là tốt hơn cho AI cùng một lúc không còn là trường hợp."
Đánh dấu C

Tôi đã mất bình luận tiếp theo mà tôi đang làm việc, nhưng tôi hy vọng sẽ trở lại và hoàn thành sau.
Đánh dấu C

3

Chúng ta hãy xem xét một số chương trình AI hiện tại: (1) Robot, ví dụ như xe tự lái. Trong thử thách lớn của DARPA, phần mềm lái xe ô tô vượt trội không phải là Lisp. Thay vào đó, nó là một ngôn ngữ thủ tục như C ++ hoặc Java. (2) Máy dịch ngôn ngữ tự nhiên. Lisp không được sử dụng cho mục đích này bởi các hệ thống sản xuất được sử dụng rộng rãi. (3) Chơi trò chơi, ví dụ như các chương trình cờ vua. Lisp không được sử dụng cho mục đích này bởi các chương trình cờ vua ưu việt, được sử dụng rộng rãi như Fritz.

Lisp được phát minh và phát triển bởi các phòng thí nghiệm AI của Hoa Kỳ vào những năm 1960 để nhanh chóng tạo ra các chương trình logic biểu tượng trong đó các cấu trúc dữ liệu Lisp bản địa phù hợp với mức độ trừu tượng cần thiết - ví dụ: các từ tiếng Anh có thể là biểu tượng trong danh sách, các công thức logic có thể dễ dàng đại diện như danh sách các toán tử và toán hạng.

Nhưng đối với các chương trình sản xuất, lợi thế kỹ thuật phần mềm của các ngôn ngữ gõ tĩnh và nhiều thư viện bên thứ ba, có nghĩa là Lisp thậm chí không được xem xét cho các hệ thống hiện đại lớn thực hiện các tác vụ AI.


2
Bạn phải cân nhắc khi thảo luận về các sản phẩm thương mại (và tôi cho rằng các đối thủ thách thức DARPA là như vậy, vì chúng được tạo ra theo thời gian và hạn chế về ngân sách) rằng LISP không phải là ngôn ngữ thường được biết đến và do đó các lập trình viên LISP có thẩm quyền rất khó để tìm và có thể đắt tiền (và / hoặc excentrics, không phải thành viên tốt cho nhóm trung bình). Do đó, nó có ý nghĩa kinh tế để sử dụng một cái gì đó khác ngay cả khi LISP có thể "tốt hơn" với nó (không nói nó là cần thiết, chỉ là dữ liệu bạn trình bày là không thuyết phục để nói rằng nó không phải là).
jwenting

3
Không có nhiều "trí thông minh" trong các chương trình đó. Đó là xử lý tín hiệu rất nhiều, vv Các chương trình cờ vua cũng không sử dụng AI. Nó chủ yếu là vũ phu, tìm kiếm được tối ưu hóa cao + một số thứ khác.
Rainer Joswig

"LISP không phải là một ngôn ngữ thường được biết đến và do đó, các lập trình viên LISP có năng lực rất khó tìm và có thể rất tốn kém": Tôi mới bắt đầu học Common Lisp và có vẻ không khó chút nào. OK, để trở thành một giáo sư Lisp có thể mất nhiều thời gian, nhưng tôi không nghĩ rằng sẽ khó tìm được lập trình viên sẵn sàng học Lisp nếu có cơ hội làm việc trong các dự án cụ thể.
Giorgio

3

@Stephen Sậy nói rất hay. Tôi chỉ có thể thêm rằng tôi đã ở MIT AI Lab vào những năm 70. Tôi đã nghe một câu chuyện sau đó về nguồn gốc của Lisp. Tôi không thể thề đó là sự thật, nhưng nó như thế này:

John McCarthy đã ở MIT vào những năm 50, và anh ta đã làm việc để chứng minh các thuộc tính của các chương trình, và vì điều này, anh ta đã sử dụng một cú pháp đơn giản tương tự như Lambda Tính.

Câu chuyện là một trong những học sinh tốt nghiệp muốn thực hiện một dự án (tương tự, hoặc chứng minh định lý, hoặc toán học tượng trưng, ​​tôi không nhớ đó) và hỏi McCarthy nên sử dụng ngôn ngữ nào. Câu trả lời - Tất nhiên là Fortran. (Không có nhiều thứ khác, và bản thân việc xử lý danh sách khá nổi tiếng, nhưng chỉ là các gói chương trình con, không phải là ngôn ngữ.) Vâng, bằng cách nào đó đã dẫn đến một chương trình xử lý các ký hiệu trong các cấu trúc danh sách lồng nhau. Cùng với một cách để đọc và in chúng, sau đó là một evalchức năng và Voila '- một ngôn ngữ. Một ngôn ngữ xử lý LISt. Nó cất cánh từ đó.

Đối với loại thuật toán mà chúng ta đang làm trong những ngày đó (và vẫn còn rất ít người đang làm) một ngôn ngữ là cần thiết để có thể dễ dàng thao tác các biểu thức tượng trưng. Đó là những gì Lisp giỏi. Đã có nhiều biến thể về khái niệm cơ bản, đi theo các tên khác nhau, như Prolog, Scheme, v.v.

Vì vậy, AI có nghĩa là nhiều thứ đối với nhiều người và các ngôn ngữ khác nhau tốt cho những thứ khác nhau, nhưng đối với các vấn đề có thể được mô tả là thao túng biểu tượng, thật khó để tìm thấy một ngôn ngữ hữu ích không bằng cách nào đó xuất phát từ Lisp.


1
Từ riêng của John McCarthy: www-formal.stanford.edu/jmc/history/lisp/lisp.html

@ Thorbjørn: Cảm ơn liên kết đó. Mặc dù tôi đã sử dụng Lisp rất nhiều trong vài năm, tôi chưa bao giờ chú ý đến nguồn gốc của nó.
Mike Dunlavey

Mặc dù Prolog tốt như tính toán tượng trưng, ​​tôi không nói nó có liên quan chặt chẽ với Lisp: Lisp dựa trên phép tính lambda, Prolog trên logic thứ tự đầu tiên (hai mô hình tính toán khác nhau).
Giorgio

@Giorgio: Tổ tiên và anh em họ của Prolog hầu hết được viết bằng gì? Lisp. Chương trình khấu trừ của Fischer Black, Micro-Planner, v.v ... Đối với tôi, một cuốn sách hay về điều này là Nền tảng suy diễn của lập trình máy tính .
Mike Dunlavey

"Tổ tiên và anh em họ của Prolog hầu hết được viết bằng gì?": Ah OK, bạn có nghĩa là có liên quan chặt chẽ theo nghĩa là người ta đã sử dụng để thực hiện người khác, không phải họ theo một mô hình tương tự.
Giorgio

1

Lisp có lợi thế cho những thứ được gọi là AI - ít nhất là logic, tìm kiếm và phân tích những thứ liên quan đến hầu hết AI cho đến khoảng những năm 90.

Một lợi thế lớn của Lisp là hỗ trợ cho các macro - mã dưới dạng dữ liệu, siêu lập trình.

Ví dụ, ML tiêu chuẩn (SML) là một ngôn ngữ khác được sử dụng rộng rãi trong AI, kể từ những năm 80. CAML khách quan và F # là sự phát triển của SML.

Một lợi thế lớn của gia đình ML (và Haskell, v.v.) là khớp mẫu. Điều này có lẽ cũng có sẵn trong Lisp, nhưng thông qua một thư viện siêu lập trình thay vì được tích hợp vào ngôn ngữ. Nó cũng có sẵn trong Haskell, nhưng hiện tại ít nhất, việc khớp mẫu không phổ biến ngoài các ngôn ngữ lập trình chức năng.

Tôi đã thấy các tuyên bố rằng LISP về cơ bản là một phép tính lambda chưa được mở rộng và ML về cơ bản là một phép tính lambda được gõ mở rộng. Tôi không có kiến ​​thức về tính toán lambda đánh máy để nói chắc chắn.

AI cũng đã trở thành một chủ đề rộng lớn hơn nhiều trong những năm qua - đến mức nó gần như đã biến mất hoàn toàn. Khai thác dữ liệu có thể được coi là một trường con của AI. Nhiều thứ AI (OCR, nhận dạng bài giảng) gần như đã ngừng trở thành AI - chúng chỉ là các ứng dụng, giống như bất kỳ ứng dụng nào khác. Và AI phụ thuộc rất nhiều vào xử lý tín hiệu và các loại khủng hoảng số khác so với trước đây.

Đối với OCR và nhận dạng bài giảng, tất nhiên AI luôn phụ thuộc vào xử lý tín hiệu và xử lý số. Vâng, có một số mâu thuẫn trong việc này ;-) Tôi không thể đưa ra trọng số cho những điều mà tôi không thực sự biết.

Dù sao, kết quả là, có lẽ không có một ngôn ngữ nào phù hợp cho cả một ứng dụng AI hiện đại - tôi đoán (không có kiến ​​thức đầu tay) rằng có rất nhiều sự phát triển đa ngôn ngữ trong AI hiện đại. Và tôi gần như có thể đảm bảo rằng bạn sẽ tìm thấy C và C ++ trong một số dự án, để có được hiệu suất khủng. Tôi sẽ không ngạc nhiên nếu có nhiều Python vì những lý do tương tự - với một thư viện số tốt, Python có thể dễ dàng xử lý các tác vụ khủng hoảng số.

Trong một trong những chiếc xe tự lái đó, tôi tưởng tượng hệ thống tầm nhìn được viết bằng một ngôn ngữ khác (và chạy trên phần cứng khác nhau) cho hệ thống quy hoạch tuyến đường.

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.