强化学习之DQN

DQN算法

上一节课讲到的Q-learning 算法存在一定的缺点,那就是在大范围状态空间中的数据处理能力不足。造成这种缺点的原因是其采用了表格的方式来存储Q值造成的,可以试想一下围棋的状态,它是有数万个状态的,如果以此来建立一个表格,将会在表格的查询、修改、存储上就要占用计算机很多的资源,使得计算机的学习效率降低。
这时我们就想能不能找到一个函数,使得我给这个函数一个状态作为输入,他就能输出在这个状态下所做动作的Q值。而神经网络就是非常适合做这件事情的,采用神经网络来拟合值函数,把状态作为输入,输出为状态值函数,根据状态值函数选择动作。

DQN算法描述

利用神经网络逼近值函数的过程如图所示,整个学习过程也就是学习神经网络的参数 θ \theta θ,当神经网络训练完成后,参数 θ \theta θ也就确定下来,对应值函数Q(s,a; θ \theta θ)就不再发生变化,这时候训练过程就收敛了。
强化学习之DQN_第1张图片
这里就是DQN的第一个特点,引入了神经网络,利用神经网络去拟合Q表,避免了因状态过多而造成的资源浪费。
在训练过程中,因为这些数据具有很强的时序性,所以它们之间必然会存在相关性,利用这些数据去训练Agent很有可能会造成Agent按照固定策略去学习,因此我们要打破这种相关性。这里就有了DQN算法的第二个特点,引入了记忆库,利用经验回放机制,使得在进行网络更新时输入的数据符合独立同分布,打破了数据之间的相关性。
相比传统的Q-learning算法更新Q值,DQN算法是对网络参数的更新,我们依然采用梯度下降的方式去更新 θ \theta θ,公式如下:
θ t + 1 = θ t + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ ) − Q ( s , a ; θ ) ] ∇ Q ( s , a ; θ ) \begin{align} {\theta}_{t+1}=\theta_t+\alpha[r+\gamma{\max_{a'}Q(s',a';\theta)}-Q(s,a;\theta)]{\nabla}Q(s,a;\theta) \end{align} θt+1=θt+α[r+γamaxQ(s,a;θ)Q(s,a;θ)]Q(s,a;θ)
但这个公式里面计算TD目标的动作值函数使用的参数 θ \theta θ与值函数计算梯度下降使用的参数 θ \theta θ相同,这样获得的数据也会具有相关性。这里就有了DQN的第三个特点,引入目标网络,利用延后更新的目标网络计算 θ \theta θ,极大的提高了网络训练的稳定性和收敛性。这样 θ \theta θ的更新公式就变成了:
θ t + 1 = θ t + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ ′ ) t a r g e t Q − N e t w o r k − Q ( s , a ; θ ) e v a l ] ∇ Q ( s , a ; θ ) \begin{align} {\theta}_{t+1}=\theta_t+\alpha[\underset{targetQ-Network }{r+\gamma{\max_{a'}Q(s',a';\theta{'})}}-\underset{eval }{Q(s,a;\theta)}]{\nabla}Q(s,a;\theta) \end{align} θt+1=θt+α[targetQNetworkr+γamaxQ(s,a;θ)evalQ(s,a;θ)]Q(s,a;θ)
TD目标网络使用的是参数 θ ′ \theta{'} θ,TD网络中的参数并不是在训练过程中每一步都更新的,而是固定一定的步数将价值网络保存下来的参数复制到TD网络中,他自身不会去通过训练更新参数,而是仅用来计算。通过设置独立的TD目标网络和暂时冻结的神经网络参数降低获得的数据的相关性,保证神经网络的稳定性。

DQN算法流程

初始化记忆库D,设置存储容量为N,使用随机数值初始化参数 θ \theta θ,令 θ ′ = θ \theta{'}=\theta θ=θ
重复执行每一个情节;
给定初始状态s;
  重复执行每一个情节中的每一步;
  在状态 s t s_t st执行动作 a t a_t at获得奖赏 r t r_t rt ,使得Agent状态由 s t → s t + 1 s_t{\to}s_{t+1} stst+1
  将{ s t , a t , r t , s t + 1 s_t,a_t,r_t,s_{t+1} st,at,rt,st+1}存储进记忆库D中;
  从记忆库中均匀采样一个样本数据batch计算q_eval和q_target;
  执行一次梯度下降,更新价值网络参数 θ = θ + Δ θ \theta=\theta+\Delta\theta θ=θ+Δθ
  每隔C步更新一次TD目标网络参数 θ ′ \theta{'} θ
  判断 s t s_t st是否处于终止状态,若是,结束当前情节;否则 s t ← s t + 1 s_t{\leftarrow}s_{t+1} stst+1(这里的意思是赋值,不是状态跳转)继续循环
  判断是否达到提前设置好的最大训练次数,若是,结束当前情节;否则继续训练;
强化学习之DQN_第2张图片

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