Skip to content

Bad Gyal

dkappe edited this page Apr 4, 2020 · 21 revisions

Bad Gyal is done. The final release, Bad Gyal 8, is available below.

On Lichess

If you'd like to play Bad Gyal on a Raspberry PI 3, you can find her here.

On Android

The latest 0.22 executables can be found here.

Training the Ideal Sparring Partner

If you like to watch engines play against each other, these nets are not for you. They are designed to give humans good sparring partners. ("Bad Gyal" is Jamaican for "bad girl.")

How were they trained? By taking lichess games and producing Q and policy data from low depth SF10 searches. These are then trained against q+z. Basically we combine flawed human play with sf10 smarts (but not too smart) to give us a more swashbuckling and occasionally positional opponent.

The net will run on CPU or GPU as it is a 48x5 net. Important: looks like 48x5 with the convolutional policy head won't run on all BLAS versions. I'm training up a 128x10 version so it will run on most.

Right now the net is a bit stupid when it has a big material imbalance or is in the endgame. That’s simply an issue with the lichess training data not having much play after someone drops a rook or gets into a lost ending. I’m playing out all non-terminal position games to alleviate that issue.

Good Gyal and Evil Gyal

I’m training nets on the same data, but with different q-ratios. Good Gyal is at a q-ratio of 0.75, which means it gets more influence from Stockfish, while Evil Gyal is at a q-ratio of 0.25, so more influence from sleazy human blitz play.

Progress

A running 800 node gauntlet.

   # PLAYER        :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 Bad Gyal 7    :      14      8  1028.5    2000  51.4      81  725  607  668  30.4
   2 Bad Gyal 6    :       7      9  1000.5    2000  50.0      82  693  615  692  30.8
   3 Bad Gyal 5    :       0      8   971.0    2000  48.5     ---  665  612  723  30.6

White advantage = 34.13 +/- 5.27
Draw rate (equal opponents) = 30.79 % +/- 0.86

Versus 1 CPU engines from high on the CCRL list, the results are promising (1070 vs 1CPU 1+1):

   # PLAYER        :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 Bad Gyal 7    :    3301     57    39.0      53  73.6     100   30   18    5  34.0
   2 pedone        :    3132     89     7.5      27  27.8      62    4    7   16  25.9
   3 LazyGull      :    3104     92     6.5      26  25.0     ---    1   11   14  42.3

White advantage = 56.50 +/- 45.30
Draw rate (equal opponents) = 43.42 % +/- 9.38

Releases

  • Bad Gyal 1. This is a 20k step version.
  • Bad Gyal 2. This is the full 200k step version with 3 LR drops.
  • Bad Gyal 128x10 A 128x10 version of Bad Gyal 2. My target is 48x5, so I'm unlikely to make very many of these.
  • Bad Gyal 3 This time 64x6 to avoid blas issues. Hopefully endgame and bad moves in imbalanced positions have been resolved.
  • Bad Gyal 4 128x10. Ignore this net. Endgame data was bad.
  • Bad Gyal 4a 128x10. Rerun without the faulty endgame data. Probably the strongest tactical net (including T40, LD2, etc.).
  • Bad Gyal 5 128x10. 1.3M games. q-ratio 0.5.
  • Good Gyal 5 48x5, trained on the same data as Bad Gyal 5, but at a q-ratio of 0.75. MiniHuman on lichess updated to use this net.
  • Evil Gyal 6 48x5, q-ratio 0.25, 2M games.
  • Good Gyal 6 192x16, q-ratio 0.75, 2M games.
  • Bad Gyal 6 128x10, q-ratio 0.5, 2M games.
  • Bad Gyal 7 128x10, q-ratio 0.5, 2.48M games.
  • Good Gyal 7 192x16, q-ratio 0.75, 2.48M games.
  • Bad Gyal 8 128x10, q-ratio 0.5
  • Tiny Gyal 16x2, q-ratio 0.5