NNUE là gì?
NNUE (mạng nơ-ron cập nhật hiệu quả) là một kiến trúc mạng nơ-ron, phù hợp để suy luận trên CPU.
Hiện nay các engine cờ tướng hàng đầu đều dùng NNUE. NNUE chỉ là mạng đánh giá, chỉ phụ trách đánh giá thế cờ. (Về việc đánh giá là gì, xem Đánh giá thế cờ là gì?)
Còn thuật toán tìm kiếm mà các engine cờ tướng hàng đầu hiện nay dùng vẫn là tìm kiếm cắt tỉa alpha-beta (ab) truyền thống.
Giới thiệu cụ thể
Tên đầy đủ của NNUE là Efficiently Updatable Neural Network (viết ngược lại; Nue (鵺) là một yêu quái của Nhật Bản, ở đây dùng cách đọc gần âm với Nue). Ý tưởng cốt lõi là thiết kế một cấu trúc mạng nơ-ron đặc biệt phù hợp với các tình huống như cờ, nơi đầu vào chỉ thay đổi rất nhỏ. Ví dụ khi ta đi một nước, bàn cờ thay đổi không nhiều, lúc này có thể cập nhật tăng dần mà không cần tính lại toàn bộ bàn cờ, nhờ vậy hiệu quả tăng lên rất nhiều.
NNUE ban đầu được thiết kế cho cờ shogi Nhật Bản, tác giả là Yu Nasu (那須悠). Năm 2018 nó được áp dụng vào YaneuraOu của Motohiro Isozaki, và tháng 6 năm 2019 NNUE được Nodchip (Hisayori Noda) chuyển sang Stockfish.
Tập đặc trưng đầu vào
Trước hết cần chuyển thế cờ trên bàn thành đầu vào mà mạng nơ-ron hiểu được, việc này cần đến tập đặc trưng. Ở đây lấy Stockfish làm ví dụ.[1]
Các tập đặc trưng thường gặp là HalfKP và HalfKA(v2). Stockfish thời đầu dùng HalfKP, hiện nay dùng HalfKAv2.
K trong HalfKP là King (Vua), P là Piece (quân cờ, nhưng không gồm Vua), Half nhấn mạnh là Vua của một bên. Tổ hợp đặc trưng là (vị trí Vua bên ta Sk, vị trí của một quân Sp, loại quân đó Tp, màu tương đối của quân đó Cp).
Với cờ vua quốc tế, quân có 64 ô (Squares) để đi, loại quân bỏ Vua chỉ còn 5 loại, màu quân có hai loại, nên tổng số đặc trưng là 64×64×5×2=40960.
A trong HalfKA là All, tức là loại quân cũng bao gồm Vua, đưa Vua vào các quân thông thường, nên tổng số đặc trưng của HalfKA là 64×64×6×2=49152. Thiết kế này giúp NNUE nắm bắt được giá trị liên quan đến Vua.
HalfKAv2 so với HalfKA đã tối ưu số lượng đặc trưng. 12 loại quân này gồm Vua bên ta và Vua đối phương, nhưng đặc trưng đầu tiên Sk của Vua bên ta nhất định ứng với Tp là Vua bên ta, đặc trưng đầu tiên của Vua đối phương nhất định ứng với Tp là Vua đối phương, có thể gộp làm một, không cần phân biệt Vua bên ta hay đối phương, nhờ vậy tổng số đặc trưng giảm xuống 64×64×11=45056.
Xét rằng cờ vua quốc tế có thể đối xứng gương theo chiều ngang, lại có HalfKAv2_hm, hm là viết tắt của horizontally mirrored. Vua bên ta ở nửa trái bàn cờ và ở nửa phải là tương đương, nên tổng số vị trí Vua giảm từ 64 xuống 32 (tổng số đặc trưng 32×64×11=22528).
Bộ tích lũy (accumulator)
Bộ tích lũy là cốt lõi của cập nhật tăng dần trong NNUE. Đầu ra của lớp đầu tiên của NNUE (22528->2560[2]) được lưu vào bộ tích lũy. Khi bàn cờ thay đổi (như đi một nước), bộ tích lũy cũng thay đổi theo (chỉ cần cộng/trừ cột trọng số lớp đầu tiên ứng với đặc trưng đó trong bộ tích lũy), nhờ vậy ta cập nhật bộ tích lũy nhanh hơn mà không cần tính lại lớp đầu tiên. Bộ tích lũy phân biệt góc nhìn bên ta và góc nhìn đối phương, nên có hai bộ tích lũy khác nhau.
Xem thêm
Xem NNUE.md: nnue-pytorch/docs/nnue.md
