This is my attempt to regularize ad hoc notation I’ve seen in use; it may differ slightly from what other people write.
Arrays of inputs or neurons are represented by a number (the number of neurons in the array). This can be multiplied to indicate grouping (for example, instead of writing “768”, you might write “384×2”).
Connexions between arrays are represented by writing “→” between them, as in “A → B”. For example, a typical nnue with weight mirroring (so that swapping the two halves of the first hidden array is equivalent to swapping the two halves of the input array) and a single hidden array with 1024 neurons would be written 384×2 → 512×2 → 1 .
Note that the number of weights may be less than the number of connexions, A×B; in the example, there are (384×2)×512 = 393 216 weights, not (384×2)×1024 = 786 432, because of weight mirroring.
If sets of weights are interchanged contextually, the lefthand array or series of arrays is parenthesized and multiplied. For example, an nnue with two hidden arrays, five king regions that determine the first set of weights, and four phases that determine the second and third sets of weights would be written (384×2)×5 → (512×2 → 16)×4 → 1 .
When the location of the king is horizontally mirrored, h can be appended to the multiplier, e.g. “(768)×5h → (512×2 → 16)×4 → 1”.
The lefthand side is parenthesized and multiplied instead of the righthand side to reflect the history of nnue, where 640 inputs and 64 regions were conceptualized as 40 960 inputs.
Activation functions applied to an array can optionally be indicated by appending letters (“r” for ReLU, “c” for clamping above, and “s” for squaring) in the order the operations are performed. For example, (384×2)×5 → (512×2 rcs → 16 r)×4 → 1 .
Reduction by pairwise multiplication is indicated by “/2”; for example, 384×2 → 512×2 rc/2 → 1 .