0

Từ Stockfish đến Lc0: Hai cách “suy nghĩ” khác nhau của AI trong cờ vua

image.png

Khi nhìn vào cờ vua máy tính, có một điều rất thú vị:

Stockfish và Leela Chess Zero đều chơi cờ cực mạnh, nhưng cách chúng “suy nghĩ” lại rất khác nhau.

Nếu đơn giản hóa tối đa, ta có thể hình dung:

Stockfish
Search rất mạnh
      +
Neural evaluation
      ↓
   Best move


Lc0
Neural intuition
      +
MCTS
      ↓
   Best move

Sự khác biệt này không chỉ thú vị với người chơi cờ. Nó còn là một ví dụ rất trực quan để hiểu một ý tưởng lớn trong AI hiện đại:

Một model không nhất thiết phải tự đưa ra câu trả lời cuối cùng.
Model có thể đóng vai trò “trực giác”, còn một hệ thống search/reasoning sẽ dùng trực giác đó để tìm lời giải tốt hơn.


1. Bài toán cơ bản: chọn nước đi tốt nhất

Giả sử một vị trí cờ có 30 nước hợp lệ.

Một cách ngây thơ là thử tất cả:

Position
 ├── move 1
 ├── move 2
 ├── move 3
 ├── ...
 └── move 30

Sau mỗi nước lại có thêm hàng chục nước đối phương có thể đi.

Chỉ vài ply sau, cây tìm kiếm đã tăng rất nhanh.

Nếu trung bình một vị trí có khoảng 30 nước:

Depth 1:        30
Depth 2:       900
Depth 3:    27,000
Depth 4:   810,000
Depth 5: 24,300,000

Đây chính là vấn đề kinh điển của game AI:

Không thể phân tích tất cả mọi thứ.

Do đó câu hỏi thật sự không phải là:

Làm sao search toàn bộ cây?

Mà là:

Làm sao biết nhánh nào đáng search?

Đây là nơi Stockfish và Lc0 chọn hai con đường khá khác nhau.


2. Stockfish: search trước, neural network giúp đánh giá

Stockfish thuộc dòng chess engine truyền thống được tối ưu qua hàng chục năm.

Core idea của nó là:

Generate moves
     ↓
Search sâu
     ↓
Prune rất nhiều nhánh vô ích
     ↓
Evaluate position
     ↓
Best move

Stockfish sử dụng các kỹ thuật search cực kỳ mạnh như:

  • Alpha-beta pruning
  • Principal Variation Search
  • Iterative deepening
  • Move ordering
  • Null-move pruning
  • Late Move Reduction
  • Quiescence search

Ngày nay Stockfish còn sử dụng NNUE, một neural network nhỏ và rất nhanh để đánh giá vị trí.

Có thể hiểu NNUE như một hàm:

position
    ↓
 neural network
    ↓
evaluation

Ví dụ:

Position A → +0.3
Position B → -1.2
Position C → +2.1

Nhưng neural network không quyết định toàn bộ quá trình tìm kiếm.

Search vẫn là “động cơ chính”.

Có thể ví Stockfish giống một người:

“Tôi sẽ tính cực kỳ nhiều biến.
Khi đi đến một vị trí nào đó, neural network sẽ giúp tôi đánh giá vị trí ấy tốt hay xấu.”

Tóm lại:

Stockfish ≈ Search engine + Neural evaluator

3. Lc0: neural network tạo trực giác trước khi search

Leela Chess Zero đi theo hướng khác.

Lc0 được lấy cảm hứng mạnh từ AlphaZero.

Thay vì search hàng loạt rồi mới đánh giá, Lc0 hỏi neural network trước:

Trong các nước đi này,
nước nào có vẻ đáng xem nhất?

Neural network của Lc0 nhận một vị trí:

Chess position
      ↓
Neural Network

và sinh ra hai output quan trọng:

Policy
Value

4. Policy: “Tôi nghĩ những nước này đáng xem”

Giả sử có bốn nước:

Nf3
d4
e4
c4

Neural network có thể trả về:

Nf3 → 40%
d4  → 25%
e4  → 20%
c4  → 5%

Đây không có nghĩa:

Nf3 chắc chắn là nước tốt nhất.

Nó có nghĩa gần giống:

“Dựa trên kinh nghiệm của tôi, Nf3 trông hứa hẹn nhất.”

Đây là policy network.

Ta có thể coi policy như:

Policy = trực giác về nước đi

Nó giúp giảm vấn đề branching factor.

Thay vì phân tích 30 nước ngang nhau:

30 moves

engine có thể tập trung phần lớn tài nguyên vào:

5–10 moves đáng chú ý

5. Value: “Tôi cảm thấy vị trí này tốt đến mức nào?”

Output thứ hai là value.

Ví dụ:

Position X
    ↓
Neural Network
    ↓
Value = +0.65

Ý nghĩa gần giống:

khả năng thắng khá cao

Hay đơn giản hơn:

position → good / drawish / bad

Điểm quan trọng ở đây là:

Lc0 không nhất thiết phải search đến tận checkmate mới biết một vị trí có vẻ tốt.

Neural network đã học được rất nhiều pattern như:

king safety
piece activity
space
pawn structure
weak squares
passed pawn
initiative

Nó có thể “nhìn” một vị trí và đánh giá khá tốt.

Giống như một Grandmaster nhìn bàn cờ rồi nói:

“Tôi chưa tính hết, nhưng thế này bên trắng có vẻ dễ chơi hơn.”


6. Nhưng chỉ dùng neural network thì chưa đủ

Giả sử neural network nói:

Nf3 → 40%
d4  → 25%
e4  → 20%

Liệu Lc0 có đơn giản chọn Nf3?

Không.

Đây chính là phần quan trọng nhất.

Neural network chỉ tạo trực giác ban đầu.

Lc0 còn phải kiểm chứng trực giác đó bằng search.

Và thuật toán search chính là:

Monte Carlo Tree Search

hay:

MCTS

7. MCTS làm gì?

MCTS xây dựng một cây:

                 Position
              /      |      \
            Nf3      d4      e4
            /         |       \
          ...        ...      ...

Nhưng nó không search đều tất cả nhánh.

Nó dùng policy của neural network để ưu tiên những nhánh đáng chú ý.

Quá trình lặp lại đại khái như sau:

1. Selection
2. Expansion
3. Neural Network Evaluation
4. Backpropagation

Selection

MCTS chọn một nhánh có vẻ hứa hẹn.

Ví dụ:

Root
 ├── Nf3   visits: 500
 ├── d4    visits: 200
 └── e4    visits: 150

Expansion

Nếu gặp một position chưa được phân tích:

new position

engine mở rộng node đó.


Neural Network Evaluation

Position mới được đưa vào neural network:

position
   ↓
network
   ↓
policy + value

Backpropagation

Kết quả được truyền ngược lên cây:

leaf
 ↑
parent
 ↑
parent
 ↑
root

MCTS lại tiếp tục vòng tiếp theo.

Quá trình này có thể chạy:

thousands
tens of thousands
millions

lần.


8. Điều thú vị: policy và search cải thiện lẫn nhau

Ban đầu network có thể nghĩ:

Nf3 → 40%
d4  → 25%

Nhưng sau khi search:

Nf3 → hóa ra có vấn đề chiến thuật
d4  → dẫn đến position cực mạnh

MCTS có thể thay đổi đánh giá:

Nf3 visits: 2,000
d4  visits: 8,000

Cuối cùng Lc0 chọn:

d4

dù policy ban đầu ưu tiên Nf3.

Đây chính là điểm quan trọng:

Neural network ≠ câu trả lời cuối cùng

Neural network chỉ giúp:

định hướng search

Search sau đó:

kiểm chứng trực giác

9. Đây là khác biệt cốt lõi giữa Stockfish và Lc0

Nếu cực kỳ đơn giản hóa:

Stockfish

Search
Search
Search
Search
   ↓
Neural evaluation
   ↓
Best move

Triết lý:

Tính rất nhiều, sau đó đánh giá thật tốt.


Lc0

Neural intuition
       ↓
Search các nhánh đáng chú ý
       ↓
Neural evaluation
       ↓
Search tiếp
       ↓
Best move

Triết lý:

Có trực giác trước, sau đó dùng search để kiểm chứng trực giác.


10. Một analogy rất dễ hiểu

Hãy tưởng tượng hai người giải một bài toán khó.

Người thứ nhất làm kiểu Stockfish:

Liệt kê rất nhiều khả năng
→ loại dần những khả năng sai
→ tính rất sâu
→ chọn đáp án

Người thứ hai làm kiểu Lc0:

“Có vẻ hướng này đúng”
→ thử sâu hướng đó
→ cập nhật nhận định
→ thử tiếp
→ chọn đáp án

Người thứ hai có một thứ gần giống:

intuition

Nhưng intuition không thay thế reasoning.

Nó chỉ giúp reasoning tập trung đúng chỗ.


11. Đây mới là phần thú vị đối với AI hiện đại

Lc0 cho ta một pattern rất quan trọng:

Model
   ↓
Prediction
   ↓
Search / Reasoning
   ↓
Verification
   ↓
Answer

Thay vì:

Model
   ↓
Answer

Trong Lc0:

Neural Network
       ↓
Policy + Value
       ↓
MCTS
       ↓
Best move

Ta có thể abstract thành:

Model intuition
      +
Search
      =
Better decision

12. Liên hệ với LLM

Một LLM thuần túy thường hoạt động gần giống:

prompt
  ↓
model
  ↓
next token
  ↓
next token
  ↓
answer

Model đang dự đoán:

token nào hợp lý tiếp theo?

Nhưng đối với bài toán khó, chỉ dựa vào prediction chưa chắc đủ.

Một architecture mạnh hơn có thể là:

LLM
 ↓
propose several solutions
 ↓
search / explore
 ↓
tool execution
 ↓
verification
 ↓
select best solution

Nhìn theo cách này, policy network của Lc0 khá giống một model nói:

“Tôi nghĩ những hướng này đáng thử.”

MCTS sau đó trả lời:

“Được, tôi sẽ kiểm tra các hướng đó kỹ hơn.”


13. Một pattern tổng quát hơn

Ta có thể gọi nó là:

Intuition + Search

hoặc:

Prediction + Reasoning

Ví dụ trong coding:

LLM đề xuất 5 cách sửa bug
        ↓
chạy test
        ↓
loại những solution fail
        ↓
refine
        ↓
solution cuối

Trong toán học:

model đề xuất hướng chứng minh
        ↓
search các bước
        ↓
symbolic verification
        ↓
proof

Trong planning:

model đề xuất kế hoạch
        ↓
simulate consequences
        ↓
evaluate
        ↓
adjust

Đây đều là cùng một ý tưởng:

Neural network tạo candidate
        +
Search kiểm chứng candidate

14. Bài học lớn nhất từ Lc0

Điều mình thấy thú vị nhất ở Lc0 không phải chỉ là:

“Neural network chơi cờ rất giỏi.”

Mà là architecture của nó.

Neural network không cần phải hoàn hảo.

Nó chỉ cần đủ tốt để nói:

“Có lẽ nên nhìn vào đây.”

Sau đó search sẽ làm phần còn lại.

Đây là một nguyên lý rất mạnh:

Không cần một model biết mọi thứ.

Chỉ cần model biết
nên tìm ở đâu.

Kết luận

Nếu rút gọn toàn bộ bài viết thành một hình:

Stockfish

Search cực mạnh
      +
Neural evaluation
      ↓
Best move

Trong khi:

Lc0

Neural intuition
      +
MCTS search
      ↓
Best move

Và nếu abstraction khỏi cờ vua:

Prediction
    +
Search
    +
Verification
    ↓
Better reasoning

Đó chính là lý do Lc0 rất đáng tìm hiểu ngay cả khi bạn không quan tâm nhiều đến cờ vua.

Nó là một ví dụ cực kỳ đẹp về việc kết hợp:

machine learning để tạo trực giác

với:

algorithmic search để suy luận

thay vì kỳ vọng neural network tự làm tất cả mọi thứ.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí