美文网首页自然语言处理
从零开始强化学习(五)——Deep Q-network(DQN)

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

作者: 晓柒NLP与药物设计 | 来源:发表于2022-06-24 00:08 被阅读0次

    五. 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 蒙特卡洛法
    • 方法:

      • 输入一个状态,输出接下来的累计奖励。是一个回归问题。网络的输出就是一个值,你希望在输入s_a的时候,输出的值跟 G_a越近越好,输入s_b的时候,输出的值跟G_b越近越好,把网络训练下去就是MC-based的方法
    • 问题:

      • 由于每次都要计算累积奖励,所以必须等待游戏结束才能更新网络,这样花的时间太长
      • 方差很大。本身具有随机性,累积奖励可以看成是一个随机变量


    5.1.2 时序差分法
    • 方法:

      • 假设在某一个状态s_t,采取动作a_t得到奖励r_t ,跳到状态s_{t+1} ,则有:

      V^\pi(s_t) = V^\pi(s_{t+1})+r_t

      • 希望V^\pi(s_t)V^\pi(s_{t+1})相减的损失跟r_t相似,并以此更新V的参数

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

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

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

    方法:

    • 假设有一个Q函数和某一个策略\pi,根据策略\pi学习出的Q函数,保证可以找到一个\pi好的新的策略\pi',在用相同方法找它的Q函数以及新的更好的策略\pi'(s) = \arg \max\limits_a Q^\pi(s,a)

    证明:为什么用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)
    • 定义:

      • 有1-ε的概率会按照Q函数决定动作,主要根据Q函数决定动作,比较少随机决定动作:
        \pi(a|s)= \begin{cases} \underset{a}{\operatorname{argmax}}Q(s,a)\ \ \ \ 1-ε\\ 随机\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ε \end{cases}

      • 通常ε会随时间递减。随着训练次数的增多可以减少探索

    • 对象:

      • 无法尝试Q值比较差的动作,可能的动作有:
        • 最大Q值对应动作
        • 随机动作
    5.4.2 玻尔兹曼探索(Bolzman Exploration)
    • 定义:

      • 输出动作空间上的概率分布,根据概率分布采样选择动作(取指数 --> 归一化)
        P(a|s) = \frac{\exp(Q(s,a))}{\sum_a \exp(Q(s,a))}
    • 对象:

      • 根据Q值确定了动作空间的概率分布,可以通过采样选择任意动作

    5.5 经验回放(Experience Replay)

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

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

    特点:

    • 回访缓冲区内的经验可能来自不同策略
    • 异策略(off-policy)
    • 减少了跟环境做互动的次数,数据利用高效
    • 多样化的训练数据

    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

    相关文章

      网友评论

        本文标题:从零开始强化学习(五)——Deep Q-network(DQN)

        本文链接:https://www.haomeiwen.com/subject/uhipvrtx.html