Kết quả thực nghiệm trong bài báo CS


31

Tôi mới tham gia vào lĩnh vực CS và tôi đã nhận thấy rằng trong nhiều bài báo mà tôi đọc, không có kết quả thực nghiệm (không có mã, chỉ có bổ đề và bằng chứng). Tại sao vậy? Xem xét rằng Khoa học Máy tính là một khoa học, không nên theo phương pháp khoa học?


26
Câu trả lời ngắn gọn là "khoa học máy tính" có rất nhiều thứ. Một số phần như (một số) AI thực sự là khoa học. Các phần khác là kỹ thuật, và mặt lý thuyết là (áp dụng) toán học. Các bộ phận của HCI giống như nghệ thuật hơn. Khoa học máy tính là một cái lều rộng.
Aaron Roth

6
Nếu bạn có bằng chứng, tại sao bạn thậm chí cần kết quả thực nghiệm?
Aryabhata

2
@Moron: Làm thế nào để bạn chứng minh rằng một thuật toán có thể thực hiện được mà không cần thực hiện nó?
Jukka Suomela

8
CS lý thuyết dường như gần giống với Vật lý toán học cũng tránh kết quả thực nghiệm. Nếu bạn muốn một cái gì đó như Vật lý Thực nghiệm, bạn có thể xem nghiên cứu về Kỹ thuật phần mềm, Xác minh chương trình, Hệ thống cơ sở dữ liệu, v.v.
Yaroslav Bulatov

4
soi mói: " các phương pháp khoa học"?
Kaveh

Câu trả lời:


21

Toán học cũng là một môn khoa học, và bạn sẽ phải tìm kiếm trong một thời gian dài để tìm ra kết quả thực nghiệm được công bố trong lĩnh vực này (mặc dù tôi đoán là phải có một số). Có những lĩnh vực khoa học khác trong đó "bổ đề và bằng chứng" được đánh giá qua kinh nghiệm, chẳng hạn như vật lý lượng tử. Điều đó nói rằng, hầu hết các ngành khoa học pha trộn lý thuyết và thực hành (với các tỷ lệ khác nhau), và Khoa học Máy tính cũng không ngoại lệ.

Khoa học máy tính có nguồn gốc từ Toán học (ví dụ tiểu sử của Turing http://en.wikipedia.org/wiki/Alan_Turing ), và rất nhiều kết quả (thường được gọi là trong lĩnh vực "khoa học máy tính lý thuyết") bao gồm các bằng chứng rằng các máy tính trong một số mô hình tính toán có thể giải quyết một số vấn đề trong một số lượng hoạt động nhất định (ví dụ: các hội nghị như FOCS, STOC, SODA, SoCG, v.v.). Tuy nhiên, nhiều kết quả khác của khoa học máy tính liên quan đến khả năng ứng dụng các lý thuyết đó vào thực tiễn cuộc sống, thông qua phân tích kết quả thực nghiệm (ví dụ: các hội nghị như WADS, ALENEX, v.v.).

Người ta thường cho rằng lý tưởng là sự cân bằng tốt giữa lý thuyết và thực tiễn, như trong "Khoa học tự nhiên", trong đó việc quan sát các thí nghiệm thúc đẩy việc tạo ra các lý thuyết mới, từ đó gợi ý các thí nghiệm mới để xác nhận hoặc xác nhận những điều đó: hội nghị cố gắng chấp nhận cả kết quả thực nghiệm và lý thuyết (ví dụ ESA, ICALP, LATIN, CPM, ISAAC, v.v.). Trường con của "Thuật toán và cấu trúc dữ liệu" trong khoa học máy tính có thể bị mất cân bằng theo nghĩa các hội nghị "Lý thuyết" thường được xếp hạng cao hơn so với thực nghiệm. Tôi tin rằng điều này không đúng trong các lĩnh vực khác của khoa học máy tính, chẳng hạn như HCI hoặc AI.

Hy vọng nó giúp?


Cảm ơn, nó thực sự giúp rất nhiều. Gần đây tôi đã quan tâm đến lý thuyết đồ thị và trong các bài báo tôi đang đọc, hầu như không ai trong số họ có mã hoặc kết quả thử nghiệm. Đây là lý do tại sao tôi hỏi. Khi bạn làm toán thuần túy, bạn không thể tạo ra kết quả thực nghiệm do đó bằng chứng là tất cả. Nhưng trong Lý thuyết đồ thị, không khó để mã hóa thuật toán của bạn và tạo ra kết quả thử nghiệm hữu ích! Hãy giải quyết vấn đề MST. Các triển khai công nghiệp hiện tại là Prim / Kruskal và Boruvska, tuy nhiên, các thuật toán mạnh hơn được mô tả trong các bài báo nhưng chúng không được sử dụng vì chưa ai từng mã hóa chúng.
toto

1
Vâng, bạn có thể thực hiện các thuật toán từ lý thuyết đồ thị. Nhưng đối với nhiều vấn đề thú vị trong lý thuyết đồ thị, đó là ít nhất là -hard, điều đó sẽ vô dụng vì chỉ những đầu vào rất nhỏ mới có thể tính toán được do độ phức tạp theo thời gian của các thuật toán. NP
Mathieu Chapelle

1
@ toto Chắc chắn những gì bạn đang nói áp dụng cho một số vấn đề, nhưng đối với vấn đề MST, bạn có thể thấy kết quả (có thể hơi lỗi thời) của việc triển khai một số thuật toán mạnh mẽ trong sách.google.com.vn
Abel Molina

1
@toto. Đây không phải là lý do duy nhất các thuật toán cũ được sử dụng. Đối với phối cảnh TCS, luôn tốt hơn O ( n log n ) . Nhưng big-oh có thể ẩn một hằng số lớn làm cho thuật toán không thực tế trong thực tế. Một công việc như vậy nhằm vào người TCS và mã hóa thuật toán sẽ không mang lại lợi ích hay thậm chí gây nhầm lẫn cho người đọc. Ôi(n)Ôi(nđăng nhậpn)
chazisop

24

Thực hiện tốt các thuật toán là một kỹ năng cần một bộ công cụ khác với việc chỉ chứng minh các định lý. Nhiều thuật toán được phát hiện bởi cộng đồng lý thuyết đã thực sự được triển khai trong thực tế (mặc dù tôi muốn thấy cộng đồng lý thuyết có vai trò lớn hơn trong quá trình này). Vật lý không yêu cầu các nhà nghiên cứu cùng thực hiện lý thuyết và thí nghiệm, mặc dù hai nhóm dự kiến ​​sẽ giao tiếp với nhau. Tại sao bạn không nên thấy sự phân chia tương tự trong khoa học máy tính?

THÊM VÀO EDIT:

Mở rộng nhận xét của tôi khi trả lời Suresh về ý nghĩa của "vai trò" ở trên, tại Bell Labs và AT & T Labs, các nhà nghiên cứu về thuật toán được khuyến khích nói chuyện với mọi người trong quá trình phát triển. Tôi đã không làm nhiều thứ như tôi có thể nên có, nhưng tôi đã lấy được ít nhất một tờ giấy từ nó, và tôi nghĩ nó sẽ tốt cho lĩnh vực này nếu có nhiều giao tiếp giữa những người trong lý thuyết tại các trường đại học và các học viên . Điều này không có nghĩa là tôi nghĩ rằng tất cả mọi người nghĩ ra thuật toán nên mã hóa nó (ngay cả khi nó thực tế).

Mặt khác, các thuật toán mã hóa (hoặc có một mã sinh viên) mà bạn nghĩ có thể thực tế có thể hữu ích trong việc giúp chúng thích nghi với các học viên. Hãy xem xét một ví dụ. Lempel và Ziv đã viết hai bài báo kỹ thuật vào năm 1977 và 1978 về các thuật toán nén dữ liệu mới. Mọi người bỏ qua chúng. Năm 1984, Welch đã viết một bài báo kỹ thuật ít hơn nhiều về một chút thay đổi về LZ78 đã cải thiện phần nào hiệu suất của nó và đưa ra kết quả của một nghiên cứu nhỏ so sánh hiệu suất của nó với các phương pháp nén dữ liệu khác. Nó đã được xuất bản trong một tạp chí được đọc bởi một số lập trình viên, và thuật toán được đưa ra bởi một vài dòng mã giả. Phương pháp này nhanh chóng được điều chỉnh ở một số nơi, cuối cùng dẫn đến tranh chấp sở hữu trí tuệ khét tiếng.

Tất nhiên, một trong những cách tốt nhất để các nhà nghiên cứu thuật toán giao tiếp với thực tiễn là tạo ra những sinh viên tốt nghiệp đi làm và làm việc tại Google, IBM hoặc các công ty khác và chúng tôi đã làm điều đó. Một cách khác có thể là trả lời các câu hỏi của học viên trong diễn đàn này. Hy vọng rằng, chúng tôi cũng đang làm một công việc hợp lý.


4
Vì vậy, bạn đang nói rằng mặc dù trong vật lý không có kỳ vọng về cùng một người làm cả hai, trong lý thuyếtCS chúng ta nên làm cả hai? Có phải bởi vì các mô hình tính toán gần giống với thực tế hơn các mô hình vật lý?
Suresh Venkat

10
Tôi đang nói rằng các nhà lý thuyết nên nói nhiều hơn với các học viên. Nếu bạn nhìn vào lịch sử vật lý, những điều tồi tệ bắt đầu xảy ra khi các nhà lý thuyết ngừng nói chuyện với các nhà thực nghiệm. Tôi thực sự nghĩ rằng chúng ta có một lượng giao tiếp hợp lý giữa hai nhóm ngay bây giờ, nhưng điều đó sẽ không gây hại gì nữa.
Peter Shor

3
Tôi sẽ không khái quát nhưng tôi nghĩ rằng nhiều nhà nghiên cứu đơn giản là không thể viết mã / không thích và họ muốn để công việc thực tế được thực hiện bởi một trong những sinh viên của họ. Đó là trường hợp của tôi và người cố vấn của tôi.
toto

Sự căng thẳng liên quan đến đặc điểm kỹ thuật chính thức so với tính toán thực tế đã lùi xa trong lịch sử STEM. Đôi khi, các đặc điểm kỹ thuật chính thức dẫn đầu ("Về lý thuyết sóng kích nổ cố định" của von Neumann so với các mô phỏng tính toán tiếp theo) và đôi khi là các tính toán thực tế ("Điều hướng thực hành mới của người Mỹ" [1807] so với "Các điều kiện phản đối của Gauss" [1827]). Các nhà toán học vĩ đại nhất (Gauss và von Neumann trong các ví dụ được trích dẫn ở trên) thường kết hợp các thông số kỹ thuật chính thức với các tính toán thực tế.
John Sidles

3
Lịch sử của Lempel-Ziv, và xem các bài đăng trên StackOverflow, vừa khiến tôi xây dựng một giới luật rất đơn giản có thể giúp các nhà lý thuyết thuật toán đưa ra các học viên vy đã triển khai: Nếu bạn nghĩ thuật toán của bạn có thể thực tế, hãy đặt mã giả vào giấy.
Peter Shor

17

Một lĩnh vực nghiên cứu sử dụng các phương pháp và phương pháp thực nghiệm của Khoa học máy tính lý thuyết là lĩnh vực được gọi là "Thuật toán thực nghiệm" hoặc "Kỹ thuật thuật toán". Giống như Chris đã đề cập, điện toán hiệu năng cao phụ thuộc rất nhiều vào điều này vì các hệ thống hiện đại có các vấn đề về bộ nhớ cache và độ trễ phức tạp mà chúng ta gặp khó khăn trong việc mô hình hóa.

Gerth BrodalPeter Sanders là những ví dụ điển hình của các nhà nghiên cứu duy trì một chân trong cả hai lĩnh vực "bằng chứng" và "thực nghiệm".

--Nâng cấp 1/20 / 2013-- Tôi cũng sẽ đề cập đến một bài thuyết trình tuyệt vời của Robert Sedgewick .


4
Cả ALENEX và ESA đều khuyến khích các thuật toán ứng dụng hoạt động và cũng có một hội nghị (SAE) về chủ đề này.
Suresh Venkat

SAE là gì? TLA đó là không thể kết hợp. Bạn có một URL cho nó?
Peter Boothe

5
SAE là một lỗi đánh máy cho BIỂN, Hội nghị chuyên đề về các thuật toán thử nghiệm.
David Eppstein

1
Bạn cũng có thể thực hiện Kỹ thuật thuật toán theo một cách nghiêm ngặt hơn, tức là tinh chỉnh các mô hình lý thuyết để chúng phù hợp với thực tế nhưng vẫn còn phân tích chính xác. Mặc dù điều đó thật khó.
Raphael

Ôi(CbạnbeRoot(n))

12

Điều này phụ thuộc vào kỷ luật bạn đang ở; như Jeremy tuyên bố, có một phổ của lý thuyết so với thực hành.

Các chủ đề như sự phức tạp có xu hướng được đặt trọng số về phía lý thuyết, vì thường mục tiêu là tìm một ranh giới cho không gian hoặc thời gian chạy. Việc thực hiện một thuật toán trong C ++ và sau đó chạy nó một loạt lần sẽ không chứng minh rằng một vấn đề đã hoàn thành NP.

Như một đối cực, điện toán hiệu năng cao (với các hội nghị như Siêu máy tính ) đều theo kinh nghiệm; không ai có thể gửi bằng chứng cho một ấn phẩm HPC vì có quá nhiều sự thay đổi liên quan đến hệ thống phân cấp bộ nhớ và chi phí nhân.

Vì vậy, những gì có vẻ như cùng một câu hỏi (Mất bao lâu một cái gì đó làm để chạy?) Sẽ được tiếp cận hai cách hoàn toàn khác nhau tùy thuộc vào mục tiêu, kỹ thuật, cộng đồng vv Xem Poul-Henning Kamp là bạn đang làm sai cho một ví dụ về sự bất hòa


10

Trong các ngôn ngữ lập trình nghiên cứu nhiều ý tưởng cho các cấu trúc ngôn ngữ lập trình mới hoặc các cơ chế kiểm tra kiểu mới xuất phát từ lý thuyết (có thể được thông báo bằng kinh nghiệm trong thực tế, có thể không). Thông thường một bài báo được viết về các cơ chế như vậy từ quan điểm chính thức / lý thuyết / khái niệm. Điều đó tương đối dễ làm. Tiếp đến là rào cản đầu tiên: thực hiện các cấu trúc mới trong bối cảnh trình biên dịch hiện có và thử nghiệm với nó, về hiệu quả hoặc tính linh hoạt. Điều này cũng tương đối dễ dàng.

Nhưng sau đó chúng ta có thể nói rằng cấu trúc lập trình tạo thành một bước tiến cho khoa học lập trình không? Chúng ta có thể nói rằng nó làm cho chương trình viết dễ dàng hơn? Chúng ta có thể nói rằng nó làm cho ngôn ngữ lập trình tốt hơn không?

Câu trả lời là không. Một đánh giá thực nghiệm đúng đắn liên quan đến điểm số của các lập trình viên có kinh nghiệm trong khoảng thời gian lớn sẽ là cần thiết để trả lời các loại câu hỏi đó. Nghiên cứu này hầu như không bao giờ được thực hiện. Thẩm phán duy nhất về giá trị của ngôn ngữ lập trình (và cấu trúc của nó) là sự phổ biến của ngôn ngữ. Và đối với những người theo chủ nghĩa thuần túy ngôn ngữ lập trình, điều này đi ngược lại với những gì giả thuyết của chúng tôi nói với chúng tôi.


7

Có lẽ tôi đang thiếu động lực cho câu hỏi của bạn nhưng có nhiều ví dụ về kết quả thực nghiệm thúc đẩy nghiên cứu, thuật toán và các kết quả khác.

MP3 sử dụng psychoacoust để tối ưu hóa thuật toán mã hóa con người.

π

Đồng thời, Bailey và Borwein là những người ủng hộ toán học thực nghiệm. Xem "Máy tính là quan trọng: Giới thiệu về toán học thực nghiệm" , "Các chuyến tham quan tính toán trong lý thuyết số " trong số những người khác . Người ta có thể lập luận rằng đây là Toán học thực nghiệm hơn nhưng tôi sẽ lập luận rằng ở cấp độ này, cuộc thảo luận phân biệt là ngữ nghĩa.

Các giai đoạn chuyển tiếp của các vấn đề NP-Complete là một lĩnh vực khác mà kết quả thực nghiệm được sử dụng rất nhiều. Xem Monasson, Zecchina, Kirkpatrick, Selman và TroyanskyGent và Walsh để bắt đầu, mặc dù có rất nhiều, nhiều hơn nữa (xem tại đây để khảo sát ngắn).

Mặc dù không hoàn toàn về trình độ Khoa học Máy tính hoặc Toán học, nhưng có một cuộc thảo luận ở đây về cách thức thời gian chạy trường hợp trung bình của tiện ích unix đánh bại các thuật toán trường hợp xấu nhất vì nó dựa trên thực tế rằng nó đang tìm kiếm văn bản có thể đọc được của con người (grep không tốt hoặc tệ nhất trên các tệp có ký tự ngẫu nhiên trong đó).

Ngay cả Gauss cũng sử dụng bằng chứng thực nghiệm để đưa ra giả thuyết của mình về Định lý số nguyên tố.

Khai thác dữ liệu ( giải pháp của Bellkor cho Giải thưởng Netflix để tạo ra một hệ thống khuyến nghị tốt hơn) có thể được lập luận là một lý thuyết hoàn toàn dựa trên bằng chứng thực nghiệm. Trí tuệ nhân tạo (thuật toán di truyền, mạng lưới thần kinh, v.v.) phụ thuộc rất nhiều vào thử nghiệm. Mật mã học là một sự thúc đẩy liên tục giữa các nhà sản xuất mã và các công cụ phá mã. Tôi thực sự chỉ đặt tên cho một vài người và nếu bạn nới lỏng định nghĩa của bạn về kinh nghiệm, thì bạn có thể tạo ra một mạng lưới thậm chí rộng hơn.

Tôi xin lỗi vì đã quá phân tán khi trả lời câu hỏi của bạn nhưng tôi hy vọng tôi đã đưa ra ít nhất một vài ví dụ hữu ích.

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.