强化学习DQN算法

DQN,即Deep Q-learning算法,是将神经网络与Q-learning算法相结合而得到的强化学习算法。在DeepMind发表的论文《Playing Atari with Deep Reinforcement Learning》中,DeepMind使用DQN算法训练出可以玩Atari游戏的模型,该模型甚至在某些游戏上表现的比人类还要优秀。然而,该算法性能如此优秀,原理却不是很复杂,本篇文章将介绍这个神奇的算法。

算法思想

DQN是神经网络和Q-learning算法相结合的产物,其基本思想与Q-learning一致,都是通过估计动作价值函数q(s,a)q(s,a)的值以选择合适的策略。两者的不同之处在于:

  1. 原本在Q-learning中用来存储QQ值的Table,在DQN中被取缔了,取而代之的是一个神经网络。
  2. 在模型训练过程中,DQN算法利用离线记忆存储的方式,打破了样本的相关性。

在原本的Q-learning算法中,使用一个张Table存储所有状态以及动作空间的QQ值。如果状态和动作空间是离散且动作维度不高的时候,一张Table完全可以存储。如果状态和动作空间高维连续时,这时候Table所需要存储的数据就非常巨大甚至海量,这时候Table就显得很无力了。

事实上,Table在整个Q-learning算法中的作用是根据输入的状态ss,输出动作空间AAQQ值,如果用函数来表示如下:

q(S,A)=f(S;θ)q(S,A)=f(S;\theta)

从公式上看,只要完成这一功能,使用何种形式去实现都可以,而神经网络恰好是其中一个很合适的方案。因为神经网络的本质就是使用一组有限的参数θ\theta,根据某种规律来拟合某种分布,以进行预测评估。有于神经网络只需要一组有限的参数θ\theta,因此可以避免存储数量庞大的样本,减少样本存储占用,提升性能。

同样,在原本的Q-learning算法中,每一次与环境进行交互之后,得到的样本基本只能使用一次。这就导致样本的利用率不是很高,尤其是对于那些有着非常积极影响的样本。通过将这些样本存储下来,之后对样本进行采样训练,可以在一定程度上提高对样本的利用率,加速算法的收敛。

算法流程

  1. 初始化一个存储容量为NN的记忆池DD,同时随机初始化一个QQ网络。

  2. 按以下流程迭代MM轮。

    1. 初始化状态s1s1为第一个状态x1x1,并进行处理得到特征向量ϕ(s1)\phi(s1)

    2. 按以下流程迭代TT轮。

      1. 通过ϵ\epsilon-greedy算法根据状态sts_t从动作空间中得到动作ata_t,通过QQ网络选择动作的公式如下。

        at=maxaQ(ϕ(st),a;θ)a_t=\max_aQ^*(\phi(s_t),a;\theta)

      2. 执行动作ata_t并观测环境,得到奖励ttt_t以及图片xt+1x_{t+1}

      3. 设置st+1=st,at,xt+1s_{t+1}=s_t,a_t,x_{t+1}并对st+1s_{t+1}提取特征得到ϕ(st+1)\phi(s_{t+1})

      4. 将状态st+1s_{t+1}存储到记忆池DD中。

      5. 随机从记忆池DD中选择一组minibatchminibatch的记忆(ϕj,aj,rj,ϕj+1)(\phi_j,a_j,r_j,\phi_{j+1}),并根据以下公式计算收获:

        yj={rjfor terminal ϕj+1rj+γmaxaQ(ϕj+1,a;θ)for non-terminal ϕj+1y_j={ \begin{cases} r_j &\text{for terminal }\phi_{j+1} \\ r_j+\gamma\max_{a'}Q(\phi_{j+1,a';\theta}) &\text{for non-terminal }\phi_{j+1} \end{cases} }

      6. 通过(yjQ(ϕj,aj;θ))2(y_j-Q(\phi_j,a_j;\theta))^2来计算损失,并通过梯度更新QQ网络的参数。

需要注意的是:

  1. 记忆池的容量为NN,当记忆池中的记忆数量达到NN时,在新加入记忆时,会将最久远的记忆清除掉。
  2. 在实际训练时,ϵ\epsilon-greedy算法的ϵ\epsilon值会随着迭代次数的增加而减小。
  3. QQ网络的目标函数是(yjQ(ϕj,aj;θ))2(y_j-Q(\phi_j,a_j;\theta))^2,目的是让QQ网络预测的QQ值更加接近真实值。
坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者:bdqfork
  • 本文链接:/articles/48
  • 版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA 许可协议。转载请注明出处!
表情 |预览
快来做第一个评论的人吧~