AI Review updates 2019-06-19

I find the “Top game changing moves” feature mostly unhelpful.

What is it supposed to mean? A true game changing move is a blunder, but this feature often highlights moves that were good (and often obvious!), and didn’t change the game much or at all, so there is nothing to learn from them. It seems Leela even knows this: (0 means no change to win rate, right?)


(from )


The current issue with the top 3 is that it’s using lz “hunches”, the quick policy evaluations, to find them. Deeper analysis will often find the actual game changing move to be slightly before that policy really starts “seeing” the change. One of the things I’ll be working on is better ways of honing in on better top 3 moves that’s still computationally efficient enough to do for every game.


One way of doing this would be to run a check post-analysis: For any move analyzed that is the same as the AI move, re-run AI analysis on the previous move and display that instead.


But how are you selecting the 3 currently? By what metric? Are you really looking for blunders, or something else?

Surely when a move gives zero change, it shouldn’t be in the top 3?

Like he already said, leela zero hunches.

The engine runs through the whole game on 1 playout, basically just getting an instinct feel for it, uses that to pick the top 3, and then does a deeper analysis on those 3 moves.

1 Like

Here’s a zero-cost improvement: You can use minimax to improve a sequence of winrates by using the later winrates as playouts for the earlier moves. The observation has been stated many times. I’m quoting Animiral below

If black can gain 17.3pp by playing N6, then the value of the current position is not 25.9%, but 43.2%.

Programmatically, you’d apply the following formula starting from the end of the array and decreasing i:

wr[i] = f(wr[i], wr[i+1])

where f is max or min depending on whether move i+1 is black or white. As a sanity check, after processing the pp changes should all be negative.

Then pick the top 3 game-changing moves and do a deeper analysis on them as before.

1 Like

I don’t actually know how Leela works, but if it has the kind of static evaluation function that doesn’t take account of whose turn it is, then playing a move will almost always increase your apparent winrate according to the evaluation function (without search) - which is the opposite of what a proper analysis using a deep search should do.

frolag: I think the problem is rather that the top 3 game-changing moves are base on just one playout. Basically, I believe LeelaZero already calculates winrates the way you described. However, one single playout is likely to miss the important variation …


So your point that is my formula doesn’t help?

What my formula does is incorporate the game variation, so at least one variation is no longer missed. Why would that not be helpful?

To say things differently, I think that anoek now realizes that positive pp’s tend to vanish with a deeper analysis. These moves are actually the least likely to yield a game-changing move after a deeper analysis, so a first improvement is to stop picking them as candidates. As a refinement, anoek probably thinks that these moves indicate that the previous move could be a blunder. Or maybe the next move? What my formula does is tackle all of these issues in a principled way.

I’m sceptical if it would be a significant improvement. Also, I have a question about this min/max backtracking:

Correct me if I’m wrong, but I think LeelaZero explores a subtree of the tree of all variations (tree as in a mathematical graph), where the leave nodes are board states of a finished game. So the winning probability at the leaves are 0 or 1. Now imagine the program backtracks from the leaves all the way to the root, always taking the min/max of the child nodes winning probabilities. Then the (estimated) winning probability of the root would also be 0 or 1. But since LeelaZero usually gives a number between 0 and 1, it must estimate the winning probability in some other way, perhaps modified a bit.

If that’s the case, I think it would be more sensible to implement the same backtracking as LeelaZero does. But even so, I doubt it would improve much. More playouts are worth a lot. But of course I realize that it also takes a lot of computing.


White 100%? But I’ve wooon already…


The exploration doesn’t so deep. The leaves of the explored subtree are just other unfinished board states. For any leave LZ estimates the probability to win. The win probability of a possible next move is then the average over the leaves.

With LZs NN it is possible to do a hunch with 0 playouts, just using the NNs estimated win probability for the current board position without any tree search at all.

LZ isn’t a strict AZ reimplementation anymore. Some minor details may have changed to get better results for the move to play selection.


Known issue, being worked on.

For some reason, the last pass of a game makes the bar flick into the opposite direction. If you click back one move in the analysis, it gets it right.

1 Like

It’s probably a 2x performance gain. Nothing spectacular, but worth doing nonetheless. I know that using one playout per move is bad, but that’s pretty much all OGS can afford it seems, so options are limited. OGS is trying to make the best lemonade with very few lemons, and every trick helps.

At this point I’m thinking maybe we would be better off without the “top three game changeing moves” feature. I know these are harsh words, but hear me out:
Everyone knows AI is superhumanly strong in go, thus many people probably trust the AIs choice of top three moves. People trying to learn from it might come to wrong conclusions because the Analysis is actually lackluster.

Don’t get me wrong, I really appreciate the effort, and I hear the full review feature is awesome now.

1 Like

I was/am being lazy and waiting for the documentation to come out before trying to wrap my head around this feature but there is this:

Thanks again flovo. :+1:

Isn’t the blue move locally better than N6 because I will avoid being captured the 9 black stones. However, I don’t know how effective for the entire game. And why the numbers are so different. Sorry, I’m an old guy who doesn’t know anything about AI, but try to learn. Ignore me if I am saying nonsense.

1 Like

Hello @Ewak and thank you for the question! I am happy to explain :slight_smile:

The 9 black stones are already dead. There is no saving them with any move. I should not have let them die earlier with m6 (-60% chance to win).

I believe that the big difference in numbers (o7: -7.5, n6: +17.3) comes from the different depths to which Leela has explored these alternatives.
Blue o7 is the game variation. Leela has spent a lot of computing time looking at it and she is confident that after black plays there, his win chance will be ~18.4%.

In contrast, she has only glanced at n6. OGS does not reveal the number of “visits”, i.e. explored variations, that Leela has invested in n6, but presumably it was not more than a few dozen. The same is probably true about the various -70 moves strewn about. As a result, the number 17.3 does not mean anything. It is a shallow guess.

This is why I made the suggestion that these shallow results should be removed from the output (and certainly not put front and center in green highlights).
I also have a suspicion that there is something wrong with the “baseline” value of the position (25.9%). Normally, Leela’s move should preserve your winning chances (± 0).



I don’t know if someone else has already reported it, I couldn’t find it when I browsed through the thread.

It seems that the diasble AI review doesn’t really do its job in post-game.
You will still see the evaluated moves.

Is there a way to completely hide it?


Got it. Thank you.