自然语言处理

从零开始强化学习(五)——Deep Q-network(DQN)

2022-06-24  本文已影响0人  晓柒NLP与药物设计

五. Deep Q-network(DQN)

现实中强化学习面临的状态空间往往是连续的,存在无穷多个状态。这种情况下,就不能再使用表格对价值函数进行存储,采用价值函数近似(Value Function Approximation)的方式进行逼近

在连续的状态和动作空间中,可以用函数Q_\phi(s,a)来表示近似计算:
Q_\phi(s,a) \approx Q^\pi(s,a)
其中函数Q_\phi(s,a)通常是一个参数为\phi的函数,比如神经网络

5.1 状态价值函数(State Value Function)

衡量这个状态价值函数V^{\pi}(s),有两种不同的做法:MC-based的方法和TD-based的方法:

5.1.1 蒙特卡洛法
5.1.2 时序差分法

5.2 动作价值函数(State-action Value Function)

动作价值函数的输入是状态、动作对。表示在某一个状态采取某一个动作,都是用演员\pi,得到的累计奖励期望值
Q函数的两种写法:

  1. 输入是状态和动作,输出是一个标量
  2. 输入是状态,输出是多个值(只有离散动作才能使用)

方法:


证明:为什么用Q^\pi(s,a)决定出来的\pi'一定比\pi

  1. V π ( s ) = Q π ( s , a ) V^\pi(s)=Q^\pi(s,a)V
  2. \max_a Q^\pi(s,a) = Q^\pi(s,\pi'(s))max

由1、2式可得:

  1. V^{\pi}(s) \leq Q^\pi(s,\pi'(s))
  2. Q^\pi(s,\pi'(s)) = E[r_t+V^\pi(s_{t+1})|s_t=s,a_t=\pi'(s)]

综合3、4可得:V^{\pi}(s) \leq E[r_t+r_{t+1}V^\pi(s_{t+2})|s_t=s,a_t=\pi'(s)]
=E[r_t+r_{t+1}+r_{t+2}+V^\pi(s_{t+3})|s_t=s,a_t=\pi'(s)]=E[r_t+r_{t+1}+r_{t+2}+\cdots|s_t=s,a_t=\pi'(s)]=V^{\pi'}(s)

即证毕,对于估计某一个策略的Q-function,接下来就可以找到另外一个策略\pi'比原来的策略还要更好


5.3 目标网络(target network)

在学习Q-function的时候,会用到TD的概念。那怎么用TD?在状态s_t,采取动作a_t以后,得到奖励r_t,然后跳到状态s_{t+1}。根据这个Q-function:
\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) =r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)
但是实际上这样的一个输入并不好学习,因为假设这是一个回归问题,\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right)是网络的输出,r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)是目标,实际上目标是可变的。在做反向传播的时候,Q^{\pi}的参数会被更新,并会把两个更新的结果加在一起,这样会导致训练变得不太稳定

所以可以把其中一个Q网络,通常是会把右边这个Q网络固定住。在训练的时候只更新左边的Q网络的参数,而右边的Q网络的参数会被固定住。因为右边的**Q网络负责产生目标,所以叫目标网络**。因为目标网络是固定的,所以得到的目标r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)的值也是固定的。只调左边网络的参数,它就变成是一个回归问题。希望模型的输出的值跟目标越接近越好,可以最小化它的均方误差(mean square error)

在实现的时候,把目标网络固定,只调模型输出的网络。在把输出的网络更新几次以后,再去用更新的网络替换目标网络

5.4 探索(Exploration)

这个问题其实就是探索-利用窘境(Exploration-Exploitation dilemma)问题

当使用Q函数时,策略完全取决于Q函数。在采取动作的时候,会采取Q值最大的动作。这样可能会一直采取相同的动作,所以需要探索机制,避免一直采取相同的动作

5.4.1 ε-贪心(ε-greedy)
5.4.2 玻尔兹曼探索(Bolzman Exploration)

5.5 经验回放(Experience Replay)

思想:构建一个回访缓冲区(replay buffer),会将策略与环境互动收集的数据(状态-动作-奖励...)放到缓冲区中。循环迭代训练Q函数时,会从数据缓冲区随机挑一个批量(batch)出来更新Q函数。

迭代地去训练这个Q-function,在每次迭代里面,从这个buffer里面随机挑一个batch出来,根据这把经验去更新Q-function,就跟TD learning要有一个目标网络是一样的

特点:

5.6 DQN原理

DQN使用深度卷积神经网络近似拟合状态动作值函数Q(s,a),其网络结构如上图所示。DQN模型的输入是距离当前时刻最近的4帧图像,该输入经过3个卷积层和2个全连接层的非线性变化后,最终在输出层输出每个动作对应的Q值


算法:

  1. 初始化两个网络Q,\hat{Q},开始目标网络\hat{Q}等于Q
  2. 基于Q函数探索机制Q(ε,玻尔兹曼)选择动作,获得奖励,状态从s_t跳到s_{t+1}
  3. 将数据经验(s_t,a_t,r_{t+1},s_{t+1})塞到数据缓冲区中
  4. 从缓冲区中采样一批量的数据,根据数据计算目标:y=r_i+\max_a \hat{Q}(s_{i+1},a)
  5. 更新Q的参数使得Q(s_i,a_i)尽可能接近于y(回归)
  6. 每C步更新目标网络\hat{Q}=Q
上一篇 下一篇

猜你喜欢

热点阅读