I've applied the same regression testing that I always do for releases. The last release clocked in at ~+18.XX. This version is already coming in at +26.08. It will be awhile until I make my way up to Ethereal 12.75 for a new release, and hopefully by that time I will have trained some better networks, and added more into the evaluation. The training code is built using PyTorch, and works by mapping the (NN+static_eval) => Win rates. I will not be sharing that code at this time.
If you are someone who uses Ethereal, and are used to building your own, I suggest you go and update. This is the single largest patch committed into Ethereal in the last two years. It massively reduces the evaluation inaccuracy.
The Network is embedded (Not like SF, as my networks are only ~140kb). At this time there is no option to swap out the file, nor is there an option to disable the Network. Someone interested can easily figure out the format by taking a look at weights/pknet_224x32x1.net.
If there is interest, I can generate some compilations for Windows / Android users. Although I will say, I have not seen what kind of performance hit weaker architectures take, but I expect it to be very low.
The commit:
https://github.com/AndyGrant/Ethereal/c ... f359399567
The commit message:
Add a [224, 32, 1] NN to augment the existing Pawn King evaluation.
This network has 224 inputs, mapped to white King bb, the white Pawn bb (minus the promotion ranks), the black King bb, and the black Pawn bb (minus the promotion ranks). We incrementally update the 1st layer of Neurons. Due to Pawn Hashing, Eval Caching, and the TT, we very rarely actually have to perform the computation to move from the 1st layer to the output Neuron.
The training code for these networks is a private implementation using the PyTorch framework. The goal of the trainer is to train to output a centipawn value, which is then put through a sigmoid after being offset by a static evaluation of the position.
This work could not have been done without the work of @KierenP , the author of https://github.com/KierenP/Halogen . Halogen offers some generic NN structure code which made trying out new nets quick and easy. While developing the networks, I used a c++ fork of Ethereal which contained Halogen's NN code.
The final code does not contain anything from Halogen, nor does it contain anything from Stockfish or the Leela projects. The code is entirely new, and is not based in full or in part upon the work on the Stockfish project's NNUE. This network _augments_ the existing evaluation. This network does _not_ replace the existing evaluation in any way, shape, or form.
ELO | 25.81 +- 10.38 (95%)
SPRT | 10.0+0.1s Threads=1 Hash=8MB
LLR | 2.95 (-2.94, 2.94) [0.00, 5.00]
Games | N: 1888 W: 484 L: 344 D: 1060
http://chess.grantnet.us/test/7422/
ELO | 23.39 +- 8.71 (95%)
SPRT | 60.0+0.6s Threads=1 Hash=64MB
LLR | 2.95 (-2.94, 2.94) [0.00, 5.00]
Games | N: 1904 W: 362 L: 234 D: 1308
http://chess.grantnet.us/test/7423/
BENCH : 4,679,412