DQN

作者: 孑立的老章鱼 | 来源:发表于2020-03-16 21:29 被阅读0次

    Q-learning

    q-learning是一种时间差分控制算法,其基础是时间差分预测:V(s)=V(s)+\alpha(r+\gamma V(s\prime)-V(s))
    上一个状态的值=先前状态的值+学习率(奖励+折扣因数(当前状态的值)-先前状态的值)
    直观理解就是实际奖励r+\gamma V(s\prime)和期望奖励V(s)之差乘以学习率\alpha。试图最小化这个误差。
    Q函数也叫状态-行为值函数,用于确定状态s下一个行为a的好坏程度。根据以下方程更新Q值:Q(s,a)=Q(s,a)+\alpha(r+\gamma maxQ(s\prime a)-Q(s,a))

    \gamma是对未来奖励的衰减率,越大对未来越重视,为0时只考虑眼前的值。
    为什么是maxQ而不是minQ呢?想象一个极端情况,五子棋,最后一步,下在X位置赢,100分;其他位置输,0分。那怎么衡量倒数第二步的价值呢?当然是由最后一步的最大价值决定,不能因为最后一步走错了,就否定前面动作的价值。

    image.png

    以冰冻湖为例。设当前处于状态(3,2),并具有向左和向右两种行为。(图5.5)
    使用\epsilon贪婪策略探索出一种新的行为(向下),选择该行为。(图5.6)

    IMG_0172(20200316-210408).JPG
    这时在(3,2)执行向下行为,到达新状态(4,2)。那么如何更新上一状态(3,2)的值呢?观测Q表(图5.7)
    image.png

    \alpha为0.1,\gamma为1,根据Q(s,a)=Q(s,a)+\alpha(r+\gamma maxQ(s\prime a)-Q(s,a))
    则:Q((3,2),向下)=Q((3,2),向下)+0.1(0.3+1*maxQ((4,2),行为)-Q((3,2),向下))
    Q((3,2),向下)=0.8+0.1(0.3+1*max[0.3,0.5,0.8]-0.8)=0.83
    此时,Q(3,2),向下的值更新为0.83。
    现在处于(4,2),需要执行一种行为。设选择概率1-\epsilon选择最佳行为,在状态(4,2)下向右具有最大值,故选择向右。(图5.8)

    image.png

    执行后处于(4,3),然后更新(4,2)的值:
    Q((4,2),向右)=Q((4,2),向右)+0.1(0.3+1*maxQ((4,3),行为)-Q((4,2),向右))
    Q((4,2),向右)=0.8+0.1(0.3+1*max[0.1,0.3]-0.8)=0.78

    image.png
    q_learning实践可参考这个网站:TensorFlow 2.0 (七) - 强化学习 Q-Learning 玩转 OpenAI gym

    DQN

    在q-learning中,需要将每个状态下所有可能行为的值都保存在Q表中,并选取在状态下具有最大值的行为作为最佳行为。如果具有许多状态且每个状态下具有多种行为,那么便利每个状态下的所有行为要耗费大量时间。一种更好的方法是利用某一参数\theta来近似Q函数,即Q(s,a;\theta)\approx Q(s,a)
    可以利用一个权重为\theta的神经网络来近似每个状态下所有可能行为的Q值。这就是DQN。
    在q-learning中:Q(s,a)=Q(s,a)+\alpha(r+\gamma maxQ(s\prime a)-Q(s,a))
    式中r+\gamma maxQ(s\prime,a)是目标值,Q(s,a)是预测值,目的是通过学习一种正确的策略来使得Q(s,a)最小化。
    同理,在DQN中,定义损失函数为目标值与预测值的均方差,同时通过更新权重\theta来最小化损失:loss=(y_i-Q(s,a;\theta))^2
    式中y_i=r+\gamma max_{a\prime} Q(s\prime,a;\theta)
    通过梯度下降来更新权重并最小化损失。

    image.png
    实践参考这个网站:TensorFlow 2.0 (八) - 强化学习 DQN 玩转 gym Mountain Car image.png

    相关文章

      网友评论

        本文标题:DQN

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