AlphaZero: какие узлы посещали во время самостоятельной игры? - PullRequest
1 голос
/ 11 января 2020

Чтение Эта статья очень помогла в понимании принципов AlphaZero. Тем не менее, есть кое-что, в чем я не совсем уверен.

Ниже приведен авторский метод UCT_search, с которым можно ознакомиться в его коде на Github: https://github.com/plkmo/AlphaZero_Connect4/tree/master/src
Здесь , UCTNode.backup() добавляет net value_estimate ко всем пройденным узлам (см. Также 'шпаргалку' ).

def UCT_search(game_state, num_reads,net,temp):
    root = UCTNode(game_state, move=None, parent=DummyNode())
    for i in range(num_reads):
        leaf = root.select_leaf()
        encoded_s = ed.encode_board(leaf.game); encoded_s = encoded_s.transpose(2,0,1)
        encoded_s = torch.from_numpy(encoded_s).float().cuda()
        child_priors, value_estimate = net(encoded_s)
        child_priors = child_priors.detach().cpu().numpy().reshape(-1); value_estimate = value_estimate.item()
        if leaf.game.check_winner() == True or leaf.game.actions() == []: # if somebody won or draw
            leaf.backup(value_estimate); continue
        leaf.expand(child_priors) # need to make sure valid moves
        leaf.backup(value_estimate)
    return root


Этот метод кажется посещать только узлы, непосредственно связанные с узлом root.
Тем не менее, Оригинальная статья DeepMind (об альфа-канале Go Ноль) гласит:

Каждая симуляция начинается с состояния root и итеративно выбирает движения, максимизирующие верхняя доверительная граница Q (s, a) + U (s, a), где U (s, a) ∝ P (s, a) / (1 + N (s, a)), пока конечный узел s 'не будет встретились.

Поэтому вместо этого я бы ожидал что-то вроде:

def UCT_search():
    for i in range(num_reads):
        current_node = root
        while current_node.is_expanded:
            …
            current_node = current_node.select_leaf()
        current_node.backup(value_estimate)

(UCTNode.is_expanded равно False, если узел еще не посещался (или это конечное состояние, т.е. конец игры)


Не могли бы вы объяснить, почему это так? Или я что-то упускаю?
Заранее спасибо

...