Changes

Jump to: navigation, search

Stockfish NNUE

3,617 bytes added, 21:15, 12 March 2021
no edit summary
'''Stockfish NNUE''',<br/>
a Stockfish branch by [[Hisayori Noda]] aka Nodchip, which uses [[NNUE|Efficiently Updatable Neural Networks]] - stylized as '''&#398;U&#1048;&#1048;''' or reversed as '''NNUE''' - to replace its standard [[Stockfish#Evaluation|evaluation]].
NNUE, introduced in 2018 by [[Yu Nasu]] <ref>[[Yu Nasu]] ('''2018'''). ''&#398;U&#1048;&#1048; Efficiently Updatable Neural-Network based Evaluation Functions for Computer Shogi''. Ziosoft Computer Shogi Club, [https://github.com/ynasu87/nnue/blob/master/docs/nnue.pdf pdf] (Japanese with English abstract)[https://github.com/asdfjkl/nnue GitHub - asdfjkl/nnue translation] </ref>,
were previously successfully applied in [[Shogi]] evaluation functions embedded in a Stockfish based search <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=2&t=72754 The Stockfish of shogi] by [[Larry Kaufman]], [[CCC]], January 07, 2020</ref>, such as [[YaneuraOu]] <ref>[https://github.com/yaneurao/YaneuraOu GitHub - yaneurao/YaneuraOu: YaneuraOu is the World's Strongest Shogi engine(AI player), WCSC29 1st winner, educational and USI compliant engine]</ref>,
and [[Kristallweizen]] <ref>[https://github.com/Tama4649/Kristallweizen/ GitHub - Tama4649/Kristallweizen: 第29回世界コンピュータ将棋選手権 準優勝のKristallweizenです。]</ref>. He YaneuraOu's author [[Motohiro Isozaki]] made an unbelievable prediction that NNUE can help to increase Stockfish strength by around 100 points, almost one year before revealing<ref>[http://yaneuraou.yaneu.com/2019/06/24/%E5%B0%86%E6%A3%8B%E3%82%BD%E3%83%95%E3%83%88%E9%96%8B%E7%99%BA%E8%80%85%E3%81%8Cstockfish%E3%81%AB%E8%B2%A2%E7%8C%AE%E3%81%99%E3%82%8B%E6%97%A5/ 将棋ソフト開発者がStockfishに貢献する日 The day when shogi software developers contribute to Stockfish] by [[Motohiro Isozaki]], June 2019</ref> <ref>[https://www.reddit.com/r/chess/comments/cltich/shogi_engine_developer_claims_he_can_make/ shogi engine developer claims he can make Stockfish stronger], [[Computer Chess Forums|Reddit]], August 2019</ref>.
In 2019, Nodchip incorporated NNUE into Stockfish 10 - as a proof of concept, and with the intention to give something back to the Stockfish community <ref>[http://yaneuraou.yaneu.com/2020/06/19/stockfish-nnue-the-complete-guide/ Stockfish NNUE – The Complete Guide], June 19, 2020 (Japanese and English)</ref>.
After support and announcements by [[Henk Drost]] in May 2020 <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74059 Stockfish NN release (NNUE)] by [[Henk Drost]], [[CCC]], May 31, 2020</ref>
In August 2020, [[Stockfish#Fishtest|Fishtest]] revealed Stockfish NNUE was stronger than the classical one at least 80 Elo <ref>[https://blog.stockfishchess.org/post/625828091343896577/introducing-nnue-evaluation Introducing NNUE Evaluation], August 06, 2020</ref>. In July 2020, the playing code of NNUE was put into the official Stockfish repository as a branch for further development and examination. In August that playing code merged to the master branch and become an official part of the engine. However, the training code still remained in Nodchip's repository <ref>[https://github.com/official-stockfish/Stockfish/issues/2823 NNUE merge · Issue #2823 · official-stockfish/Stockfish · GitHub] by [[Joost VandeVondele]], July 25, 2020</ref> <ref>[https://github.com/nodchip/Stockfish GitHub - nodchip/Stockfish: UCI chess engine] by [[Hisayori Noda|Nodchip]]</ref>. On September 02, 2020, '''Stockfish 12''' was released with a huge jump in playing strength due to the introduction of [[NNUE]] and further tuning <ref>[https://blog.stockfishchess.org/post/628172810852925440/stockfish-12 Stockfish 12], The Stockfish Team, [https://blog.stockfishchess.org/ Stockfish Blog], September 02, 2020</ref>.
=NNUE Structure=
The [[Neural Networks|neural network]] consists of four layers. The input layer is heavily overparametrized, feeding in the [[Board Representation|board representation]] for all king placements per side
<ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=74531&start=1 Re: NNUE accessible explanation] by [[Jonathan Rosenthal]], [[CCC]], July 23, 2020</ref>.
 
The so called '''HalfKP''' structure consists of two halves covering input layer and first hidden layer, each half of the input layer associated to one of the two [[King|kings]], cross coupled with the side to move or not to move halves of the first hidden layer.
For each either black or white king placement, the 10 none king pieces on their particular squares are the boolean {0,1} inputs, along with a relict from Shogi piece drop (BONA_PIECE_ZERO),
64 x (64 x 10 + 1) = 41,024 inputs for each half, which are multiplied by a 16-bit integer weight vector for 256 outputs per half, in total, 256 x 41,024 = 10,502,144 weights.
As emphasized by [[Ronald de Man]] in a [[CCC]] forum discussion <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75506&start=7 Re: NNUE Question - King Placements] by [[Ronald de Man|syzygy]], [[CCC]], October 23, 2020</ref>,
the input weights are arranged in such a way, that [[Color Flipping|color flipped]] king-piece configurations in both halves share the same index.
However, and that seems also a relict from Shogi with its [https://en.wikipedia.org/wiki/Rotational_symmetry 180 degrees rotational] 9x9 board symmetry, instead of [[Vertical Flipping|vertical flipping]] (xor 56), [[Flipping Mirroring and Rotating#Rotationby180degrees|rotation]] is applied (xor 63) <ref>[https://github.com/official-stockfish/Stockfish/issues/3021 NNUE eval rotate vs mirror · Issue #3021 · official-stockfish/Stockfish · GitHub] by [[Terje Kirstihagen]], August 17, 2020</ref>.
=NNUE Structure=
The [[Neural Networks|neural network]] consists of four layers. The input layer is heavily overparametrized, feeding in the [[Board Representation|board representation]] for all king placements per side.
The efficiency of [[NNUE]] is due to [[Incremental Updates|incremental update]] of the input layer outputs in [[Make Move|make]] and [[Unmake Move|unmake move]],
where only a tiny fraction of its neurons need to be considered <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=74531&start=1 Re: NNUE accessible explanation] by [[Jonathan Rosenthal]], [[CCC]], July 23, 2020</ref>in case of none king moves. The remaining three layers with 2x256x32, 32x32 and 32x1 weights are computational less expensive, hidden layer 1 and 2 with layers apply a [https://en.wikipedia.org/wiki/Rectifier_(neural_networks) ReLu activation] <ref>[https://github.com/official-stockfish/Stockfish/blob/master/src/nnue/architectures/halfkp_256x2-32-32.h#L42 Stockfish/halfkp_256x2-32-32.h at master · official-stockfish/Stockfish · GitHub]</ref> <ref>[https://github.com/official-stockfish/Stockfish/blob/master/src/nnue/layers/clipped_relu.h#L82 Stockfish/clipped_relu.h at master · official-stockfish/Stockfish · GitHub]</ref>, best calculated using appropriate [[SIMD and SWAR Techniques|SIMD instructions]] performing fast [[Byte|8-bit]]/[[Word|16-bit]] integer vector arithmetic, like [[MMX]], [[SSE2]] or [[AVX2]] on [[x86]]/[[x86-64]], or, if available, [[AVX-512]].
[[FILE:StockfishNNUELayers.png|none|border|text-bottom|1024px]]
NNUE layers in action <ref>Image courtesy Roman Zhukov, revised version of the image posted in [http://talkchess.com/forum3/viewtopic.php?f=2&t=74059&start=139 Re: Stockfish NN release (NNUE)] by Roman Zhukov, [[CCC]], June 17, 2020, labels corrected October 23, 2020, see [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75506&start=1 Re: NNUE Question - King Placements] by [[Andrew Grant]], [[CCC]], October 23, 2020</ref>
Explanation by [[Hisayori Noda|Nodchip]Ronald de Man] explained on [https://en.wikipedia.org/wiki/Discord_(software) Discord] on June 2020 <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=74780 Don't understand 75506&start=9 Re: NNUEQuestion - King Placements] by Lucasart[[Ronald de Man|syzygy]], [[CCC]], August 14October 23, 2020</ref>, who did the Stockfish NNUE port to [[CFish]] <ref>[https://github.com/syzygy1/Cfish/blob/master/src/nnue.c Cfish/nnue.c at master · syzygy1/Cfish · GitHub]</ref>: The accumulator has a "white king" half and a "black king" half, where each half is a 256-element vector of 16-bit ints, which is equal to the sum of the weights of the "active" (pt, sq, ksq) features plus a 256-element vector of 16-bit biases.
41,024 = 64 * 641. 64 comes The "transform" step of the NNUE evaluation forms a 512-element vector of 8-bit ints where the first half is formed from the number 256-element vector of the cells where king may exist. 641 = 64 * 5 * 2 + 1. 64 here comes side to move and the second half is formed from the number 256-element vector of the cells where a piece other than king may existside. 5 is In this step the number of piece types other than king16-bit elements are clipped/clamped to a value from 0 to 127. 2 This is the number output of the colors, white and blackinput layer. 1   This 512-element vector of 8-bit ints is then multiplied by a captured piece. "+ 1" 32x512 matrix of 8-bit weights to get a 32-element vector of 32-bit ints, to which a vector of 32-bit biases is BONA_PIECE_ZEROadded. Here "bona" means "[[Bonanza|bonanza]]" which The sum vector is divided by 64 and clipped/clamped to a popular computer [[Shogi|shogi]] engine32-element vector of 8-bit ints from 0 to 127. It introduced This is the feature "p" for output of the first timehidden layerBonaPieces are contained in the evalList. It The resulting 32-element vector of 8-bit ints is updated multiplied by Position::do_move() and Position::undo_move()a 32x32 matrix of 8-bit weights to get a 32-element vector of 32-bit ints, to which another vector of 32-bit biases is added. These ints are again divided by 64 and used by NNUE clipped/clamped to 32 8-bit ints from 0 to calculate 127. This is the network parameters between output of the input layer and the first second hidden layer.  About the calculation, the following text will be helpful. This text 32-element vector of 8-bits ints is sent to RocketMiningPoo on Twitterthen multiplied by a 1x32 matrix of 8-bit weights (i.e. "We add the iinner product of two vectors is taken). This produces a 32-th COLUMN of the W{0} bit value to the z{0} for each i, where the iwhich a 32-th element bit bias is set to 1added. And we subtract This gives the i-th COULMN output of the W{0} from output layer.  The output of the z{0} for each i, where the i-th element output layer is set divided by FV_SCALE = 16 to 0produce the NNUE evaluation. This operation is SF's evaluation then take some further steps such as adding a Tempo bonus (even though the NNUE evaluation inherently already takes into account the side to move in the "accumulatetransform" in your question." may be right... I hope that someone will double checkstep) and scaling the evaluation towards zero as rule50_count() approaches 50 moves.
=Network=
Being attracted by new advantages as well as being encouraged by some impressive successes, many developers joined or continued to work. The [[#Source|Official Stockfish]] repository shows the numbers of commits, ideas increased significantly after merging NNUE.
 
=Elo Progress with NNUE=
[[Stockfish#Fishtest|Fishtest]] team did a Regression Tests <ref>[https://github.com/glinscott/fishtest/wiki/Regression-Tests Regression Tests], August 22, 2020</ref> in August 2020, exclusively from 40.000 games tests at long time control (60sec + 0.6 for single-core, 30sec + 0.3 for 8 cores tests). The result was used to create the graph of Stockfish progress since version 11. The chart lines first increased sharply after merging NNUE.
 
[[File:Nnueprogress.png|none|border|text-bottom]]
 
=Rotation vs Flip=
Since the 9x9 [[Shogi]] board has a centered king file and [[Castling|castling]] is not known in Shogi, [[Color Flipping|color flip]] versus[[Flipping Mirroring and Rotating#Rotationby180degrees|180 degree rotate]] differs in a [[Horizontal Mirroring|horizontal mirrored]] position from the other side's point of view, with otherwise identical playing options. The NNUE is trained and probed from the side to move point of view, where the used 180 degree rotation (xor 63 instead of 56) to flip sides looks rather strange for chess <ref>[https://github.com/official-stockfish/Stockfish/blob/615d98da2447e79ceceae205e0cd4e878115acc3/src/types.h#L323 Stockfish/types.h at 615d98da2447e79ceceae205e0cd4e878115acc3 · official-stockfish/Stockfish · GitHub]</ref>. i.e color flipping the black king from e8 to d1 rather than e1. Does it consider castling short to the queen side?
 
It is a little bit unclear, how that rotation rather than flip affects the playing strength <ref>[https://github.com/official-stockfish/Stockfish/issues/3021 NNUE eval rotate vs mirror · Issue #3021 · official-stockfish/Stockfish · GitHub] by [[Terje Kirstihagen]], August 17, 2020</ref> and whether NNUE for chess suffers from [https://en.wikipedia.org/wiki/Associative_visual_agnosia associative visual agnosia].
Maybe Fishtest needs to play many games with color-flipped openings, i.e. 1.e4 e5 and 1.e3 e5 2.e4, to look whether results differ or not.
Anyway, a fix from rotate to flip has to be done from producer and consumer sides, and is likely to void some training sessions.
=Suggestions=
=See also=
* [[:Category:NN|Category: Neural Network Engines]]
* [[Fat Fritz#Fat Fritz 2|Fat Fritz 2.0]]
* [[Neural Networks]]
* [[NNUE]]
=Forum Posts=
==2020 ...==
===January ...===
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=72754 The Stockfish of shogi] by [[Larry Kaufman]], [[CCC]], January 07, 2020 » [[Shogi]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=74058 Stockfish NNUE] by [[Henk Drost]], [[CCC]], May 31, 2020 » [[Stockfish]]
===August===
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74654 Repository for Stockfish+NNUE Android Builds] by [[Ted Summers|AdminX]], [[CCC]], August 02, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74666 SF NNUE Problem] by [[Stephen Ham]], [[CCC]], August 03, 2020
* <span id="Continue"></span>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=74531&start=8 Re: NNUE accessible explanation] by [[Jonathan Rosenthal]], [[CCC]], August 03, 2020 » [[#NNUEaccExp|NNUE accessible explanation]]
* [https://groups.google.com/d/msg/fishcooking/6OI3AejYvpQ/dNmluMLBAgAJ <nowiki>[NNUE] Worker update on fishtest</nowiki>] by [[Joost VandeVondele]], [[Computer Chess Forums|FishCooking]], August 03, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74683 Is this SF NN almost like 20 MB book?] by [[Jouni Uski]], [[CCC]], August 04, 2020
* [https://groups.google.com/d/msg/fishcooking/Kzw1W_Yr1d8/YNEmCqIyBAAJ NNUE evaluation merged in master] by [[Joost VandeVondele]], [[Computer Chess Forums|FishCooking]], August 06, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74705 What happens with my hyperthreading?] by [[Kai Laskos]], [[CCC]], August 06, 2020 » [[Thread]]* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74722 Stockfish NNUE style] by Rowen, [[CCC]], August 08, 2020* [http://www.talkchess.com/forum3/viewtopic.php?t=74739 SF NNUE training questions] by [[Jouni Uski]], [[CCC]], August 10, 2020* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74765 Progress of Stockfish in 6 days] by [[Kai Laskos]], [[CCC]], August 12, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=74777 Neural Networks weights type] by [[Fabio Gobbato]], [[CCC]], August 13, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=74780 Don't understand NNUE] by Lucasart, [[CCC]], August 14, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74901 SF+NNUE reach the ceiling?] by Corres, [[CCC]], August 27, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74933 The most stupid idea by the Stockfish Team] by Damir, [[CCC]], August 30, 2020
===September ...===* [https://groups.google.com/d/msg/fishcooking/TJHsiI61yQ4/liQoZ-AzAgAJ Stockfish 12] by [[Joost VandeVondele]], [[Computer Chess Forums|FishCooking]], September 02, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74974 Stockfish 12 is released today!] by Nay Lin Tun, [[CCC]], September 02, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74978 Stockfish 12 has arrived!] by daniel71, [[CCC]], September 02, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75008 AVX2 optimized SF+NNUE and processor temperature] by corres, [[CCC]], September 05, 2020 » [[AVX2]]
===October===
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75296 BONA_PIECE_ZERO] by [[Marco Belli|elcabesa]], [[CCC]], October 04, 2020
* [https://groups.google.com/d/msg/fishcooking/yjh1YOxy7nw/rJA6u1ODAAAJ SF NNUE/Classical] by [[Fauzi Akram Dabat|Fauzi]], [[Computer Chess Forums|FishCooking]], October 05, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75415 How to scale stockfish NNUE score?] by [[Maksim Korzh]], [[CCC]], October 17, 2020 » [[Stockfish NNUE]], [[Scorpio#NNUE|Scorpio NNUE]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75418 Embedding Stockfish NNUE to ANY CHESS ENGINE: YouTube series] by [[Maksim Korzh]], [[CCC]], October 17, 2020 » [[BBC#NNUE|BBC NNUE]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75506 NNUE Question - King Placements] by [[Andrew Grant]], [[CCC]], October 23, 2020 » [[#NNUE Structure|NNUE Structure]]
: [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75506&start=7 Re: NNUE Question - King Placements] by [[Ronald de Man|syzygy]], [[CCC]], October 23, 2020
: [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75506&start=9 Re: NNUE Question - King Placements] by [[Ronald de Man|syzygy]], [[CCC]], October 23, 2020
==2021 ...==
* [https://groups.google.com/g/fishcooking/c/cad1MGSdpU4/m/Ury4iBqSBgAJ Shouldn't positional attributes drive SF's NNUE input features (rather than king position)?] by [[Nick Pelling]], [[Computer Chess Forums|FishCooking]], January 10, 2021
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=76381 stockfish NNUE question] by [[Jon Dart]], [[CCC]], January 21, 2021
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=76437 256 in NNUE?] by Ted Wong, [[CCC]], January 28, 2021
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=76537 Fat Fritz 2] by [[Jouni Uski]], [[CCC]], February 09, 2021 » [[Fat Fritz#Fat Fritz 2|Fat Fritz 2.0]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=76833 NNUE Research Project] by [[Ed Schroder|Ed Schröder]], [[CCC]], March 10, 2021 » [[NNUE]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=76844 NNUE ranking] by Jim Logan, [[CCC]], March 12, 2021
=External Links=
==Basics==
* [http://yaneuraou.yaneu.com/2020/06/19/stockfish-nnue-the-complete-guide/ Stockfish NNUE – The Complete Guide], June 19, 2020 (Japanese and English)
* [http://yaneuraou.yaneu.com/2020/08/21/3-technologies-in-shogi-ai-that-could-be-used-for-chess-ai/ 3 technologies in shogi AI that could be used for chess AI] by [[Motohiro Isozaki]], August 21, 2020
* [https://www.qhapaq.org/shogi/shogiwiki/stockfish-nnue/ Stockfish NNUE Wiki]
* [https://github.com/official-stockfish/Stockfish/issues/2823 NNUE merge · Issue #2823 · official-stockfish/Stockfish · GitHub] by [[Joost VandeVondele]], July 25, 2020 <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74560 An info] by Sylwy, [[CCC]], July 25, 2020</ref>
* [https://github.com/FireFather/sf-nnue GitHub - FireFather/sf-nnue: Stockfish NNUE (efficiently updateable neural network)] by [[Norman Schmidt]]
* [https://github.com/FireFather/nnue-gui GitHub - FireFather/nnue-gui: basic windows application for using nodchip's stockfish-nnue software] by [[Norman Schmidt]]
 
==Networks==
* [https://tests.stockfishchess.org/nns Neural Net download and statistics]
* [https://www.comp.nus.edu.sg/~sergio-v/nnue/ Index of /~sergio-v/nnue] by [[Sergio Vieri]]
 ==BinariesRating==* [httphttps://rebel13github.nlcom/downloadglinscott/stockfishfishtest/wiki/Regression-nnue.html Stockfish NNUE | Home of the Dutch Rebel] hosted by [[Ed Schroder|Ed Schröder]Tests Regression Tests]* [httpshttp://abrokccrl.euchessdom.com/stockfish-nnueccrl/404/cgi/ Stockfish NNUE Development Versions]engine_details.cgi?print=Details&each_game=Rating Lists=1&eng=Stockfish%2012%2064-bit#Stockfish_12_64-bit Stockfish 12 64-bit] in [[CCRL|CCRL Blitz]]* [http://computerchess.org.uk/ccrl/404/cgi/engine_details.cgi?match_length=30&each_game=1&print=Details&each_game=1&eng=Stockfish%2BNNUE%20150720%2064-bit%204CPU#Stockfish%2BNNUE_150720_64-bit_4CPU Stockfish+NNUE 150720 64-bit 4CPU] in [[CCRL|CCRL Blitz]]
==Misc==
* [https://en.wikipedia.org/wiki/Stockfish Stockfish from Wikipedia]

Navigation menu