强化学习之价值学习

在贝尔曼方程中,我们试图求出 Q(s,a) 使得Agent获得最大的利益,这样的学习方式,称之为价值学习。

再次细分,如果是求解最优动作值函数

称为Q-Learning。

如果是求解动作值函数

称为SARSA。

同策略与异策略

为了解释同策略和异策略,我们要从行为策略 (Behavior Policy) 和目标策略 (Target Policy) 讲起。

在强化学习中,我们让智能体与环境交互,记录下观测到的状态、动作、奖励,用 这些经验来学习一个策略函数。在这一过程中,控制智能体与环境交互的策略被称作行为策略。行为策略的作用是收集经验 (Experience),即观测的环境、动作、奖励。

训练的目的是得到一个策略函数,在结束训练之后,用这个策略函数来控制智能体; 这个策略函数就叫做目标策略

同策略是指用相同的行为策略和目标策略。如下所使用的SARSA。

比如SARSA一开始使用e-greedy策略选出一个动作A1,然后在策略更新时也是通过e-greedy策略随机选出一个A2,前后两次使用相同的策略。

异策略是指用不同的行为策略和目标策略。如下所使用的DQN。

比如DQN一开始使用e-greedy策略选出一个动作A1,然后在策略更新时也是通过max(Q(s,a))策略随机选出一个使q最大的动作A2,前后两次使用不同的策略。

时间差分(TD)算法

后面的算法在 Train Q函数时,需要用到TD算法来进行迭代更新学习参数。

以一个驾车时间预测的例子来说明TD算法

假设我是个用户,我要从北京驾车去上海。从北京出发之前,我让模型做预测,模型告诉我总车程是 14 小时:

当我到达上海,我知道自己花的实际时间是 16 小时,并将结果反馈给模型;

可是现在我如果以及走了一段路程,比如我到达济南了,模型该如何使用我以及花费的时间,计算我后续的路程时间呢?

比如,我已经花费了4.5小时到达济南,预计还有11h到达上海,那我之前走过的路程作为我的经验,可以帮助模型更好地修正最开始的预计时间q。

根据模型最新估计,整个旅程的总时间为:

TD算法讲y = 15.5称为TD目标。它比之前的q = 14更可靠,因为它包含了一段事实经验在其中。

所以我们可以用TD目标修正之前的模型,我们希望q尽量接近TD目标y。所以使用平方损失函数有:

直接将y看作常数,计算L关于w的梯度:

如上就是TD算法,Train Q函数的过程。

除了基础的TD算法外,还有进阶版的多步TD算法。

如上中只用到一个奖励r_t所得到的y_t叫做单步TD目标。多步 TD 目标用 m 个奖励, 可以视作单步 TD 目标的推广。

多部TD的结论如下,推导省略:

Q-Learning

Q-Learning也分为两类,基础的Q-Learning算法和基于神经网络模拟最优动作价值函数的DQN算法。

我们需要先了解一些基础知识。假设我们使用Agent在玩一个游戏。

在一局 (Episode) 游戏中,把从起始到 结束的所有奖励记作:

定义折扣率 γ ∈ [0, 1]。折扣回报的定义是:

在游戏尚未结束的 t 时刻,U_t 是一个未知的随机变量,其随机性来自于 t 时刻之后的所有状态与动作。

动作价值函数的定义是:

公式中的期望消除了 t 时刻之后的所有状态 St+1, ··· , Sn 与所有动作 At+1, ··· , An。

最优动作价值函数用最大化消除策略 π:

Q* 如同先知一般,可以预见未来,所以我们是否可以近似得到这样一个先知函数呢?

Q-table

在基础的Q-Learning中,用表格来表示Q*(最优动作价值函数)

比如说,当前是状态2,直接找到状态2的那行,选择改行的最大值,返回该元素对应的动作作为下一个动作。

那问题又回到如何学习到这样一个表格呢?

实际就是对最优贝尔曼方程中的Q*做蒙特卡洛近似。

其训练过程如下:

需要注意的是,此处使用了e-greedy 策略去控制智能体与环境交互,且将行为轨迹存于经验回放数组中。

DQN

在DQN中,用神经网络来近似表示Q*(最优动作价值函数)

原理基本同上,不过DQN中不是使用Table来存储状态动作空间,

而是使用神经网络训练 f(s) 近似模拟Q*,使Q-Learning可以应用在状态更加复杂的应用上。

基本推导同上,只是把更新网格Q 换成了 对神经网络参数w的更新。

其训练过程如下:

SARSA

SARSA不同于上面的Q学习,是学习最优动作价值函数Q*。

SARSA也是TD算法,但是其目的是学习动作价值函数Q(s,a)。

虽然Q(s,a)也能直接控制Agent,但是Q(s,a)目前更多是用来评价策略Pi的好坏。所以常被用在Actor-Critic中做评委。

表格形式的SARSA

其推导过程如下:

其训练流程如下:

Q学习与 SARSA 的对比

  • Q 学习不依赖于 π,因此 Q 学习属于异策略 (Off-policy), 可以用经验回放。而 SARSA 依赖于 π,因此 SARSA 属于同策略 (On-policy),不能用经验回放。
  • 从使用的角度来说,SARSA更加保守,而Q学习更加冒进愿意学习而不怕失败。

神经网络形式的SARSA

和表格形式也是类似,就像Q-Learning与DQN一样。

其训练流程如下:

很明显可以发现:DQN和SARSA最大的区别在于对q_t+1的取值方式不同。

  • DQN是通过s+1去找到使q最大的a(下一个动作) ,得到q(s+1,a)

  • SARSA是通过s+1去随机找一个a作为a+1(下一个动作),得到q(s+1,a+1)

价值学习的优化和缺点

多步TD目标优化

使用多步TD目标,每次优化考虑更多步的影响。

以对SARSA的优化为例:

其实对比TD版,也就是将TD目标函数变成了多步TD目标函数而已。

蒙特卡洛与自举

蒙特卡洛

就比如一场游戏中,我们可以将一局游戏进行到底,观测到所有的奖励 r1, ··· , rn,然后计算回报 ut = sum(r1,..rn),然后拿ut做目标,鼓励价值网络q(s_t,a_t,w)接近与ut。

直接用ut做损失函数:

这种训练方式,不同于之前的TD(不是用部分经验修正预测)。而是蒙特卡洛方法,(用实际观察值ut去近似期望)

其好处是:无偏性

其缺点是:方差大,用ut做目标训练价值函数,收敛会很慢。

自举

“自举”的意思是“用一个估算去更新同类的估算”

如SARSA中使用对s_t+1的状态价值估计去更新s_t的状态,就属于让价值网络自己做的估计去更新价值网络自己,就是自举。

自举的好处是:方差小

自举的坏处是:偏差大,也就是说,自举会传播误差。

价值学习的高级技巧

前三种方法用于改进TD算法,让DQN Train得更好。

后两者是对DQN算法神经网络结构的改进。

  • 经验回放
  • 优先经验回放
  • Q学习的高估问题 - 目标网络(target net)
  • Q学习的高估问题 - 双Q学习
  • 对决网络(dueling net)
  • 噪声网络(noisy net)

经验回放

其实经验回放,我们已经在之前的Q-Learning中有所使用

总结就是收集之前与环境产生的记录存于一个数组中,这个数组就叫做经验回放数组

后续再随机的从数组中抽取记录用于训练。

其好处在于:随机抽取打破了序列的相关性,另一个好处是重复利用收集到的经验,用更少的呀根本达到相同的效果。

其局限性是:只能用于异策略,也就是说,Agent的行为策略要和目标策略不一样,不然学习的就是过时的信息。

优先经验学习

优先经验学习是在经验学习的基础上,为每条记录添加了权重,然后根据权重做非均匀随机抽样。

如果某条记录计算出来的TD误差很大,那么应该给这条记录设置较高的权重。

但是这样还不够,如果做非均匀抽样还应该根据抽样概率来调整学习率α。

权重越大,抽样概率更高,应该给设置较小的学习率α。

虽然两项抵消,但是其应用更多的计算学得了这些重要的样本信息。

Q学习的高估问题

在讨论后续两种方法之前,我们必须了解Q学习中的缺陷 - 高估真实的价值,且高估是非均匀的。

有两个原因造成高估:

  1. 自举导致偏差的传播
  2. 最大化导致TD目标高估真实价值

目标网络 Target Net

切断自举可以避免偏差的传播,从而缓解DQN的高估问题。

用另一个神经网络计算TD目标,而不是用DQN自己计算TD目标。

双Q学习 Double Q Learning

双Q学习在目标网络的基础上做改进,最大限度的化解最大化造成的高估问题。

Q学习中的TD目标:

将最大化部分分成两步走:

  1. 选择 - 基于状态 s_j+1 , 选出一个动作能使DQN的输出最大化:

  2. 求值 - 计算(s_j+1,a*)的价值,从而计算出TD目标:

原始Q学习算法,两步都是使用的DQN

目标网络,两步都是使用目标网络计算

双Q学习,选择是在DQN上做的计算,求值是在目标网络上做的计算

小结:

对决网络 Dueling Net

它的 基本想法是将最优动作价值 Q 分解成最优状态价值 V 与最优优势 D*

对决网络的训 练与 DQN 完全相同,可以用 Q 学习算法或者双 Q 学习算法

与 DQN 一样,对决网络 (Dueling Network) 也是对最优动作价值函数 Q* 的近似。

不同的是,对决网络将Q* 分为两部分进行近似,也就是分拆为两个神经网络进行训练。

噪声网络 Noisy Net

噪声网络的应用不局限于 DQN,它可以用于几乎所有的强化学习方法。

对于增强鲁棒性有不错的效果。

标准的 DQN 记作 Q(s, a; w),其中的 w 表示参数。把 w 替换成 μ + σ ◦ ξ,得到噪声 DQN,记作:

其中的 μ 和 σ 是参数,一开始随机初始化,然后从经验中学习;而 ξ 则是随机生成,每 个元素都从 N (0, 1) 中抽取。噪声 DQN 的参数数量比标准 DQN 多一倍。

在收集数据阶段:

噪声 DQN 本身就带有随机性,可以鼓励探索,起到与 e-Greedy 策略相同的作用。我 们直接用

作为行为策略,效果比 e-Greedy 更好。每做一个决策,要重新随机生成一个 ξ。

后续操作基本一致。

总结

实际编程实现 DQN 的时候,应该将本章的四种技巧——优先经验回放、双 Q 学习、 对决网络、噪声 DQN——全部用到。

参考:
https://github.com/wangshusen/DRL/blob/master/Notes_CN/DRL.pdf

https://www.bilibili.com/video/BV1rv41167yx