2 điểm bởi GN⁺ 2024-10-19 | 1 bình luận | Chia sẻ qua WhatsApp
  • searchless_chess của Google DeepMind là hiện thực của bài báo NeurIPS 2024 Amortized Planning with Large-Scale Transformers, dùng cờ vua để đánh giá các Transformer quy mô lớn có thể giải quyết bài toán lập kế hoạch đến đâu mà không cần tìm kiếm tường minh
  • Bộ dữ liệu cốt lõi ChessBench gồm 10 triệu ván cờ, tổng cộng 15 tỷ điểm dữ liệu, kèm các nước đi hợp lệ và chú thích giá trị do Stockfish 16 cung cấp
  • Transformer có quy mô tối đa 270 triệu tham số được huấn luyện bằng học có giám sát, đồng thời thay đổi quy mô dữ liệu, quy mô mô hình, loại kiến trúc và mục tiêu dự đoán để so sánh tác động
  • Mô hình lớn nhất dự đoán action-value khá chính xác trên các bàn cờ mới, giải được những bài toán cờ khó mà không cần tìm kiếm tường minh, và đạt Elo blitz Lichess 2895 trước đối thủ là con người
  • Thuật toán dựa trên tìm kiếm của Stockfish có thể được chưng cất khá tốt vào Transformer quy mô lớn, nhưng vẫn chưa đạt tới mức chưng cất hoàn toàn, nên ChessBench tiếp tục là một benchmark cho các nghiên cứu tiếp theo

Mục tiêu dự án và bối cảnh bài báo

  • searchless_chess là hiện thực của Amortized Planning with Large-Scale Transformers: A Case Study on Chess
  • Cờ vua được dùng như một bài toán lập kế hoạch tiêu biểu của AI, và dự án này đánh giá hiệu năng của Transformer trên những tác vụ mà việc ghi nhớ trở nên vô nghĩa ngay cả ở quy mô lớn
  • Nghiên cứu kiểm chứng trên cờ vua liệu có thể chưng cất hành vi của engine cờ vua dựa trên tìm kiếm vào Transformer bằng học có giám sát hay không

Bộ dữ liệu ChessBench

  • ChessBench bao gồm các nước đi hợp lệ và chú thích giá trị do Stockfish 16 cung cấp
    • Số ván cờ: 10 triệu
    • Tổng số điểm dữ liệu: 15 tỷ
    • Stockfish 16 được dùng như một engine cờ vua ở mức tiên tiến hàng đầu
  • Bộ dữ liệu được chia theo mục tiêu dự đoán
    • Action-Value

    • Behavioral Cloning

    • State-Value

      • puzzles.csv để đánh giá puzzle
      • Ví dụ về kích thước tải xuống như sau
      • Train Action-Value: shard đầu tiên 1.2GB, toàn bộ 1.1TB, tổng 2148 shard
      • Train Behavioral Cloning: 34GB
      • Train State-Value: 36GB
      • Test Action-Value: 141MB
      • Test Behavioral Cloning: 4.1MB
      • Test State-Value: 4.4MB
      • Puzzles: 4.5MB

Mô hình và thiết lập thí nghiệm

  • Transformer được huấn luyện với quy mô tối đa 270M tham số
  • Việc huấn luyện được thực hiện bằng học có giám sát dựa trên ChessBench
  • Thí nghiệm so sánh tác động của các yếu tố sau
    • Quy mô bộ dữ liệu
    • Quy mô mô hình
    • Loại kiến trúc
    • Mục tiêu dự đoán: state-values, action-values, behavioral cloning
  • Mô hình lớn nhất dự đoán action-values khá chính xác trên các bàn cờ mới, cho thấy khả năng khái quát hóa vượt ra ngoài việc chỉ ghi nhớ đơn thuần

Hiệu năng không cần tìm kiếm và các đối tượng so sánh

  • Chính sách cờ vua cuối cùng giải được những puzzle cờ khó mà không cần tìm kiếm tường minh
  • Mô hình đạt Elo 2895 trong Lichess blitz trước đối thủ là con người, thể hiện hiệu năng ở cấp độ đại kiện tướng
  • Các đối tượng so sánh bao gồm Leela Chess Zero và AlphaZero
    • Cả hai hệ thống đều được so sánh dưới dạng mô hình huấn luyện bằng self-play
    • So sánh cả trường hợp có dùng tìm kiếm và không dùng tìm kiếm
  • Thuật toán dựa trên tìm kiếm của Stockfish có thể được chưng cất để xấp xỉ rất tốt trong Transformer quy mô lớn, nhưng chưng cất hoàn toàn vẫn chưa khả thi

Cấu trúc kho mã và luồng thực thi

  • Các thư mục và tệp chính đảm nhiệm những vai trò sau
    • src/engines: Stockfish, Leela Chess Zero, giao diện cho các engine mạng nơ-ron
    • src/transformer.py: Transformer decoder-only
    • src/train.py: script huấn luyện và đánh giá mẫu
    • src/puzzles.py: script đánh giá puzzle
    • src/tournament.py: script giải đấu Elo
    • src/searchless_chess.ipynb: notebook phân tích hành vi mô hình
    • src/tokenizer.py: token hóa bàn cờ
  • Checkpoint huấn luyện sẵn được cung cấp cho các mô hình 9M, 136M, 270M
  • Trong notebook phân tích hành vi mô hình, có thể thực hiện các phân tích như tính tỷ lệ thắng của mọi nước đi hợp lệ

Cài đặt và phụ thuộc

  • Môi trường chạy yêu cầu Python 3.10
  • Cài các phụ thuộc cần thiết bằng pip install -r requirements.txt
  • Nếu có GPU, nên cài JAX có hỗ trợ CUDA để huấn luyện nhanh hơn
    • Ví dụ dùng lệnh cài jax[cuda12_pip] cho CUDA 12
    • Phiên bản JAX phải khớp với bản cài CUDA đang dùng
  • Cần cài thêm các engine và công cụ bên ngoài

Đánh giá và cách dùng

  • Huấn luyện cục bộ được chạy trong src bằng python train.py
    • Checkpoint được lưu vào /checkpoints/local
  • Đánh giá puzzle được chạy theo dạng python puzzles.py --num_puzzles 10 --agent=local
  • Các agent mà puzzles.py hỗ trợ gồm
    • Mô hình huấn luyện cục bộ: local
    • Mô hình huấn luyện sẵn: 9M, 136M, 270M
    • Stockfish: stockfish, stockfish_all_moves
    • Lc0: leela_chess_zero_depth_1, leela_chess_zero_policy_net, leela_chess_zero_400_sims
  • Tính Elo bằng cách tạo ván với python tournament.py --num_games=200, sau đó dùng BayesElo đọc data/tournament.pgn để tính toán

Giấy phép và giới hạn

  • Phần mềm được phát hành theo Apache License 2.0
  • Trọng số mô hình tuân theo giấy phép Creative Commons Attribution 4.0
  • Một phần bộ dữ liệu tuân theo giấy phép public domain Creative Commons CC0 của lichess.org, phần còn lại tuân theo giấy phép CC-BY
  • Bản phát hành được cung cấp theo nguyên tắc "AS IS", không có bảo đảm rõ ràng hoặc ngụ ý
  • Dự án này không phải là sản phẩm chính thức của Google

1 bình luận

 
GN⁺ 2024-10-19
Các ý kiến trên Hacker News
  • Hơi lạc đề, nhưng tôi tò mò cờ vua máy tính ở mức không phải GM hiện đã tiến đến đâu
    Có lúc tôi muốn chơi với đối thủ ngang trình mình, hoặc đối thủ có Elo cao hơn tôi khoảng 100 điểm để luyện tập
    Phần lớn engine có thể được làm yếu đi bằng cách giảm độ sâu tìm kiếm, nhưng thường cách này không hoạt động tốt. Nếu giảm đủ nhiều thì rốt cuộc tôi cũng thắng được khoảng một nửa số ván, nhưng hầu hết ván đấu vẫn có cảm giác là tôi liên tục bị ép, rồi engine mắc một hai sai lầm lớn nên tôi thắng
    Thứ tôi muốn là một đối thủ máy tính chơi ở mức tôi chọn, nhưng có cảm giác như một kỳ thủ người điển hình ở dải Elo đó. Tôi tự hỏi liệu có engine nào như vậy không

    • Maia làm khá tốt. Có thể chơi với nó trên Lichess
      Đã có vài khoảnh khắc thực sự thấy “giống người”, chẳng hạn rơi vào những cái bẫy mà thuật toán tìm kiếm truyền thống sẽ dễ dàng tránh, nhưng con người thì có thể mắc phải
      Không điều chỉnh được, nhưng có vài phiên bản với Elo khác nhau. Tuy vậy phạm vi không rộng lắm
      https://www.maiachess.com/
      https://lichess.org/@/maia1
    • Tôi từng làm một thứ tương tự: chessmate.ai. Nó hoạt động tốt nếu Elo không quá cao
      Khi Elo của người chơi tăng lên, việc dự đoán nước đi tiếp theo trở nên khó hơn vì không chỉ phải chọn nước đi theo trực giác, mà còn phải mô hình hóa chính quá trình tìm kiếm
      Cũng có thể huấn luyện chỉ bằng biên bản ván đấu của một người chơi cụ thể để cá nhân hóa hơn
      Cách tiếp cận tương tự Maia nhưng dùng mạng nơ-ron khác, nên hiệu năng khớp nước đi tốt hơn một chút; tôi còn chồng thêm một thuật toán tối đa hóa kỳ vọng để bot khai thác sai lầm của tôi
    • Thắng trong cờ vua rốt cuộc là như vậy. Giảm thiểu sai lầm
    • Rất lâu trước đây tôi dùng engine Fritz của ChessBase, nó có tính năng sparring. Nếu bạn chơi chắc chắn, giữa ván nó sẽ tạo ra những cơ hội kiểu bài toán chiến thuật, và có thể bật hoặc tắt cảnh báo
      Nếu không chơi đủ ổn định thì bạn chỉ thua thôi
      Theo tôi thấy thì tính năng này có vẻ đã biến mất. Nó cho cảm giác mắc sai lầm rất giống con người khi chịu áp lực; khác với việc chơi như máy rồi ngẫu nhiên đi một nước ngớ ngẩn, đó là máy tính duy nhất khiến tôi cảm thấy như đang gặp một đối thủ thật
    • Vì vậy tôi không thích thắng trong game nhiều người chơi cho lắm. Thường khi thắng, tôi có cảm giác đối thủ đã chơi tệ một cách lố bịch nhiều lần, hoặc đối thủ chơi tốt nhưng tôi thắng nhờ quá may mắn vài lần
      Cảm giác rằng đối thủ cũng chơi tốt nhưng nhìn chung tôi chơi nhỉnh hơn một chút nên thắng một cách xứng đáng là rất hiếm
      Gần như lúc nào cũng trông như đối thủ thua hơn là tôi thắng. Đây không chỉ là vấn đề của AI
      Nếu có thể tạo ra một AI trong trò chơi đối xứng biết thua theo cách khiến người thắng hài lòng, và cũng khiến việc thua trở thành một trải nghiệm học hỏi thỏa mãn, đó sẽ là một doanh nghiệp trị giá 1 tỷ đô la. Tôi nghĩ khó làm được nếu không có nghiên cứu tâm lý học nghiêm túc
  • Tôi đã có một bài trình bày về chủ đề này, và cũng viết lại nội dung bài nói thành bài viết[1]. Bài báo này là một ví dụ hay về chưng cất tri thức
    Nó không hẳn là một bài báo về cờ vua, mà giống một bài báo cho thấy rằng với đầu vào được chuẩn hóa như cờ vua, một hàm tìm kiếm phi tuyến phức tạp do các chuyên gia tinh chỉnh có thể được chưng cất thành một mô hình Transformer gần như tuyến tính
    [1]: https://hlfshell.ai/posts/deepmind-grandmaster-chess-without...

    • Tôi nghĩ nên khá thận trọng khi nhìn vào kết quả đấu với người. Đây là ván blitz, và Elo của engine này khi đấu với người cao hơn nhiều so với khi đấu với các bot khác
      Vì vậy rất có thể thời gian là một yếu tố. Con người dễ bị rụng cờ do thiếu thời gian, hoặc mắc sai lầm khi còn ít thời gian
      Việc nó học được một hàm đánh giá rất tốt dù không tìm kiếm vẫn rất ấn tượng. Nhưng tôi muốn họ loại các ván mà cơ chế dự phòng Stockfish đã kích hoạt ra khỏi phân tích. Với con người, chiếu hết sau 2 nước và chiếu hết sau 10 nước là khác biệt giữa thắng và hòa/thua xét theo khía cạnh thua vì hết giờ
      Tôi cũng muốn thấy một cuộc đối đầu trực tiếp với Stockfish bị giới hạn độ sâu tìm kiếm. Khi đó có lẽ có thể ước lượng đại khái hàm đánh giá này đã chưng cất được bao nhiêu phần của cây tìm kiếm
  • Với ai muốn nhập môn mạng nơ-ron cho cờ vua, tôi rất khuyến nghị kho này: https://github.com/sgrvinod/chess-transformers
    PyTorch dễ đọc, theo cách triển khai điển hình, và kiến trúc cũng tương tự các mạng nơ-ron cờ vua đang có hiệu năng tốt hiện nay

  • https://lczero.org/blog/2024/02/how-well-do-lc0-networks-com...
    Đây là bài viết của các tác giả engine cờ vua mạng nơ-ron hàng đầu về bài báo DeepMind này

    • Kể từ khi Stockfish thêm NNUE vào năm 2020, LC0 đã không còn là engine cờ vua mạng nơ-ron tốt nhất nữa
  • Bộ dữ liệu tổng hợp khổng lồ dùng để huấn luyện rốt cuộc được tạo ra bằng rất nhiều tìm kiếm truyền thống. Vì vậy có chút buồn cười, nhưng dù sao vẫn rất hay

    • Đây là chưng cất tri thức. Sau đó có thể dùng mô hình nhỏ hơn, hiệu quả hơn thay cho mô hình lớn
    • Ngược lại, nó cho thấy giới hạn của mạng nơ-ron. Bộ não con người có thể học từ ít ví dụ hơn rất nhiều
    • Việc tìm kiếm chỉ được thực hiện một lần. Nếu có thể áp dụng hiệu quả này cho các tri thức khác thì sẽ thành chuyện đáng kể
  • Tôi nhớ GM kiêm tác giả cờ vua Matthew Sadler đã cấu hình Leela Zero cho các ván luyện tập gần như chỉ chơi bằng trực giác, với rất ít hoặc hoàn toàn không có tìm kiếm
    Thường thì ông ấy thắng, nhưng không phải lúc nào cũng vậy. Có lẽ chuyện này nằm trong The Silicon Road to Chess Improvement

    • Ông ấy cũng đăng những video rất thú vị trên YouTube. Ông đặt contempt rất cao để cho thấy Leela, khi cố tránh hòa tối đa, đã phát hiện ra những khai cuộc kỳ lạ nào, kèm bình luận ở trình độ 2700+
    • Với lczero thì chỉ cần đặt độ sâu tối đa, ví dụ như 1 ply, là được
  • Nếu chạy Stockfish trên mọi vị trí bàn cờ của mọi ván đấu để tạo dữ liệu huấn luyện, chẳng phải cuối cùng là đang mã hóa cây tìm kiếm vào mô hình Transformer sao?
    Khi đó, càng tăng số lượng tham số của mô hình thì càng chứa được nhiều cây tìm kiếm hơn và hiệu năng sẽ tốt hơn, nhưng điều đó trông không mấy thú vị

    • Tôi không hiểu làm sao có thể mã hóa cây tìm kiếm theo kiểu này
  • Kho lưu trữ này cung cấp phần triển khai cho bài báo của chúng tôi Grandmaster-Level Chess Without Search: https://arxiv.org/abs/2402.04494
    Những đột phá gần đây trong học máy chủ yếu đến từ quy mô, tức các kiến trúc dựa trên attention cỡ lớn và các bộ dữ liệu ở quy mô chưa từng có. Bài báo này khảo sát tác động của huấn luyện quy mô lớn trong cờ vua
    Khác với các engine cờ vua truyền thống dựa vào heuristic phức tạp, tìm kiếm tường minh, hoặc kết hợp cả hai, chúng tôi huấn luyện có giám sát mô hình Transformer 270 triệu tham số trên bộ dữ liệu 10 triệu ván cờ vua
    Mỗi bàn cờ trong bộ dữ liệu được gán nhãn giá trị hành động do engine Stockfish 16 mạnh mẽ cung cấp, tạo thành khoảng 15 tỷ điểm dữ liệu
    Mô hình lớn nhất đạt Lichess blitz Elo 2895 khi đấu với người, và giải được các câu đố cờ vua khó mà không cần tinh chỉnh chuyên biệt theo miền hay thuật toán tìm kiếm tường minh
    Ngoài ra, nó vượt qua mạng chính sách và giá trị của AlphaZero không dùng MCTS cũng như GPT-3.5-turbo-instruct. Kết quả khảo sát có hệ thống về kích thước mô hình và bộ dữ liệu cho thấy năng lực cờ vua mạnh chỉ xuất hiện khi đạt đủ quy mô. Chúng tôi cũng thực hiện nhiều thí nghiệm ablation trên các lựa chọn thiết kế và siêu tham số

    • Tuy nhiên, Lichess blitz Elo khi đấu với bot thấp hơn khoảng 700 điểm so với khi đấu với người
  • Sẽ thật tốt nếu có một engine suy nghĩ giống con người hơn. Cách này dùng biên bản ván cờ có chú thích của Stockfish, nên về cơ bản có lẽ nó sẽ suy nghĩ giống máy tính
    Nếu nó suy nghĩ như con người, trong phần review ván đấu, nó sẽ rất hữu ích khi chỉ ra ở từng vị trí cần nhìn vào điều gì, phù hợp với Elo của tôi

    • Hoặc cũng tốt nếu có một mô hình đo hiệu năng bằng hiệu quả học tập. Nói cách khác, xem cần chơi bao nhiêu ván để đạt tới mức X
      Magnus Carlsen phi thường vì, so với máy tính, anh ấy đã đạt tới trình độ cờ vua hiện tại dưới những ràng buộc khổng lồ về thời gian và tính toán. Hiệu quả học tập của anh ấy là phi thường so với bất kỳ engine cờ vua nào
    • Ở đầu kia của phổ cũng có một trường hợp: khi bộ nhớ, kích thước chương trình và thời gian tính toán bị giới hạn cực kỳ nghiêm ngặt: https://rlc-chess.com/
      Cảm giác giống một chương trình demoscene. Thực tế cũng tồn tại chương trình cờ vua 1KB hoạt động được
  • Nếu giải hoàn toàn cờ vua thì sẽ tạo ra một cây hiện quá lớn để tính toán. Tôi nhớ đại khái là khoảng 10^80, nhưng có thể sai
    Nếu gán nhãn thắng/thua/hòa cho cây đó, ta có thể có một người chơi tối ưu mà không cần tìm kiếm
    Hai cách tiếp cận hiển nhiên để nén và tối ưu hóa là xấp xỉ cây, hoặc xấp xỉ các nhãn. Hai cách này hoạt động tốt đến đâu phụ thuộc rất nhiều vào cấu trúc của cây
    Kết quả này dường như cho thấy, hơn là sức mạnh tuyệt đối của bản thân cách tiếp cận học, việc cây trò chơi cờ vua phù hợp với hai cách tiếp cận này đến mức nào. Kết luận tôi rút ra là có thể tạo một xấp xỉ hợp lý của cây đó bằng dữ liệu cỡ 270 triệu từ

    • Phiên bản chính xác của kỹ thuật này đã được dùng trong tàn cuộc cờ vua, và được gọi là tablebase
      Cờ vua đã được giải khi trên bàn còn 7 quân bằng cơ sở dữ liệu 18,4TB, được giải thích ở đây: https://lichess.org/@/lichess/blog/7-piece-syzygy-tablebases...