Meu melhor palpite é que isso foi feito para reduzir o tempo de computação, caso contrário, teríamos que descobrir o valor q para cada ação e selecionar o melhor.
Não tem impacto real no tempo de computação, exceto um pequeno aumento (devido à memória extra usada por duas redes). Suponho que você poderia armazenar em cache os resultados da rede de destino, mas provavelmente não valeria a pena para a maioria dos ambientes, e eu não vi uma implementação que faça isso.
Estou esquecendo de algo?
Tem a ver com a estabilidade do algoritmo Q-learning quando se usa aproximação de funções (isto é, a rede neural). O uso de uma rede de destino separada, atualizada a cada passo com uma cópia dos parâmetros aprendidos mais recentes, ajuda a impedir que o viés de fuga de bootstrap domine o sistema numericamente, causando divergência nos valores estimados de Q.
Imagine que um dos pontos de dados (at S, A, R, S'
) cause uma superestimação atualmente ruim para Q(S', A')
piorar. Talvez S', A'
nem tenha sido visitado ainda, ou o valor do R
visto até agora seja superior à média, apenas por acaso. Se uma amostra (S,A)
surgisse várias vezes na reprodução da experiência, ela pioraria novamente a cada vez, porque a atualização para Q(S,A)
é baseada em R + max_a Q(S',a)
. A correção da rede de destino limita o dano que essas superestimações podem causar, dando à rede de aprendizado tempo para convergir e perder mais de seu viés inicial.
Nesse sentido, o uso de uma rede de destino separada tem um objetivo muito semelhante ao de repetir. Ele estabiliza um algoritmo que, de outra forma, tem problemas de convergência.
Também é possível ter um DQN com "aprendizado duplo" para resolver um problema separado: Viés de maximização. Nesse caso, você pode ver implementações de DQN com 4 redes neurais.