Input representation - QueensGambit/CrazyAra GitHub Wiki

Input representation

The overall input representation can be seen as a hybrid between chess and shogi compared to to the Alpha-Zero paper the main difference for both CrazyAra 0.1 and CrazyAra 0.2 is the avoidance of a history of past board representations.

This has several motivations:

  • Crazyhouse, as well as chess is a full information game. In theory the history isn't needed to find the best possible move.
  • The avoidance of the history allows better compatibility as an analysis uci engine. Otherwise one would have to add dummy layers which will distort the network predictions.
  • Avoiding the history reduces model parameters, storage for saving the dataset and allows higher batch-sizes during training
  • The en-passent capture possibility has been included in the input representation as an additional layer -> this allows fen-conversion capability while maintaining a small input shape.
  • Deep Mind mentioned that the history acts as an attention mechanism. If one is interested in this attention mechanism one could also only highlight only the last move squares.

Overview of the full input-plane representation:

Crazyhouse

Feature Planes Comment
P1 piece 6 pieces are ordered: PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING
P2 piece 6 pieces are ordered: PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING
Repetitions 2 two planes (full zeros/ones) indicating how often the board positions has occurred
P1 prisoner count 5 pieces are ordered: PAWN, KNIGHT, BISHOP, ROOK, QUEEN) (excluding the KING)
P2 prisoner count 5 pieces are ordered: PAWN, KNIGHT, BISHOP, ROOK, QUEEN) (excluding the KING)
P1 Promoted Pawns Mask 1 binary map indicating the pieces which have been promoted
P2 Promoted Pawns Mask 1 binary map indicating the pieces which have been promoted
En-passant square 1 Binary map indicating the square where en-passant capture is possible
Colour 1 all zeros for black and all ones for white
Total move count 1 integer value setting the move count (uci notation))
P1 castling 2 One if castling is possible, else zero
P2 castling 2 One if castling is possible, else zero
No-progress count 1 Setting the no progress counter as integer values, (described by uci halfmoves format)

The history list of the past 7 board states have been removed

The total number of planes is calculated as follows:

27 + 7 = 34 planes total

  • All Input planes are scaled to the linear range of [0.,1].

For this several constants are introduced MAX_NB_PRISONERS, MAX_NB_MOVES, MAX_NB_NO_PROGRESS. See crazyhouse/constants.py for more details.

This was essential when training with Stochastic Gradient Descent. The Adam optimizer could handle un-normalized input features better, but converged overall to a worse local minimum compared to SGD Nesetrov Momentum on normalized features.

A demonstrative visualization of this input representation, can be found here.