Мое лучшее предположение, что это было сделано, чтобы сократить время вычислений, в противном случае мы должны были бы найти значение q для каждого действия, а затем выбрать лучшее.
Это не оказывает реального влияния на время вычислений, кроме небольшого увеличения (из-за дополнительной памяти, используемой двумя сетями). Я полагаю, вы могли бы кэшировать результаты целевой сети, но, вероятно, это не стоило бы этого для большинства сред, и я не видел реализации, которая делает это.
Я что-то упускаю?
Это связано со стабильностью алгоритма Q-обучения при использовании аппроксимации функций (то есть нейронной сети). Использование отдельной целевой сети, обновляемой через каждые несколько этапов копией последних изученных параметров, помогает избежать смещения прогона при начальной загрузке, чтобы доминировать в системе численно, что приводит к расхождению предполагаемых значений Q.
Представьте себе, что одна из точек данных (в S, A, R, S'
) приводит к ухудшению в настоящее время плохой завышенной оценки Q(S', A')
. Возможно, S', A'
еще даже не посещали, или ценность R
увиденного до сих пор выше среднего, просто случайно. Если образец (S,A)
воспроизводится несколько раз при повторном воспроизведении, это будет ухудшаться каждый раз, потому что обновление Q(S,A)
основано на R + max_a Q(S',a)
. Исправление целевой сети ограничивает ущерб, который могут нанести такие завышенные оценки, давая учащейся сети время для сближения и потери большей первоначальной систематической ошибки.
В этом отношении использование отдельной целевой сети имеет очень похожую цель для воспроизведения. Он стабилизирует алгоритм, который в противном случае имеет проблемы сходимости.
Также возможно иметь DQN с «двойным обучением» для решения отдельной проблемы: предвзятость максимизации. В этом случае вы можете увидеть реализации DQN с 4 нейронными сетями.