强化学习之价值学习
强化学习之价值学习
在贝尔曼方程中,我们试图求出 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学习中的缺陷 - 高估真实的价值,且高估是非均匀的。
有两个原因造成高估:
- 自举导致偏差的传播
- 最大化导致TD目标高估真实价值
目标网络 Target Net
切断自举可以避免偏差的传播,从而缓解DQN的高估问题。
用另一个神经网络计算TD目标,而不是用DQN自己计算TD目标。
双Q学习 Double Q Learning
双Q学习在目标网络的基础上做改进,最大限度的化解最大化造成的高估问题。
Q学习中的TD目标:
将最大化部分分成两步走:
选择 - 基于状态 s_j+1 , 选出一个动作能使DQN的输出最大化:
求值 - 计算(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