这里写自定义目录标题
- 参考资料
- 基础知识
- 16.3 有模型学习
- 16.3.1 策略评估
- 16.3.2 策略改进
- 16.3.3 策略迭代
- 16.3.3 值迭代
- 16.4 免模型学习
- 16.4.1 蒙特卡罗强化学习
- 16.4.2 时序差分学习
- Sarsa算法:同策略算法(on-policy):行为策略是目标策略
- Q-learning算法:异策略算法(off-policy):行为策略不是目标策略
- 多步时序差分:无偏且方差小
- 16.5 值函数近似
- 16.6 模仿学习
- 16.6.1 直接模仿学习
- 16.6.2 逆强化学习
- 深度Q网络算法
- 经验回放(experience replay)
- 目标网络(target network)
- deep Q network, DQN
- Double Deep Q-Network
- 优先级经验回放 (prioritized experience replay, PER)
- Dueling Deep Q-Network
- 策略梯度 Policy Gradients
- REINFORCE:蒙特卡洛策略梯度
- 近端策略优化(proximal policy optimization,PPO)
- Actor-Critic
- 信赖域策略优化 (Trust Region Policy Optimization, TRPO)
- 深度确定性策略梯度 (Deep Deterministic Policy Gradient, DDPG)
- Soft Actor-Critic
参考资料
《机器学习》周志华
《机器学习》(西瓜书)公式详解
南瓜书PumpkinBook
Reinforcement Learning: An Introduction
second edition
Richard S. Sutton and Andrew G. Barto
incompleteideas代码
张尚彤代码
周沫凡强化学习
周沫凡强化学习代码
周沫凡Python tutorial
张伟楠,沈键,俞勇
动手学强化学习
动手学强化学习代码
蘑菇书
王琦,杨毅远,江季,Easy RL:强化学习教程,人民邮电出版社,2022.
Easy RL:强化学习教程
面向非地面网络的智能无线资源管理机制与算法研究
[1]曹阳. 面向非地面网络的智能无线资源管理机制与算法研究[D]. 电子科技大学, 2023. DOI: 10.27005/d.cnki.gdzku.2023.000168.
波束成形论文代码
中文整理的强化学习资料
我的笔记2020年简书
我的笔记2020年CSDN
model-free
回合更新/单步更新 | on-policy / off-policy | 基于概率/基于价值 | 策略 | 状态 | 动作 | |
---|---|---|---|---|---|---|
Monte Carlo | 回合更新 | on-policy / off-policy | ||||
Sarsa | 单步更新 | on-policy | 基于价值 | 离散 | 离散 | |
Q learning | 单步更新 | off-policy | 基于价值 | 离散 | 离散 | |
DQN | 单步更新 | off-policy | 基于价值 | 连续 | 离散 | |
Policy Gradients | 基础版的policy gradients是回合更新。升级版的policy gradients是单步更新。 | on-policy | 基于概率 | 随机 | 连续 | |
REINFORCE | 回合更新 | on-policy | 基于概率 | 随机 | 连续 | |
Actor-Critic | on-policy | actor会基于概率做出动作。critic会对做出的动作给出动作的价值。 | ||||
TRPO | on-policy | 随机 | ||||
PPO | on-policy | 随机 | ||||
DDPG | off-policy | 确定 | 连续 | |||
Soft Actor-Critic | 随机 |
基础知识
以单智能体强化学习为例,具体的MDP数学模型M可以概括为M={S,A,R,P},其中,S,A,R和P分别表示智能体的状态集合、动作集合,奖励函数集合和状态转移概率集合。
强化学习任务对应了四元组 E= (X,A,P,R)
- 状态空间X
- 动作空间A
- 状态转移概率P:X×A×X→实数域
- 奖赏R:X×A×X→实数域
确定性策略:a=π(x),即在状态x下执行a动作;
随机性策略:P=π(x,a),即在状态x下执行a动作的概率。
强化学习在某种意义上可看作具有“延迟标记信息”的监督学习问题
K-摇臂赌博机
仅探索法:将尝试的机会平均分给每一个动作,即轮流执行,最终将每个动作的平均奖赏作为期望奖赏的近似值。
仅利用法:将尝试的机会分给当前平均奖赏值最大的动作。
欲累积奖赏最大,则必须在探索与利用之间达成较好的折中
ε-贪心法:基于一个概率来对探索和利用进行折中
以ε的概率进行探索,即以均匀概率随机选择一个动作;
以1-ε的概率进行利用,即选择当前最优的动作。
Softmax算法:基于当前每个动作的平均奖赏值来对探索和利用进行折中
τ趋于0时, Softmax 将趋于“仅利用”
τ趋于无穷大时, Softmax 将趋于“仅探索”
16.3 有模型学习
有模型学习:状态空间、动作空间、转移概率以及奖赏函数都已经给出
预测(prediction)和控制(control)是马尔可夫决策过程里面的核心问题。
预测(评估一个给定的策略)的输入是马尔可夫决策过程 <S,A,P,R,γ> 和策略π,输出是价值函数Vπ。
控制(搜索最佳策略)的输入是马尔可夫决策过程 <S,A,P,R,γ>,输出是最佳价值函数(optimal value function)V∗和最佳策略(optimal policy)π∗。
16.3.1 策略评估
状态值函数(V):Vπ(x),即从状态x出发,使用π策略所带来的累积奖赏;
状态-动作值函数(Q):Qπ(x,a),即从状态x出发,执行动作a后再使用π策略所带来的累积奖赏。
递归形式:Bellman 等式
16.3.2 策略改进
最优策略:使得值函数对所有状态求和的值最大的策略
最优值函数:最优策略对应的值函数
策略改进:
16.3.3 策略迭代
策略迭代:不断迭代进行策略评估和策略改进,直到策略收敛、不再改变为止
16.3.3 值迭代
值迭代:不断迭代进行策略评估,直到值函数收敛、不再改变为止
16.4 免模型学习
在原始策略上使用ε-贪心策略
16.4.1 蒙特卡罗强化学习
蒙特卡罗强化学习:通过采样来进行策略评估。
多次“采样”,然后求取平均累积奖赏来作为期望累积奖赏的近似
由于采样必须为有限次数,因此该方法更适合于使用 步累积奖赏的强化学习任务。
估计状态-动作值函数
同策略(on-policy)蒙特卡罗强化学习算法:被评估和被改进的都是同一个策略
异策略(off-policy)蒙特卡罗强化学习算法:仅在评估时使用ε-贪心策略,而在改进时使用原始策略
蒙特卡罗强化学习算法没有充分利用强化学习任务的 MDP 结构
the target policy: the policy being learned about
the behavior policy: the policy used to generate behavior
In this case we say that learning is from data “off” the target policy, and the overall process is termed off-policy learning.
目标策略:正在被学习的策略
行为策略:被用来产生行为的策略
同策略(on-policy):行为策略是目标策略
智能体直接采用正在优化的策略函数收集训练数据,即利用自身在特定时间内产生的连续决策轨迹更新当前的DNN参数。
异策略(off-policy):行为策略不是目标策略。
智能体在收集训练数据时采用与正在优化的策略函数不一致的策略。
16.4.2 时序差分学习
蒙特卡罗强化学习算法在一个完整的采样轨迹完成后再对所有的状态-动作对进行更新。
实际上这个更新过程能增量式进行。
时序差分(Temporal Difference ,简称 TD )学习则结合了动态规划与蒙特卡罗方法的思想,能做到更高效的免模型学习。
Sarsa算法:同策略算法(on-policy):行为策略是目标策略
每次更新值函数需知道前一步的状态(state)x、前一步的动作(action)a、奖赏值(reward)R、当前状态(state)x’、将要执行的动作(action)a’:
更新步长α越大,则越靠后的累积奖赏越重要。
Q-learning算法:异策略算法(off-policy):行为策略不是目标策略
每次更新值函数需知道前一步的状态(state)x、前一步的动作(action)a、奖赏值(reward)R、当前状态(state)x’
异策略算法的这个循环可以拆开成2个部分:与环境交互(执行动作,获得奖励和观察状态)和学习(用动作,奖励,状态更新Q),从而实现离线学习。
离线学习的行为策略一直没更新,训练效果应该也不好
Q-learning的目标策略不管行为策略会产生什么动作。Q-learning的目标策略默认下一个动作就是 Q 值最大的那个动作,并且默认按照最佳的策略去优化目标策略,所以它可以更大胆地去寻找最优的路径,它表现得比 Sarsa 大胆得多。
多步时序差分:无偏且方差小
蒙特卡洛方法利用当前状态之后每一步的奖励而不使用任何价值估计
时序差分算法只利用一步奖励和下一个状态的价值估计。
蒙特卡洛方法:无偏(unbiased),方差大
方差大,因为每一步的状态转移都有不确定性,而每一步状态采取的动作所得到的不一样的奖励最终都会加起来,这会极大影响最终的价值估计;
时序差分算法:有偏,方差小
方差小,因为只关注了一步状态转移,用到了一步的奖励
有偏,因为用到了下一个状态的价值估计而不是其真实的价值。
多步时序差分可以结合二者的优势
多步sarsa
Sarsa(0):Sarsa 是一种单步更新法, 在环境中每走一步, 更新一次自己的行为准则。等走完这一步以后直接更新行为准则
Sarsa(1):走完这步, 再走一步, 然后再更新
Sarsa(n):如果等待回合完毕我们一次性再更新呢, 比如这回合我们走了 n 步
Sarsa(lambda):有了一个 lambda 值来代替我们想要选择的步数
lambda 是脚步衰减值, 是一个在 0 和 1 之间的数
当 lambda 取0, 就变成了 Sarsa 的单步更新
当 lambda 取 1, 就变成了回合更新, 对所有步更新的力度都是一样
当 lambda 在 0 和 1 之间, 取值越大, 离宝藏越近的步更新力度越大
16.5 值函数近似
直接对连续状态空间的值函数进行学习
值函数能表达为状态的线性函数
线性值函数近似 Sarsa 算法
线性值函数近似 Q-learning算法
16.6 模仿学习
16.6.1 直接模仿学习
直接模仿人类专家的“状态-动作对"
16.6.2 逆强化学习
逆强化学习:从人类专家提供的范例数据中反推出奖赏函数
深度Q网络算法
Q-learning 算法:状态和动作都是离散的,并且空间都比较小的情况下适用
若动作是连续(无限)的,神经网络的输入:状态s和动作a。输出:在状态s下采取动作a能获得的价值。
若动作是离散(有限)的,除了可以采取动作连续情况下的做法,我们还可以:神经网络的输入:状态s。输出:每一个动作的Q值。
通常 DQN(以及 Q-learning)只能处理动作离散的情况,因为在Q函数的更新过程中有max_a这一操作。
Q网络:用于拟合Q函数的神经网络
DQN 算法最终更新的目标:最小化损失函数
Q 网络的损失函数构造为均方误差的形式:
经验回放(experience replay)
如果某个算法使用了经验回放,该算法就是异策略算法。
维护一个回放缓冲区,将每次从环境中采样得到的四元组数据(状态、动作、奖励、下一状态)存储到回放缓冲区中,训练 Q 网络的时候再从回放缓冲区中随机采样若干数据来进行训练。
好处:
- 打破样本之间的相关性,让其满足独立假设。
在 MDP 中交互采样得到的数据本身不满足独立假设,因为这一时刻的状态和上一时刻的状态有关。
非独立同分布的数据对训练神经网络有很大的影响,会使神经网络拟合到最近训练的数据上。
回放缓冲区里面的经验来自于不同的策略,我们采样到的一个批量里面的数据会是比较多样的。 - 提高样本效率。
每一个样本可以被使用多次,十分适合深度神经网络的梯度学习。
与环境交互比较慢,训练网络比较快。
目标网络(target network)
损失函数包含神经网络的输出,因此在更新网络参数的同时目标也在不断地改变,这非常容易造成神经网络训练的不稳定性。
训练网络:用于计算损失函数的前一项,并且使用正常梯度下降方法来进行更新。
目标网络:用于计算损失函数的后一项
训练网络在训练中的每一步都会更新。
目标网络的参数每隔几步才会与训练网络同步一次。
这样做使得目标网络相对于训练网络更加稳定。
deep Q network, DQN
Double Deep Q-Network
[1509.06461] Deep Reinforcement Learning with Double Q-learning
DQN的问题:DQN算法通常会导致对Q值的过高估计
DQN:Q_next = max(Q_next(s’, a_all))
Y t D Q N ≡ R t + 1 + γ max a Q ( S t + 1 , a ; θ t − ) Y_{t}^{\mathrm{DQN}} \equiv R_{t+1}+\gamma \max _{a} Q\left(S_{t+1}, a ; \boldsymbol{\theta}_{t}^{-}\right) YtDQN≡Rt+1+γmaxaQ(St+1,a;θt−)
Double DQN:Q_next = Q_next(s’, argmax(Q_eval(s’, a_all)))
Y t DoubleDQN ≡ R t + 1 + γ Q ( S t + 1 , argmax a Q ( S t + 1 , a ; θ t ) ; θ t − ) Y_{t}^{\text {DoubleDQN }} \equiv R_{t+1}+\gamma Q\left(S_{t+1}, \underset{a}{\operatorname{argmax}} Q\left(S_{t+1}, a ; \boldsymbol{\theta}_{t}\right); \boldsymbol{\theta}_{t}^{-}\right) YtDoubleDQN ≡Rt+1+γQ(St+1,aargmaxQ(St+1,a;θt);θt−)
DQN的优化目标为,动作的选取依靠目标网络
Double DQN 的优化目标为,动作的选取依靠训练网络
用训练网络计算使Q值最大的动作
用目标网络计算Q值
当前的Q网络w用于选择动作
旧的Q网络w−用于评估动作
Double DQN 的代码实现可以直接在 DQN 的基础上进行,无须做过多修改。
优先级经验回放 (prioritized experience replay, PER)
[1511.05952] Prioritized Experience Replay
Double Learning and Prioritized Experience Replay
重视值得学习的样本
时序差分误差 = 网络的输出与目标之间的差距
如果采样过的数据的时序差分误差特别大,那么应该让它们以比较大的概率被采样到。
batch 抽样的时候并不是随机抽样, 而是按照 Memory 中的样本优先级来抽
用到 TD-error, 也就是 Q现实 - Q估计 来规定优先学习的程度
如果 TD-error 越大, 就代表我们的预测精度还有很多上升空间, 那么这个样本就越需要被学习, 也就是优先级 p 越高
Dueling Deep Q-Network
[1511.06581] Dueling Network Architectures for Deep Reinforcement Learning
Dueling DQN 能够很好地学习到不同动作的差异性,在动作空间较大的环境下非常有效。
将Q网络分成两个通道
Q η , α , β ( s , a ) = V η , α ( s ) + A η , β ( s , a ) Q_{\eta, \alpha, \beta}(s,a) = V_{\eta, \alpha}(s) + A_{\eta, \beta}(s,a) Qη,α,β(s,a)=Vη,α(s)+Aη,β(s,a)
V η , α ( s ) V_{\eta, \alpha}(s) Vη,α(s):状态价值函数,与action无关
A η , β ( s , a ) A_{\eta, \beta}(s,a) Aη,β(s,a):该状态下采取不同动作的优势函数,与action有关
η \eta η是状态价值函数和优势函数共享的网络参数,一般用在神经网络中,用来提取特征的前几层
α \alpha α和 β \beta β分别为状态价值函数和优势函数的参数。
竞争深度Q网络的问题:最后学习的结果可能是这样的:
智能体就学到 V(s) 等于 0,A(s,a) 等于 Q,就和原来的深度Q网络一样。
解决方案:在把 A(s,a)与 V(s) 加起来之前,先处理A(s,a),比如减去均值
虽然它不再满足贝尔曼最优方程,但实际应用时更加稳定。
策略梯度 Policy Gradients
基于值函数的方法:学习值函数,然后根据值函数导出一个策略。学习过程中并不存在一个显式的策略
基于策略的方法:直接显式地学习一个目标策略。
REINFORCE:蒙特卡洛策略梯度
Gt:从第t步开始,往后能够获得的总奖励
因为使用了蒙特卡洛方法,REINFORCE 算法的梯度估计的方差很大
近端策略优化(proximal policy optimization,PPO)
Actor-Critic
信赖域策略优化 (Trust Region Policy Optimization, TRPO)
深度确定性策略梯度 (Deep Deterministic Policy Gradient, DDPG)
DDPG算法则采用行动者-批评家(actor-critic)模型,即采用两类分别称为行动者网络与批评家网络的不同DNN。
批评家网络即为传统的值函数,来评估不同状态下的收益;
行动者网络则指策略函数,描述状态和离散动作或连续动作分布的映射关系。