Moje najlepsze przypuszczenie, że zrobiono to w celu skrócenia czasu obliczeń, w przeciwnym razie musielibyśmy znaleźć wartość q dla każdej akcji, a następnie wybrać najlepszą.
Nie ma realnego wpływu na czas obliczeń, poza niewielkim wzrostem (z powodu dodatkowej pamięci używanej przez dwie sieci). Państwo mogli buforować wyniki sieci docelowej jak sądzę, ale to chyba nie warto byłoby to dla większości środowisk, a ja nie widziałem implementację, która to robi.
Czy coś brakuje?
Ma to związek ze stabilnością algorytmu Q-uczenia się podczas korzystania z aproksymacji funkcji (tj. Sieci neuronowej). Korzystanie z oddzielnej sieci docelowej, aktualizowanej co tyle kroków o kopię najnowszych wyuczonych parametrów, pomaga uchronić się przed niekontrolowanym ładowaniem od zdominowania systemu numerycznie, powodując rozbieżności szacunkowych wartości Q.
Wyobraź sobie, że jeden z punktów danych (at S, A, R, S'
) powoduje, że obecnie słabe przeszacowanie Q(S', A')
się pogarsza. Być S', A'
może nawet jeszcze nie odwiedzono, lub wartość R
widzianego do tej pory jest wyższa niż średnia, przypadkowo. Jeśli próbka zostanie (S,A)
przycięta wiele razy w powtórce, za każdym razem pogorszy się, ponieważ aktualizacja Q(S,A)
jest oparta na R + max_a Q(S',a)
. Naprawienie sieci docelowej ogranicza szkody, jakie mogą wyrządzić takie przeszacowania, dając sieci uczącej się czas na zebranie się i utratę większej części początkowego obciążenia.
Pod tym względem korzystanie z oddzielnej sieci docelowej ma bardzo podobny cel - odtwarzanie. Stabilizuje algorytm, który inaczej miałby problemy ze zbieżnością.
Możliwe jest również posiadanie DQN z „podwójnym uczeniem się”, aby rozwiązać osobny problem: błąd maksymalizacji. W takim przypadku możesz zobaczyć implementacje DQN z 4 sieciami neuronowymi.