Tại sao Fishtesting kiểm tra Stockfish chống lại chính nó, mà không phải các động cơ khác?


11

Theo tôi hiểu cái gọi là Fishtesting , mọi người viết các bản vá, sau đó thử các bản vá so với phiên bản Stockfish hiện tại. Nếu phiên bản mới hoạt động tốt hơn, nó được quảng cáo là phiên bản chính; nếu không thì nó bị từ chối.

Câu hỏi: tại sao thử nghiệm với phiên bản hiện tại của Stockfish? Nó đã hoạt động trong quá khứ và Stockfish hiện tại mạnh hơn rất nhiều so với Stockfish hai tuổi. Tuy nhiên, chúng ta cũng có thể thấy những hạn chế đối với phương pháp này. Mặc dù Stockfish hiện có khả năng phá hủy hoàn toàn các động cơ truyền thống khác, nhưng gần đây nó cũng đã mất siêu phẩm TCEC S15 trước Leela. Do đó, tại sao không thử nghiệm từng phiên bản mới chống lại Leela?

Câu trả lời rõ ràng là tài nguyên của Fishtesting đến từ CPU và Leela rất tệ về CPU. Tuy nhiên, điều đó không gây tử vong: người ta chỉ có thể cho Leela nhiều thời gian hơn, ví dụ với Stockfish chạy trên 10 giây mỗi trò chơi, cho Leela 100 giây mỗi trò chơi hoặc bất kỳ tỷ lệ cược thời gian nào là cần thiết để có tỷ lệ Leela theo tỷ lệ trên bề mặt. Điều này chắc chắn sẽ làm chậm Fishtesting, nhưng nếu nó dẫn đến một động cơ có thể đánh bại Leela trong một trận đấu, điều đó vẫn có thể đáng giá.

Câu trả lời:


4

Trước hết, điều không rõ ràng từ các câu trả lời khác là về nguyên tắc bạn có thể sử dụng bất kỳ đối thủ nào (có sức mạnh chơi ổn định) để so sánh sức mạnh chơi của hai phiên bản của một chương trình.

Tuy nhiên, có một số lý do chính đáng để kiểm tra các phiên bản trực tiếp với nhau, bất kể bạn đang phát triển Stockfish hay bất kỳ công cụ nào khác:

  • Việc so sánh sức mạnh chơi của các thực thể chơi cờ thường không đáp ứng được tính siêu việt, nghĩa là, nếu A> B và B> C, A <C vẫn có thể. Vì vậy, miễn là so sánh với một nhóm đối thủ lớn (để giải quyết vấn đề chuyển đổi) là không khả thi, thì so sánh trực tiếp phải là phép đo đáng tin cậy nhất, mặc dù tất nhiên bạn có thể có cùng một vấn đề cho ba phiên bản của một chương trình duy nhất.
  • Bằng cách so sánh trực tiếp, bạn giảm số lượng trò chơi cần thiết trong thử nghiệm, bởi vì bạn chỉ cần chạy một trận đấu thay vì hai trận, đồng thời bạn nhận được các thanh lỗi nhỏ hơn cho chênh lệch cường độ chơi.
  • Thử nghiệm với một đối thủ có sức mạnh tương đương (gần như) tối đa hóa độ nhạy thống kê của một kết quả trò chơi duy nhất, do đó bạn lại tiết kiệm được chi phí phần cứng. Nếu sự khác biệt về sức mạnh chơi là rất cao, thông tin / entropy của một trò chơi là rất thấp.

Hơn nữa, trong trường hợp fishtest / Stockfish, có một số lý do cụ thể tại sao chọn so sánh trực tiếp là lựa chọn nguyên tắc nhất:

  • Vào thời điểm fishtest ban đầu được phát triển, Leela không có sẵn.
  • Sử dụng các công cụ thương mại như Komodo và Houdini không phải là một lựa chọn vì vấn đề cấp phép.
  • Sử dụng các chương trình khác có thể gây ra rủi ro bảo mật cũng như phụ thuộc phần mềm hoặc yêu cầu phần cứng bổ sung mà bạn muốn tránh trong môi trường máy tính phân tán.
  • Trước Leela, về cơ bản không có công cụ nguồn mở nào đủ mạnh để có được kết quả có ý nghĩa thống kê khi phù hợp với Stockfish.

Bạn có chắc chắn thử nghiệm với động cơ thứ 3 làm tăng số lượng trò chơi cần thiết? Có vẻ như nó chỉ làm như vậy lần đầu tiên. Ví dụ: giả sử động cơ thứ ba là E và các phiên bản Stockfish đang thử là A, B và C. Chúng tôi chơi A và B 20 lần so với E và nhận được điểm. Bất cứ điều gì tốt hơn được giữ và người yếu hơn bị từ chối. Nói A được giữ. Khi nói đến thử nghiệm phiên bản C, chúng tôi đã có kết quả AE, vì vậy chúng tôi chỉ cần nhận kết quả CE và áp dụng tương tự cho tất cả các phiên bản trong tương lai.
Allure

2
Ngay cả khi bạn luôn kiểm tra cùng một phiên bản của công cụ tham chiếu của mình (điều này khiến nó rất dễ bị quá tải), sự không chắc chắn về thống kê về chênh lệch Elo kết quả vẫn sẽ lớn hơn, bởi vì bằng cách kết hợp các kết quả từ hai lần chạy (ví dụ: EloC - EloB ) bạn cũng cần kết hợp các độ không đảm bảo thống kê , thường làm tăng độ không đảm bảo theo hệ số sqrt (2). Để bù đắp cho điều đó, bạn sẽ cần phải chạy nhiều trò chơi hơn.
Fabian Fichter

7

Quan điểm của việc câu cá là kiểm tra xem phiên bản mới hơn của Stockfish có trở nên mạnh hơn không . Định nghĩa của mạnh hơn là nó đánh bại phiên bản trước của nó.

Tôi không chắc việc thử nghiệm từng phiên bản mới với một động cơ như Leela sẽ giúp ích như thế nào. Ý tưởng của bạn có thể chỉ chấp nhận một phiên bản Stockfish mới nếu nó hoạt động tốt hơn với Leela so với phiên bản Stockfish trước đó đã làm. Vì vậy, bây giờ mỗi phiên bản Stockfish được đảm bảo chơi tốt hơn so với Leela, nhưng không được đảm bảo là một người chơi cờ tốt hơn nói chung. Lý do là Stockfish có thể dựa vào một số đặc điểm nhất định trong lối chơi của Leela để giành được nhiều trận đấu hơn.

EDIT - Tôi nghĩ về một ví dụ có thể giúp đỡ ở đây. Giả sử bạn đã được xếp hạng 1500 vài năm trước và bây giờ là 1800. Nếu bạn chơi bản thân trong quá khứ của mình trong một trận đấu, rõ ràng bạn sẽ thắng. Nhưng để tranh luận, có thể bản thân 1500 của bạn sẽ hoạt động tốt hơn so với Kasparov so với bản thân 1800 hiện tại của bạn. Có lẽ bản thân 1500 ít bảo thủ hơn và gặp nhiều rủi ro hơn. Điều này quản lý để đánh bại Kasparov trong một trò chơi hiếm, trong khi bản thân 1800 hiện tại của bạn sẽ thua mỗi lần (tuy nhiên các trò chơi sẽ trung bình gần hơn một chút).


Và cuối cùng, "Gần hơn một chút" sẽ khó định lượng. Tự chơi là tốt nhất.
Brandon_J

1
Có vẻ như ngữ nghĩa, nhưng điều gì khiến bạn nói "mạnh hơn" được định nghĩa là đánh bại phiên bản trước? Người ta cũng có thể lập luận rằng "kẻ mạnh hơn" là người đã đánh bại Kasparov, chiến thắng giải đấu và giành được tất cả vinh quang, chứ không phải là người chiến thắng đối đầu.
Allure

1
@ Allure Tôi nghĩ rằng đối đầu chỉ là thước đo khách quan nhất của "sức mạnh". Nếu A đánh bại B, A chơi tốt hơn B, ergo A mạnh hơn B. Nhưng nếu A kém hơn C một chút so với B so với C, điều đó có nhất thiết có nghĩa là A> B không? Điều gì xảy ra nếu B hoạt động tốt hơn so với D, E, F, G ... so với A đã làm?
Vô minh quán tính

1
Nhưng bạn có một điểm. Hệ thống Ứng cử viên cho Giải vô địch thế giới là một giải đấu lớn, nhưng trước đây từng có những trận đấu riêng lẻ giữa những người chơi. Đối với một giải đấu lớn A có thể thua B nhưng vẫn thắng giải đấu và được tuyên bố là "mạnh nhất". Tuy nhiên, điều này là do A đánh bại nhiều người chơi khác nhau, không chỉ một người chơi C. Vì vậy, có thể thử nghiệm động cơ có thể được sử dụng trong đó phiên bản mới hơn chơi nhiều loại động cơ khác nhau, nhưng nó nhanh hơn và đơn giản hơn để thử nghiệm so với phiên bản cũ.
Vô minh quán tính

3

Tôi sẽ đồng ý chính với @inertialignorance nhưng tôi muốn làm rõ vị trí một chút.

Khi con người đóng vai con người, kết quả của một trò chơi là tương đối vô nghĩa, do sự biến đổi cực độ của trò chơi con người. (Tôi sẽ sử dụng Kasparov v Deep Blue như một ví dụ về sự biến đổi đó - vào một ngày tốt lành, tôi có thể đánh bại Kasparov trong trò chơi mà anh ta đã bỏ qua chống lại DB.) Vì vậy, hãy bỏ qua nhân loại này và tập trung vào máy.

Máy chơi ở mức độ kỹ năng phù hợp hơn nhiều so với con người. Do đó, một trò chơi có nghĩa là nhiều hơn và một loạt các trò chơi có ý nghĩa rất lớn. Vì vậy, nó có ý nghĩa để kiểm tra cải tiến Stockfish đề xuất đối với một máy. Nhưng tại sao Stockfish?

Đơn giản là vì không có cách nào để định lượng "làm tốt hơn chống lại Leela" theo bất kỳ cách có ý nghĩa nào. Nó có thể làm tốt hơn, và vẫn thua. Nhưng tiêu chuẩn nào tốt hơn, trong trường hợp đó? Làm thế nào để bạn chứng minh nó chơi tốt hơn? Tôi không thể thấy một tiêu chuẩn khả thi.

Thật đơn giản để chứng minh Stockfish Prime là một cải tiến so với Stockfish ban đầu bằng cách chỉ cần chơi một bộ trò chơi và đếm kết quả.

Edward Deming cho rằng việc chọn số liệu chính xác là rất quan trọng, bởi vì bạn chỉ biết bạn tiến bộ vì những gì bạn đo được. Vì vậy, đặt câu hỏi: mục đích của quá trình là gì? Tại sao bạn đề xuất một bản vá cho Stockfish?

Có thực sự là mục tiêu cuối cùng của bản vá để đánh bại Leela? Hay là để làm cho Stockfish chơi cờ tốt hơn? Tôi muốn nói đó là cái sau. Đánh bại Leela sẽ tự đến nếu chỉ Stockfish tiếp tục cải thiện đủ.

Vâng, một con đường cải thiện gia tăng cho Stockfish có thể đến một cao nguyên. Mặc dù vậy, con đường duy nhất có thể kiểm chứng được từ cao nguyên đó sẽ nằm trong việc tạo ra những thay đổi cho nó làm cho nó tốt hơn. Nếu một cách tiếp cận "đập vào tường", thì việc tìm kiếm cải tiến liên tục sẽ đưa ra một con đường khác. Nếu một đường dẫn thay thế được đề xuất không thể đánh bại đường dẫn hiện tại, tại sao lại chọn nó?


Làm thế nào để bạn chứng minh nó chơi tốt hơn? nó có nên đơn giản không? Chỉ cần chơi phiên bản trước 20k lần so với Leela, và phiên bản mới cũng 20 lần, sau đó so sánh kết quả.
Allure

@ Allure Nhưng theo giả thuyết, điều gì sẽ xảy ra nếu Stockfish Prime đánh bại Stockfish cũ, nhưng Stockfish cũ đã làm tốt hơn với Leela (và như Arlen đã đề cập, làm thế nào để bạn so sánh Stockfish nào "làm tốt hơn" với Leela). Bạn sẽ không giữ Stockfish Prime sau đó? Quá trình xác minh này có vẻ thiếu sót.
Vô minh quán tính

@InertialIgnorance Một cách công bằng, nếu Stockfish Prime làm tốt hơn với Leela, nhưng không thể đánh bại Stockfish cũ, bạn sẽ không giữ Stockfish Prime chứ? Nó liên quan đến cách người ta định nghĩa "mạnh hơn" và với tôi không rõ ràng rằng "mạnh hơn" đang chiến thắng đối đầu.
Allure

@ ALLure Tôi sẽ thừa nhận vẫn còn một lý do để bị xung đột ở đó, nhưng trong trường hợp đó, tôi cảm thấy rõ ràng hơn khi thích Stockfish Prime. Khi bạn muốn so sánh hai thứ nào tốt hơn (có thể là chính trị gia, vận động viên, v.v.), bạn thường khiến họ phải cạnh tranh với nhau trong một số thời trang. Không nhìn thấy ai đã làm tốt hơn so với một đồng nghiệp được lựa chọn tùy ý.
Vô minh quán tính

@InertialIgnorance vẫn còn, nếu Karjakin đã giành được Giải vô địch thế giới 2016, thật khó để tôi tưởng tượng rằng hầu hết mọi người sẽ coi anh ta là cầu thủ mạnh nhất thế giới. Phải, anh ta đã đánh bại Carlsen trong trận đấu đối đầu, nhưng chiến thắng giải đấu của Carlsen sẽ chỉ ra điều ngược lại. Tương tự như vậy khi Kasparov không phải là nhà vô địch thế giới, hầu hết mọi người vẫn coi anh là người mạnh nhất.
Allure

3

Dường như có một lý do phần cứng cho việc không thực hiện thay đổi này.

Vấn đề chính với việc sử dụng Leela làm đối thủ cạnh tranh là Leela chạy tốt nhất trên GPU. Có thể chạy Leela trên CPU, nhưng hiệu suất của Leela bị ảnh hưởng rất nhiều. OP đề nghị cung cấp cho tỷ lệ cược thời gian của Leela để bù lại, nhưng tỷ lệ cược thời gian không hoạt động tốt: hiệu suất của Leela yếu đi rất nhiều đến mức tỷ lệ cược thời gian cần thiết là rất lâu.

Để có được ý tưởng về Leela trên CPU yếu hơn bao nhiêu, chúng ta có thể xem Leela trong phần 12 của TCEC, khi nó không có hỗ trợ GPU và chạy trên CPU. Đây là một trò chơi ví dụ được chơi bởi Leela . Nếu một người nhìn vào tốc độ mà nó đạt được, đó là khoảng 1-3kn / s, hoặc 1000-3000 vị trí mỗi giây. Một cách tương đối, trong phần 15 mới nhất khi Leela đang chạy trên các GPU mạnh mẽ, nó sẽ đạt được khoảng 50kn / s ( ví dụ trò chơi ). Do đó, để có thể kiểm tra Stockfish chống lại Leela theo các điều khoản ngang nhau, người ta cần cung cấp cho Leela khoảng 25 lần tỷ lệ cược thời gian. Nếu Stockfish có một phút, Leela cần 25 phút.

Vào thời điểm viết bài, các bài kiểm tra Fishtesting ở hai lần kiểm soát thời gian: 10 giây + 0,1 giây / lần di chuyển và 60 giây + 0,6 giây / lần di chuyển vượt qua lần thứ hai rồi trở thành phiên bản "mới"). Ở tỷ lệ cược thời gian 25 lần, Leela cần 250 giây + 2,5 giây / lần di chuyển trong lần kiểm soát đầu tiên và 1500 giây + 15 giây / lần di chuyển trong lần kiểm soát lần thứ hai. Sự chậm lại là rất lớn; chúng tôi thực sự sẽ có Leela chơi ở các điều khiển thời gian nhanh chóng và không phải đạn. Số lượng trò chơi có thể hoàn thành trong đơn vị thời gian cũng sẽ giảm khoảng 25 lần. Fishtesting thường xuyên cần hàng chục ngàn trò chơi để kiểm tra từng bản vá; mất 25 lần miễn là hoàn thành mỗi bài kiểm tra nghe có vẻ chậm không thể chấp nhận được.

Để thêm dầu vào lửa, theo như tôi biết, Leela đã có một mạng nhỏ hơn trong phần 12 - hiệu năng của các mạng mới nhất có thể còn chậm hơn trên CPU bây giờ.

Có thể một ngày nào đó, nếu Fishtesting lấy tài nguyên GPU để kiểm tra với Leela, nó có thể chuyển đổi; tuy nhiên chúng tôi chưa ở thời điểm đó

Chỉnh sửa : Lc0-CPU hiện đang phát tại TCEC. Nó nhận được khoảng 5knps. Theo một số người trong cuộc trò chuyện, Lc0-CPU được sửa đổi để chơi trên CPU; không thay đổi, nó chậm hơn khoảng 80 lần so với trên GPU. Do đó, có một chi phí phần cứng thực sự để sử dụng Lc0-CPU làm đối thủ thử nghiệm.


Tôi nghi ngờ rằng điều này sẽ xảy ra. Hầu như tất cả các tác giả động cơ chủ yếu là thử nghiệm động cơ của họ chống lại chính nó và không chống lại các động cơ khác (có thể mạnh hơn). Ngoài ra có thể có giá trị khi kiểm tra chéo bằng cách thử nghiệm với các động cơ khác, nhưng đây không phải là phần chính của thử nghiệm, vì nó kém hiệu quả hơn.
Fabian Fichter

@FabianFichter tại sao nó kém hiệu quả hơn khi thử nghiệm với các động cơ khác?
Allure

Như tôi đã mô tả trong câu trả lời của mình ( Chess.stackexchange.com/a/24714/15415 ) sẽ kém hiệu quả hơn vì bạn cần nhiều trò chơi hơn (tức là nhiều phần cứng hoặc thời gian hơn) để đạt được độ chính xác thống kê tương tự cho phép đo Elo của bạn.
Fabian Fichter

0

Quán tính là chính xác. Tôi cũng nên thêm rằng không có công cụ nguồn mở mạnh mẽ trước LC0. Cả Komodo và Houdini đều bị hạn chế cấp phép.


"Không có công cụ nguồn mở mạnh mẽ" Tôi cho rằng bạn có ý nghĩa ngoài stockfish?
Brandon_J

@Brandon_J vâng, đó là những gì tôi muốn nói
SmallChess
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.