Czy w AlphaZero musimy przechowywać dane o stanach terminali?

Dec 16 2020

Mam pytanie dotyczące danych treningowych używanych podczas kroku aktualizacji / wstecznej propagacji sieci neuronowej w AlphaZero.

Z artykułu:

Dane dla każdego przedziału czasowego $t$ jest przechowywany jako ($s_t, \pi_t, z_t$) gdzie $z_t = \pm r_T$ jest zwycięzcą gry z perspektywy obecnego gracza na danym etapie $t$. Równolegle (rys. 1b) nowe parametry sieci$\Theta_i$ są trenowane z danych ($s,\pi, z$) pobierane równomiernie ze wszystkich przedziałów czasowych ostatniej iteracji (-ów) gry własnej

Odnośnie polityki w czasie $t$ ($\pi_t$), Rozumiałem to jako rozkład prawdopodobieństwa podjęcia jakiejś czynności, która jest proporcjonalna do liczby wizyt w każdym węźle potomnym, tj. Podczas MCTS, biorąc pod uwagę jakiś węzeł nadrzędny (stan) w danym momencie $t$, jeśli jakiś węzeł potomny (kolejny stan) $a$ jest odwiedzany $N_a$ razy i wszystkie węzły podrzędne są odwiedzane $\sum_b N_b$ razy, to prawdopodobieństwo $a$ (i odpowiadający mu ruch) jest próbkowany $\frac{N_a}{\sum_b N_b}$, a to parametryzuje rozkład $\pi_t$. Czy to jest poprawne? Jeśli tak jest, to dla jakiegoś stanu końcowego$T$, nie możemy sparametryzować dystrybucji, ponieważ nie mamy żadnych węzłów potomnych (stanów) do odwiedzenia. Czy to oznacza, że ​​nie dodajemy ($s_T, \pi_T, z_T$) do danych treningowych?

Kolejne pytanie dotyczące funkcji straty:

$l = (z-v)^2 - \pi^T log\textbf{p} + c||\Theta||^2$

Jestem zdezorientowany $\pi^T$notacja. Domyślam się, że jest to wektor działań pobrany ze wszystkich zasad w$N$ X $(s_t, \pi_t, z_t)$minibatch, ale nie jestem pewien. (PS$T$ używany w $\pi^T$ różni się od $T$używany do określenia stanu końcowego, jeśli spojrzysz na papier. Przepraszam za zamieszanie, nie wiem jak napisać dwa różne wyglądające T)

Odpowiedzi

DennisSoemers Dec 16 2020 at 23:21

Nie jestem w 100% pewien, czy dodali jakieś dane dotyczące stanów gry terminalowej, ale bardzo rozsądne jest dokonanie wyboru, aby nie uwzględniać danych dotyczących stanów gry terminalowej. Jak słusznie zauważyliście, nie mamy żadnych znaczących celów, do których moglibyśmy zmierzać w kierunku aktualizacji polityki w takich przypadkach, a to nie jest tak naprawdę problem, ponieważ tak naprawdę nigdy nie wykorzystalibyśmy wyników polityki w stanie gry terminalowej. Jeśli chodzi o głowę wartości, moglibyśmy zapewnić znaczące cele do aktualizacji, ale znowu nigdy nie musielibyśmy faktycznie korzystać z takich wyników; jeśli napotkamy stan gry terminalowej podczas przeszukiwania drzewa, po prostu wykonujemy kopię zapasową prawdziwej wartości tego stanu gry terminalowej zamiast wykonywać wywołanie sieci w celu uzyskania przybliżenia funkcji wartości.

Teoretycznie mógłbym wyobrazić sobie przypadki, w których uczenie wartości na podstawie stanów końcowych może być nieco korzystne, mimo że nie jest absolutnie konieczne; mogłoby to umożliwić generalizację do podobnych stanów gry, które nie są terminalne (ale bliskie bycia terminalnymi) i przyspieszyć ich naukę. Na przykład, jeśli masz grę, w której celem jest ukończenie linii$5$ sztuk, uczenie wartości czołowej na stanach końcowych, w których faktycznie masz linię $5$ sztuk i całkowite zwycięstwo w grze może uogólnić i przyspieszyć naukę dla podobnych stanów gry, których jeszcze nie masz $5$sztuk w linii, ale są bardzo blisko tego celu. To powiedziawszy, intuicyjnie nie czuję, że przyniosłoby to dużą korzyść (jeśli w ogóle) i prawdopodobnie moglibyśmy również wymyślić przypadki, w których byłoby to szkodliwe.


w $\pi^{\text{T}}$ notacja, $\pi$ jest wektorem (dla dowolnego przedziału czasowego, krok czasowy nie jest tutaj określony) zawierającym dyskretny rozkład prawdopodobieństwa dla działań (liczby wizyt MCTS, znormalizowane do rozkładu prawdopodobieństwa), a $\text{T}$po prostu oznacza, że ​​wykonujemy transpozycję tego wektora. Osobiście jednak nie lubię notacji, wolę coś takiego$\pi^{\top}$ która jest wyraźniejsza w odróżnieniu od litery $T$ lub $\text{T}$.

W każdym razie, kiedy zrozumiesz, że oznacza to transpozycję, zobaczysz to $\pi^{\top}\log(\mathbf{p})$ jest iloczynem skalarnym między dwoma wektorami, który następnie jest pojedynczym skalarem.