DQN(Deep Q-Network)

Hi,这是第一篇算法简介呀

论文链接: “Human-level control through deep reinforcement learning”,2013.

文章概述

  本文首次提出了一种深度学习模型,利用强化学习的方法,直接从高维的感知输入中学习控制策略。
  DL算法需要大量手工标记数据,而RL中从输入到获得reward信号存在稀疏、有噪声和延迟的问题。DL算法假设data是独立的;而在RL中data的关联度较高,改变数据分布后,RL可以学习到新行为。
  本文提出的模型可以克服以上挑战。该网络使用Q-learning的变体,采用随机梯度下降法更新weights,使用经验回放机制解决数据相关性问题和非平稳分布问题。

  • replay memory
    存储每个时间步 t t t的agent的经验 e t = ( s t , a t , r t , s t + 1 ) e_t=(s_t,a_t,r_t,s_{t+1}) et=(st,at,rt,st+1)。每步经验可以用于多次weights更新,提高数据利用效率。
  • 网络结构设计
    DQN(Deep Q-Network)_第1张图片
    (我理解的简图)
input:raw pixels
16个filters:非线性变换
32个filters
全连接层
output:每个action对应的Q-value

  (p.s.每个可能的action对应一个独立的output unit)

  • Target网络
    用于固定参数。每隔一定episode与Main网络同步权重。

公式理解

  • 未来折扣回报
    R t = ∑ t ′ = t T γ t ′ − t r t ′ R_t=\sum_{t'=t}^T \gamma^{t'-t}r_{t'} Rt=t=tTγttrt R t R_t Rt t t t时刻获得的未来折扣reward, T T T是游戏结束时的时间步。
  • 最优动作值函数
    Q ∗ ( s , a ) = m a x π E [ R t ∣ s t = s , a t = a , π ] Q^*(s, a)=max_\pi\mathbb{E}[R_t|s_t=s,a_t=a,\pi] Q(s,a)=maxπE[Rtst=s,at=a,π] π \pi π是observation映射到action的策略,即action的分布。
  • 优化目标:最小化损失函数
    • 损失函数
      L i ( θ i ) = E s , a ∼ ρ ( ⋅ ) [ ( y i − Q ( s , a ; θ i ) ) 2 ] L_{i}\left(\theta_{i}\right)=\mathbb{E}_{s, a \sim \rho(\cdot)}\left[\left(y_{i}-Q\left(s, a ; \theta_{i}\right)\right)^{2}\right] Li(θi)=Es,aρ()[(yiQ(s,a;θi))2]其中, y i = E s ′ ∼ E [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ i − 1 ) ∣ s , a ] y_{i}=\mathbb{E}_{s^{\prime} \sim \mathcal{E}}\left[r+\gamma \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime} ; \theta_{i-1}\right) | s, a\right] yi=EsE[r+γmaxaQ(s,a;θi1)s,a]是第 i i i次迭代的目标,即真实值,通过Target网络获得; Q ( s , a ; θ i ) Q\left(s, a ;\theta_{i}\right) Q(s,a;θi)是预测值,通过Main网络获得。
    • 计算梯度(对 θ θ θ 求偏导,复合函数求导)
      ∇ θ i L i ( θ i ) = E s , a ∼ ρ ( ⋅ ) ; s ′ ∼ E [ ( r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ i − 1 ) − Q ( s , a ; θ i ) ) ∇ θ i Q ( s , a ; θ i ) ] \nabla_{\theta_{i}} L_{i}\left(\theta_{i}\right)=\mathbb{E}_{s, a \sim \rho(\cdot) ; s^{\prime} \sim \mathcal{E}}\left[\left(r+\gamma \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime} ; \theta_{i-1}\right)-Q\left(s, a ; \theta_{i}\right)\right) \nabla_{\theta_{i}} Q\left(s, a ; \theta_{i}\right)\right] θiLi(θi)=Es,aρ();sE[(r+γamaxQ(s,a;θi1)Q(s,a;θi))θiQ(s,a;θi)]其中, θ i − 1 \theta_{i-1} θi1为之前固定的参数; r r r为在状态s执行动作a后的reward,是已知值。

伪代码分析

DQN(Deep Q-Network)_第2张图片
  for循环:根据输入,选择action;计算reward和下个state;存储进经验池;随机抽取minibatch个样本更新 θ \theta θ
   y j y_j yj需要根据 ϕ j + 1 \phi_j+1 ϕj+1是否为终止状态,考虑未来折扣reward。
   y j y_j yj相当于真实值, Q ( ϕ j , a j ; θ ) Q(\phi_j,a_j;\theta) Q(ϕj,aj;θ)相当于预测值。

实验结果分析

DQN(Deep Q-Network)_第3张图片
  分别在游戏Breakout和Seaquest上进行测试,指标为Average Reward和Average Q。

代码实现

github传送门:https://github.com/devsisters/DQN-tensorflow.

你可能感兴趣的:(Learning))