File size: 5,420 Bytes
f0065bf
 
3f95bfc
 
 
 
f31d6a7
 
f0065bf
 
bd01b40
4c53197
f0065bf
4c53197
 
f0065bf
4c53197
f0065bf
4c53197
577f58b
4c53197
577f58b
4c53197
577f58b
4c53197
 
 
 
577f58b
4c53197
 
 
 
577f58b
4c53197
 
577f58b
4c53197
 
 
 
577f58b
4c53197
 
 
 
 
577f58b
4c53197
577f58b
4c53197
577f58b
4c53197
577f58b
4c53197
 
577f58b
4c53197
 
 
577f58b
4c53197
 
 
577f58b
4c53197
 
 
577f58b
4c53197
577f58b
4c53197
577f58b
4c53197
 
 
577f58b
4c53197
577f58b
4c53197
577f58b
4c53197
f0065bf
ac744ce
533fbd7
 
4c53197
 
 
 
 
 
533fbd7
f0065bf
4c53197
f0065bf
 
 
4c53197
 
 
 
 
 
f0065bf
 
 
 
4c53197
 
 
 
 
f0065bf
 
 
 
 
 
 
 
 
 
 
 
 
 
4c53197
f0065bf
4c53197
345b1fa
f0065bf
4c53197
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
---
license: cc-by-nc-4.0
tags:
- code
- chess
- game
- CNN
- ResNet
---


# **GChess: A Deep Residual Network for Chess**

## Model Description
The **GChess** model is a deep neural network designed for the game of chess, inspired by the **AlphaZero** architecture. It uses a single network to perform both move prediction (Policy) and position evaluation (Value).

This release is a **proof-of-concept** version. The model's current estimated playing strength is **~1300 Elo**, placing it at a beginner to intermediate level. It demonstrates a robust foundation for an AlphaZero-style chess AI.

---

## Architecture Details

GChess is built on a **Deep Residual Network (ResNet)**, which is highly effective for processing the spatial features of an 8x8 board.

### **Core Network (Torso)**
* **Architecture Type:** Deep Residual Network (ResNet).
* **Residual Blocks:** **20** blocks, ensuring deep, hierarchical feature learning.
* **Filter Count:** **512** convolutional filters (channels) in its main layers for high feature complexity.

### **Input Representation**
The network accepts a multi-plane tensor encoding the board state and history:
* **Input Channels:** **128** input channels.
* **Data Included:** Piece locations, player to move, castling rights, and **8-ply history** to handle repetition and context.

### **Dual Output Heads**
The shared ResNet torso branches into two specialized output heads:

| Head | Function | Output Format |
| :--- | :--- | :--- |
| **Policy Head (p\_logits)** | **Move Prediction** | Logits over **4672** possible moves/actions. |
| **Value Head (v)** | **Position Evaluation** | Single scalar value in [-1.0, +1.0]. |

| Value Interpretation | Score |
| :--- | :--- |
| **White Winning** | Close to +1.0 |
| **Black Winning** | Close to -1.0 |
| **Equal Position** | Close to 0.0 |

---

## Training Summary

The model was trained on a small dataset of **50,000 high-quality PGN games** across **25 epochs**.

### **Convergence Analysis**
The training process was stable and highly efficient, utilizing an aggressive learning rate strategy.

* **Training Loss Curve:**
    ![Training Loss](training_loss.png)
    The loss shows a rapid initial drop, signifying quick learning of fundamental concepts, followed by a smooth convergence.

* **Detailed Loss Convergence:**
    ![Detailed Loss convergences](detailed_training_loss.png)
    A detailed view reveals short-term oscillations, which are expected with dynamic learning rate scheduling but confirm a consistently downward trend towards a low, stable loss.

* **Accuracy Evaluations:**
    ![Accuracy Evaluations](accuracy_evals.png)
    Both Top 1 and Top 5 Accuracy showed clear, consistent upward trends, confirming that the network successfully learned to predict expert moves without overfitting to the limited data. The high Top 5 Accuracy indicates the model reliably generates a strong list of candidate moves.

---

## Conclusion and Future Outlook

* **Current Performance:** The model achieved an estimated **1300 Elo**. While this is an entry-level performance, it's a strong result considering the resource constraints.
* **Strong Foundation:** The architecture is structurally sound, and the training process demonstrated effective learning.
* **Future Potential:** The established architecture is well-suited for scaling. With a significantly larger, more diverse dataset (e.g., millions of games) and extended training, this model has the foundation to reach expert and master Elo levels.

---

## Usage

To use the GChess model for inference, you must convert a `chess.Board` object and its history into the required **128-channel input tensor**.

```python
import chess
import torch
import torch.nn.functional as F

# NOTE: The 'model' object must be loaded from a checkpoint, and 
# 'board_to_tensor' function must be implemented separately 
# to generate the 128-channel input.
# DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# Define Input State (FEN)
# Example: Initial position
fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
board = chess.Board(fen)

# --- Preprocess Input (Requires custom function) ---
# input_tensor = board_to_tensor(board, history_depth=8).unsqueeze(0).to(DEVICE)
# Placeholder tensor for execution:
input_tensor = torch.randn(1, 128, 8, 8) 
model = torch.nn.Module() # Placeholder model for execution
model.eval() # Set model to evaluation mode

# Run Inference
with torch.no_grad():
    # policy_logits is a tensor of size 4672, value_output is a scalar tensor
    # policy_logits, value_output = model(input_tensor)
    
    # Placeholder outputs for demonstration:
    policy_logits = torch.randn(1, 4672) 
    value_output = torch.tensor([[0.25]])

# Post-process Output
policy_probabilities = F.softmax(policy_logits, dim=1).squeeze(0)

# Find the move with the highest predicted probability
best_action_index = torch.argmax(policy_probabilities).item()
best_probability = policy_probabilities[best_action_index].item()

# Extract the value prediction
expected_value = value_output.item()

# Print Results
print(f"FEN: {fen}")
print(f"--- Model Prediction ---")
print(f"Predicted Probability of Top Move: {best_probability:.4f}")
print(f"Position Evaluation (Value): {expected_value:.4f}")
print("Interpretation: Value close to +1.0 means White is winning, -1.0 means Black is winning.")
```

Devlopper: PENEAUX Benjamin