强化学习之Double DQN

Double DQN算法

Double Deep Q Network(DDQN)是在DQN算法的基础上稍微改进了一点,优化了算法的性能。

Double DQN算法描述

首先我们要知道Double DQN是解决了DQN当中的什么问题?普通的 DQN 算法通常会导致对Q值的过高估计 (overestimation) ,为什么会出现这样的问题呢,先来看一下传统的DQN怎么处理TD目标的:
Y t D Q N = R t + 1 + γ max ⁡ a Q ( s t + 1 , a ; θ t ′ ) \begin{align} {Y}_{t}^{DQN}=R_{t+1}+\gamma{\max_{a}Q(s_{t+1},a;\theta_{t}^{'})} \end{align} YtDQN=Rt+1+γamaxQ(st+1,a;θt)
式中Q是通过神经网络预测得到的,本身就存在误差,在改进神经网络的同时max操作也放大了误差,因此导致了值函数的过估计。先来看一个例子:
强化学习之Double DQN_第1张图片
S1为智能体初始状态,S2-Sn为中间状态,GOAL为目标位置,开始时设计的奖励为到达目标点为1,S1跳转到中间状态为0,中间状态到目标位置的奖励服从正态分布。在训练样本较少时很有可能因为Q值的过高估计造成训练结果为S1还要经过中间状态才能到达GOAL,只有训练样本多了之后才可能解决这个错误。
Double DQN的思路是通过估计网络估计目标网络中 Q m a x ( s ′ , a ′ ) Qmax(s',a') Qmax(s,a)最大的动作,然后用这个估计出来的动作在目标网络中Q值来更新。Double DQN的TD目标为:
Y t D o u b l e D Q N = R t + 1 + γ Q ( s t + 1 , arg max ⁡ a Q ( s t + 1 , a ; θ t ′ ) ) \begin{align} {Y}_{t}^{DoubleDQN}=R_{t+1}+\gamma Q(s_{t+1},{\argmax_{a}Q(s_{t+1},a;\theta_{t}^{'})}) \end{align} YtDoubleDQN=Rt+1+γQ(st+1,aargmaxQ(st+1,a;θt))
总的来时就是用估计网络选动作,更新时,目标网络给选出的这个动作Q值。

你可能感兴趣的:(强化学习,人工智能,机器学习)