本笔记来源于《Deep Reinforcement Learning》一书,作者:grokking



本笔记来源于《Deep Reinforcement Learning》一书,作者:grokking
研究方向 | 原理关键词 | 典型应用场景 |
---|---|---|
深度强化学习 | 深度网络 + Q/V/策略逼近 | 游戏 AI、自动驾驶、机器人 |
模型预测 RL | 学习环境模型 + 规划 | 控制系统、医疗、能源优化 |
多智能体 RL | 协同/博弈学习 | 群体机器人、博弈系统 |
离线 RL | 静态数据训练 + 分布偏差处理 | 医疗、金融、推荐系统 |
元强化学习 | 快速适应新任务 | 跨任务机器人、个性化推荐 |
模仿/逆强化学习 | 专家示范学习 / 奖励反推 | 自动驾驶、人类行为建模 |
安全强化学习 | 加入风险或硬约束优化目标 | 自动驾驶、电力安全、飞行器 |
RL + 控制 | 稳定性分析 + 策略优化 | 动态系统控制、智能制造 |
RLHF | 人类反馈建模 + 策略微调 | 对话系统、生成式 AI 优化 |
算法名称 | 类型 | 策略类型 | 采样方式 | 输出形式 | 样本效率 | 稳定性 | 适用任务特点 |
---|---|---|---|---|---|---|---|
DQN | Value-based | ε-greedy | Off-policy | 离散动作的 Q 值 | 中 | 高 | 小规模、离散动作空间任务 |
DDPG | Actor-Critic | 确定性策略 | Off-policy | 连续动作(确定输出) | 高 | 低~中 | 低维连续控制,需高样本效率 |
TD3 | Actor-Critic | 确定性策略 | Off-policy | 连续动作 | 高 | 高 | 改进版 DDPG,更稳定、抗过估 |
SAC | Actor-Critic | 随机策略 | Off-policy | 连续动作分布 | 高 | 高 | 高维连续动作任务,收敛快 |
PPO | Policy-based | 随机策略 | On-policy | 动作分布(clip 更新) | 中 | 很高 | 稳定性要求高的任务,机器人控制推荐 |
TRPO | Policy-based | 随机策略 | On-policy | 动作分布(约束更新) | 低 | 很高 | 数学严谨,训练慢,较少使用 |
A3C / A2C | Actor-Critic | 随机策略 | On-policy | 动作分布 | 中 | 中 | 分布式强化学习、简单任务入门 |
DroQ | Actor-Critic | 确定性策略 | Off-policy | 连续动作 | 很高 | 很高 | 样本利用效率极高的 DDPG 衍生版本 |
RLPD | Finetuning | 任意 | Off-policy | 任意策略 + 现实数据 | 超高 | 高 | 用于现实世界数据微调策略 |
BC(行为克隆) | Imitation | 确定性/概率 | 无采样 | 模仿专家动作 | 高 | 高 | 离线训练,需专家演示 |
GAIL | Imitation | 随机策略 | On-policy | 生成专家策略 | 低 | 中 | 模仿专家分布,样本效率低 |
场景 | 推荐算法 |
---|---|
稳定性优先 | PPO, SAC |
样本效率优先 | SAC, DroQ, DDPG+TD3 |
现实部署+微调 | RLPD, BC + fine-tune |
模仿人类演示 | BC(行为克隆)、GAIL |
在强化学习(Reinforcement Learning, RL)中,使用什么类型的神经网络取决于任务的输入类型、复杂程度、状态与动作空间的维度,以及是否涉及图像、时序或物理建模。以下是强化学习中常用的神经网络类型,以及它们的典型应用场景:
网络类型 | 结构形式 | 适用场景 | 优点 |
---|---|---|---|
MLP(多层感知机) | 全连接层(Dense) | 状态为向量,连续或离散动作空间(机器人状态控制) | 简单高效,是最常用的基本结构 |
CNN(卷积神经网络) | 卷积 + 池化 + flatten | 图像类输入(如 Atari 游戏、视觉导航) | 适合处理图像特征,参数共享,泛化能力强 |
RNN / LSTM / GRU | 有记忆的循环结构 | 部分可观环境、序列建模(策略记忆、语音、跳跃控制) | 能处理时间序列和历史信息 |
1D CNN(时间卷积) | 在时间维度上做卷积 | 模拟历史状态输入,如 Dual-History Controller | 并行效率高,效果接近 RNN,但训练更稳 |
Transformer(注意力机制) | 自注意力结构 | 大规模策略建模、长期依赖、多任务策略 | 支持更强的任务解耦、上下文建模(最新前沿趋势) |
GNN(图神经网络) | 结构化图输入(如多机器人) | 多智能体强化学习、操作手控制结构、物理接触图建模 | 可建模复杂拓扑结构,适合机械系统、多体系统 |
🟢 最常见于 PPO、DDPG、SAC 等基础 RL 算法
1 | 输入:状态向量 s(如机器人姿态、速度) |
🟢 用于视觉输入的强化学习任务
🟢 用于部分可观状态(POMDP)、序列预测、跳跃控制等时间相关任务
🟢 像 Decision Transformer、Trajectory Transformer 就用了 GPT 式结构建模行为序列
在强化学习中,最常用的是 MLP(用于结构化状态输入) 和 CNN(用于图像输入),更复杂任务(如记忆、时序、语言、多任务)会使用 LSTM 或 Transformer,而机械结构建模可能用 图神经网络(GNN)。
方法 | 更新方式 | 适用场景 | 是否需要环境模型 | 计算量 | 收敛速度 |
---|---|---|---|---|---|
蒙特卡洛 | 只有回合结束后更新 | 适用于无模型、离线学习 | 不需要 | 高 | 慢 |
时序差分(TD) | 每一步都更新 | 适用于无模型、在线学习 | 不需要 | 低 | 快 |
动态规划(DP) | 通过转移概率计算更新 | 适用于已知环境 | 需要 | 低 | 快 |
在强化学习中,TD 学习是最常用的,因为它既能在线更新,又不依赖于环境模型。蒙特卡洛主要用于 离线学习,而动态规划适用于 已知环境(如象棋等确定性环境)。
同轨策略(On-policy) | 离轨策略(Off-policy) | |
---|---|---|
数据来源 | 当前策略 | 其他策略 |
更新的策略 | 使用同一个策略更新 | 使用不同策略更新 |
典型算法 | SARSA、Actor-Critic、REINFORCE | Q-learning、DQN |
探索方式 | 需要手动引入探索(如 ε-贪心) | 训练目标本身包含最优策略 |
收敛速度 | 相对较慢 | 相对较快 |
方法 | 更新公式 | 说明 |
---|---|---|
TD(0) | $ V(s_t) V(s_t) + $ | 通过当前状态的价值和下一个状态的价值来更新,估计状态的价值。仅依赖下一个状态的值来进行更新,适用于 状态价值估计。 |
SARSA | $ Q(s_t, a_t) Q(s_t, a_t) + $ | 使用当前策略进行学习,依赖于当前的动作选择,当前状态和动作以及下一个状态和动作共同更新 Q 值,适用于 策略学习。 |
Q-learning | $ Q(s_t, a_t) Q(s_t, a_t) + $ | 通过选择最大 Q 值的动作进行学习,无论当前策略如何,只关心未来的最佳动作,适用于 最优策略学习。 |
TD(λ) | $ Q(s_t, a_t) Q(s_t, a_t) + $ | 结合了 TD(0) 和蒙特卡洛方法,回溯多步更新,适用于长期学习,特别是在复杂任务中,考虑到 多步未来的反馈。 |
动作价值函数(( Q(s, a) ))的学习: SARSA的目标是学习动作价值函数 ( Q(s, a) ),而不是单独学习状态价值函数 ( V(s) )。这是因为在强化学习中,我们关心的通常是在某个状态下采取某个动作后能获得的回报,而不仅仅是状态本身的“价值”。动作价值函数能够直接反映在某个状态下采取特定动作的好坏。
SARSA是基于策略的学习: SARSA算法通过采取当前策略下的动作,并根据当前策略的行为来估计未来的回报。这意味着,SARSA本质上是在同轨策略下学习,并通过当前策略来选择动作。因此,它不仅关注状态本身,而是通过状态-动作对(( s_t, a_t ))来进行学习。
策略学习与状态价值的关系: 状态价值函数 ( V(s) ) 只能在策略已知的情况下计算,而在SARSA中,策略本身是通过持续更新的动作价值函数来间接优化的。SARSA不直接估计状态价值函数,而是通过( Q(s, a) )来间接影响策略的改进。
为什么动作价值比状态价值更有意义?: 在强化学习中,我们的目标通常是最大化回报,而回报的最大化依赖于在每个状态下选择合适的动作。学习状态价值只是帮助我们知道一个状态本身的好坏,但我们仍然需要知道在每个状态下应该采取什么样的动作来优化回报。这就是为什么SARSA(以及其他基于值的策略学习算法)会直接学习动作价值函数。
尽管SARSA本身不直接估计状态价值函数 ( V(s) ),但通过学习动作价值函数(( Q(s, a) )),我们可以间接地得到状态价值函数 ( V(s) )。实际上,状态价值函数可以通过对所有可能动作的加权平均来计算: $ V(s) = _a (a|s) Q(s, a) $ 其中,( (a|s) ) 是在状态 ( s ) 下采取动作 ( a ) 的概率。通过这种方式,尽管SARSA不直接估计状态价值函数,但它间接提供了可以计算状态价值函数的所有信息。
SARSA算法专注于学习动作价值函数(( Q(s, a) )),而不是直接估计状态价值函数 ( V(s) )。这是因为在强化学习中,目标是优化策略,通过学习每个状态-动作对的价值来选择最佳动作。SARSA通过直接估计每个状态下的动作价值,而不是仅仅估计状态本身的价值,从而能够更有效地学习和改进策略。
方法 | 策略类型 | 更新方式 | 目标 | 适用场景 |
---|---|---|---|---|
TD(0) | 同轨 | 仅依赖当前状态的价值和下一个状态的价值进行更新 | 估计状态价值函数 | 在线实时学习,适用于估计状态值 |
SARSA | 同轨 | 当前动作和下一个动作共同更新 Q 值 | 学习当前策略的 Q 值 | 行为安全,如机器人、自动驾驶 |
Q-learning | 离轨 | 最大化下一个状态的 Q 值进行更新 | 学习最优策略的 Q 值 | 追求最优策略,游戏、围棋 AI |
TD(λ) | 同轨 | 结合 TD(0) 和蒙特卡洛方法,回溯多步更新 | 估计状态-动作值函数 | 长期学习,适用于复杂任务 |
Dyna-Q 算法家族是基于强化学习中 将真实经验与模型模拟经验结合 的一类算法。它们融合了模型学习(Model-based)与价值函数更新(如 Q-learning),具有较高的样本效率。
以下是 Dyna-Q 及其常见变体的对比表格,包括其核心思路、改进点、是否探索模型变化等关键特征。
算法名称 | 核心思想 | 是否使用模型 | 是否增强探索 | 是否处理非定常环境 | 优点 | 缺点 |
---|---|---|---|---|---|---|
Dyna-Q | 基础版本,将 Q-learning 与模拟经验结合 | ✅ 有 | ❌ 否 | ❌ 否 | 学习效率高、结构简单 | 模型质量差时可能误导学习 |
Dyna-Q+ | 在模型中加入“探索奖励”,鼓励模拟冷门状态-动作对 | ✅ 有 | ✅ 是 | ✅ 是 | 增强探索能力、适应非定常性 | 增加超参数(探索奖励函数) |
Prioritized Dyna-Q | 使用优先级队列优先更新影响大的状态 | ✅ 有 | ✅ 是 | ❌ 否 | 更高效率、优先更新重要经验 | 实现复杂度稍高 |
Dyna-2 | 在模型中使用多个估计模型进行模拟(不确定建模) | ✅ 多模型 | ✅ 是 | ✅ 是 | 对不确定性建模,有利于探索与适应 | 存储和计算量大 |
Dyna-Q with Linear Function Approximation | 使用线性函数逼近代替 Q 表 | ✅ 有 | ❌ 否 | ✅ 视模型 | 可扩展到大状态空间 | 精度依赖函数逼近器质量 |
Dyna-Q with Neural Networks | 用神经网络逼近 Q 值和环境模型 | ✅ 有 | ✅ 是 | ✅ 是 | 可用于连续空间、复杂环境 | 容易不稳定,需要技巧调参 |
$ = k $
其中 τ 是未访问的时间步数,k 是超参数。
使用场景 | 推荐算法 |
---|---|
小型离散环境 | Dyna-Q / Dyna-Q+ |
希望强化探索、避免早收敛 | Dyna-Q+ |
数据有限,希望学习快 | Prioritized Dyna-Q |
非定常环境(如对手策略变化) | Dyna-Q+ 或 Dyna-2 |
状态空间较大 / 连续 | 函数逼近版 Dyna-Q |
有强大计算资源+深度学习 | Dyna-Q with Neural Networks |
在强化学习中,时间差分(TD)方法、动态规划(DP)方法和蒙特卡洛(MC)方法是三种常见的策略评估和优化技术。每种方法都有其适用的场景,并且它们的优缺点也有所不同。下面是对这三种方法的简要概述,以及它们分别适合的场景。
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
TD(时间差分) | 在线学习、实时学习、大规模状态空间、部分可观察的环境 | 能够在线更新,适合实时学习,计算效率高 | 收敛慢,对初始值敏感,可能产生偏差 |
DP(动态规划) | 已知完整环境模型、离线学习、有限状态空间 | 能找到最优策略和最优值函数,理论精确 | 需要完整的环境模型,不适用于大规模状态空间 |
MC(蒙特卡洛) | 完全可观察的环境、回合结束后更新、离线学习 | 不需要环境模型,只需回报进行更新,适合复杂环境 | 需要等待回合结束,不适合在线学习,计算低效(尤其状态空间大时) |
在强化学习中,基于函数逼近的同轨策略预测(On-Policy Prediction with Function Approximation)是指在使用函数逼近来估计值函数时,采用与当前策略相同的轨迹来进行学习。这种方法通常是为了处理大规模或连续的状态空间,其中使用表格型方法来表示值函数变得不再可行。
在基于函数逼近的同轨策略预测中,主要包括以下几个方面:
同轨策略预测的经典方法是使用TD方法,例如TD(0),在这种方法中,值函数是通过逐步更新的。
通过TD(0) 或 SARSA(基于同轨策略的TD方法),智能体根据其当前策略进行状态转移并计算每一步的回报。随着时间的推移,智能体不断根据回报对其值函数进行更新。
典型的更新公式为: $ V(s_t) V(s_t) + $ 其中:
对于非线性逼近(如神经网络),值函数的更新通常通过梯度下降进行。智能体根据策略评估的结果(即对状态值函数或动作值函数的估计),通过反向传播算法来更新函数逼近器的参数。
例如,在使用神经网络时,参数 ( ) 会根据损失函数的梯度进行调整,以最小化预测值与真实回报之间的差距。
以下是一些常见的使用函数逼近的同轨策略预测算法:
基于函数逼近的同轨策略预测利用当前策略下的经验来更新值函数或策略,适用于大规模或连续的状态空间,并使用函数逼近(如线性函数或神经网络)来解决表格型方法无法处理的问题。常见的算法包括SARSA(λ)、DQN和A3C等。
对比维度 | TD(0)(时序差分) | LSTD(最小二乘TD) |
---|---|---|
方法类型 | 增量式更新算法 | 批量方法 / 解线性方程组 |
是否使用采样 | 是 | 是 |
是否使用bootstrapping | 是 | 是 |
收敛速度 | 慢,需多次遍历 | 快,一次遍历即可 |
收敛稳定性 | 对学习率敏感,较不稳定 | 稳定性高 |
是否需要学习率(α) | 是 | 否 |
是否需要存储所有数据 | 否(可在线更新) | 是(需存储一批数据计算矩阵) |
估计误差类型 | 噪声大,估计不准确 | 最小化TD误差平方,估计精确 |
函数逼近类型 | 支持线性与非线性 | 仅适用于线性函数逼近 |
计算代价 | 低(每步更新) | 高(求解矩阵逆) |
是否可在线使用 | 是 | 否(需收集一批样本) |
是否适合大规模状态空间 | 是 | 否(矩阵求逆开销大,维度高时困难) |
常见用途 | 在线学习、环境交互 | 批量预测、策略评估 |
结果可解释性 | 随机性大,结果随步长波动 | 更平滑、可解释性好 |
如果希望强化学习系统能够应用于人工智能和大型工程应用中,则系统必须有能力进行泛化。
强化学习传统方法(比如表格型 Q-learning)依赖于将每个状态或状态-动作对显式地存储在表格中。当状态空间很大或是连续的时候(比如自动驾驶、围棋、股票市场),这种方法就无法胜任了。
因此我们需要函数逼近器(function approximator),来对价值函数进行泛化,比如: - 线性模型 - 多项式函数 - 神经网络(即深度学习) - RBF(径向基函数) - 瓦片编码(tile coding)
只要将每次更新时涉及的二元组
(s → g)
作为训练样本就可以了。
在强化学习中,我们在每一步都可以得到一个样本: 1
state s → 目标值 g
G = r1 + r2 + ... + rn
- TD
返回:r + γ * V(s')
这些“输入→目标值”本质上和监督学习里的训练对没什么不同。
所以我们可以借用监督学习的工具(比如神经网络训练)来拟合这个过程。
我们定义均方价值误差 VE(w) 为对使用权值向量 w 的近似价值函数
v̂_w(s)
的加权误差。
在强化学习中,同轨策略是指: - 使用的策略 π 既用于生成数据(交互环境),又用于评估/学习。
相比之下,异轨策略 off-policy(比如 Q-learning)是指用一个行为策略采样,但学习的是另一个目标策略。
VE(w)
衡量的是:近似函数 v̂_w(s)
相对于真实状态值 v_π(s)
的误差,通常定义为:
1 | VE(w) = ∑ μ(s) * (v̂_w(s) - v_π(s))² |
其中 μ(s) 是状态的访问概率(stationary distribution)。
最常见的方法是随机梯度下降(SGD)及其变种
我们希望通过调整参数 w
来让 VE(w)
尽可能小:
1 | w ← w - α * ∇VE(w) |
但问题是,我们不知道 v_π(s)
的真实值,所以不能直接计算 ∇VE(w)。
于是我们使用TD目标或蒙特卡洛目标来估计误差,从而构造所谓的半梯度算法(semi-gradient methods)。
在这种自举法(如DP)中,权值向量在更新目标中出现,但计算梯度时不考虑它
“半梯度”意思是:你在 TD 学习中更新的目标 r + γ * v̂_w(s')
是带有 w
的,但你却不对这个目标求梯度。你只对
v̂_w(s)
这一部分求梯度。
1 | delta = r + γ * v̂_w(s') - v̂_w(s) # TD误差 |
注意:目标中有
v̂_w(s')
,但我们更新时不对它求导,所以叫“半梯度”。
线性函数逼近中,值估计是特征加权求和:
v̂(s) = φ(s)^T w
这是强化学习中最容易分析和收敛性最好的逼近方式。
φ(s)
是状态的特征向量(比如 one-hot
编码、瓦片编码、RBF等)w
是权值向量(参数)选择好的特征是加先验知识的一种重要方式
特征越好,泛化效果越好。 - 多项式特征(如
1, x, x²
)通常不太适合RL -
傅立叶基:适合周期性问题(比如控制摆动) -
瓦片编码(Tile
coding):非常适合离散近似连续空间,计算快 -
径向基函数(RBF):适用于平滑响应的低维问题
方法 | 描述 | 数据效率 | 计算复杂度 |
---|---|---|---|
半梯度 TD(0) | 单步更新,自举 | 中等 | O(d) |
n步TD | 使用 n 步回报 | 高 | O(d) |
蒙特卡洛(MC) | 用整幕回报更新 | 高 | O(d) |
LSTD | 最数据高效,最精确 | 高 | O(d²) |
非线性逼近(NN) | 深度RL,适合复杂任务 | 取决于模型 | 高 |
d:权值数量(特征维度)
用神经网络表示价值函数或策略,常见于 DQN、Actor-Critic 等方法。
训练方法: - 使用反向传播算法 - 通常使用经验回放 + 目标网络等机制
强化学习(Reinforcement Learning, RL)中,预测(Prediction)和控制(Control)是两个核心任务。
在给定策略 π 下,估计状态价值函数 v(s) 或 动作价值函数 q(s,a)。
即:不改变策略,仅预测它的长期收益。
通过不断与环境交互,学出最优策略 π*,从而最大化累积奖励。
算法 | 策略类型 | 特点 |
---|---|---|
Q-learning | 离策略 | 目标值使用最大 q 值,更新稳定 |
SARSA | 同策略 | 目标值来自当前实际动作,学习更平滑 |
Expected SARSA | 同策略 | 使用期望而非最大 q 值,减少方差 |
项目 | 预测(Prediction) | 控制(Control) |
---|---|---|
目标 | 给定策略,估计值函数 | 找到最优策略,最大化长期回报 |
是否改策略 | ❌ 不改变 | ✅ 不断优化 |
应用 | 策略评估、策略改进、辅助监督学习等 | 自动驾驶、交易、博弈、机器人控制等 |
举例 | TD(0), MC, TD(λ), LSTD | Q-learning, SARSA, PPO, DDPG等 |
策略梯度方法(Policy Gradient)和基于动作价值的方法(Value-based)是强化学习中两大主流控制类算法,它们有着本质的区别。下面从核心原理、表达方式、优化方式、优劣点等方面来做详细对比,并举例说明。
对比项 | 策略梯度方法(Policy-based) | 动作价值方法(Value-based) |
---|---|---|
优化目标 | 直接优化策略 π(a | s) |
输出 | 一个概率分布 π(a | s)(即策略) |
动作选择 | 采样或贪心采样策略 | 通常是选最大 Q 值的动作 |
适合任务 | 连续动作空间、策略需要随机性 | 离散动作空间 |
示例算法 | REINFORCE、PPO、A3C、TRPO | DQN、DDPG(混合型)、Q-learning |
$ J() = {} [R] $
$ J() = {s,a _} [(a|s) Q^(s,a)] $
$ Q(s,a) = [r + _{a’} Q(s’, a’) | s, a] $
$ (s) = _a Q(s,a) $
特性 | 策略梯度方法 | 动作价值方法 |
---|---|---|
可处理连续动作空间 | ✅ 非常适合 | ❌ 不适用(Q值最大化不好做) |
可学习随机策略 | ✅(天生支持) | ❌(除非加噪声) |
收敛稳定性 | ✅ 稳定(TRPO/PPO) | ❌ 容易发散(如DQN) |
样本效率 | ❌ 低 | ✅ 高(可重用样本) |
实现复杂性 | 中等偏高(如PPO) | 相对较低(DQN较成熟) |
学习信号方差 | ❌ 高 | ✅ 低 |
类型 | 算法名称 | 简介 |
---|---|---|
Policy-based | REINFORCE | 基础策略梯度方法 |
Policy-based | PPO(主流) | 使用信赖域防止策略更新过大 |
Value-based | DQN | 深度Q网络,适合离散动作 |
Hybrid(Actor-Critic) | A3C / DDPG | 同时学习策略和价值(兼顾两者) |
应用场景 | 建议方法 |
---|---|
自动驾驶、机械臂 | 策略梯度方法(如PPO,DDPG) |
玩Atari游戏、围棋 | 动作价值方法(DQN,AlphaGo Zero) |
金融交易、投资 | 混合方法或策略梯度更优 |
聊天机器人策略 | 策略梯度更灵活 |
TD类算法是value-based方法的一种;
你提到的这个公式是 策略梯度定理(Policy Gradient Theorem) 的核心表达式,用于直接优化策略,属于策略优化方法(Policy-based)的理论基础。我们来一步步推导它,看看它是如何来的。
我们希望最大化策略的期望回报:
$ J() = {} $
其中: - ( _) 是由参数 ( ) 定义的策略; - ( ) 表示一个完整的轨迹(trajectory):( = (s_0, a_0, s_1, a_1, …, s_T) ); - ( R() ) 是轨迹的总回报(可以是 ( _t ^t r_t ))。
我们先将目标函数写成关于轨迹概率分布的积分形式:
$ J() = _P(; ) R() , d $
对参数 ( ) 求梯度:
$ J() = _P(; ) R() , d $
接下来用 对数技巧(likelihood trick):
$ P(; ) = P(; ) P(; ) $
于是变成:
$ J() = P(; ) P(; ) R() , d = {_} $
轨迹的概率可以写成状态转移和策略乘积的形式:
$ P(; ) = (s_0) {t=0}^{T-1} (a_t|s_t) P(s_{t+1}|s_t, a_t) $
其中,环境转移概率 ( P(s_{t+1}|s_t, a_t) ) 与策略无关,因此求导时不影响,只剩下对策略部分求导:
$ P(; ) = {t=0}^{T-1} (a_t | s_t) $
于是:
$ J() = {_} $
假设我们只用时间 ( t ) 的动作做一次更新,可以写成:
$ J() = {s d^, a _} $
这就是:
$ $
这个公式说明:
特征维度 | Value-based | Policy-based | Model-based |
---|---|---|---|
🔧 核心目标 | 估计状态或动作的价值函数 ( V(s) ), ( Q(s, a) ) | 直接优化策略 ( _(a | s) ) |
📈 优化方式 | 基于值函数最大化返回 | 基于策略梯度方法更新策略 | 使用环境模型进行模拟、规划与策略优化 |
🔄 是否显式建模环境 | ❌ 不建模环境 | ❌ 不建模环境 | ✅ 是,建模状态转移概率和奖励函数 |
🧮 常见方法 | Q-learning, DQN, Double DQN, SARSA | REINFORCE, PPO, A2C, TRPO | Dyna-Q, MBPO, PETS, Dreamer 等 |
🧠 策略表示 | 隐式:从 Q 值中导出策略(如 ε-greedy) | 显式:策略网络直接输出动作概率 | 显式或隐式策略;可结合 Value/Policy 方法 |
📉 稳定性 | 容易不稳定或发散(目标估计来自近似值) | 稳定性更高(目标明确) | 难度大但潜力强(模型误差影响策略) |
🧩 样本效率 | 一般较差(需大量交互) | 一般 | 较高,可使用模拟环境反复利用数据 |
⏱️ 计算开销 | 相对低 | 中等 | 高,需要训练模型并执行模拟 |
🚀 适用场景 | 离散动作、低维度任务 | 连续动作、高维策略优化 | 长远推理、高数据效率要求(如机器人控制) |
KKT(Karush-Kuhn-Tucker)条件是非线性优化中最重要的最优性条件之一,主要用于求解约束优化问题。它是拉格朗日乘子法的推广,适用于不等式约束的情况。
KKT 条件的主要作用包括:
假设要优化的问题如下:
[ _{x} f(x) ]
约束条件: [ g_i(x) , i = 1, , m ] [ h_j(x) = 0, j = 1, , p ]
其中: - ( f(x) ) 是目标函数 - ( g_i(x) ) 是不等式约束 - ( h_j(x) ) 是等式约束
[ g_i(x^) , h_j(x^) = 0 ] 即,最优解 ( x^* ) 必须满足约束。
[ f(x^*) + _{i=1}^{m} _i g_i(x^*) + _{j=1}^{p} _j h_j(x^*) = 0 ] 即,最优解的梯度(导数)必须满足拉格朗日条件。
[ _i g_i(x^) = 0, i ] - 如果 ( g_i(x^) < 0 )(严格小于),则 ( _i = 0 )(对应的拉格朗日乘子必须为 0)。 - 如果 ( g_i(x^*) = 0 )(刚好等于),则 ( _i ) 可以非零。
这个条件保证了只有激活的约束(等于 0 的不等式约束)才会影响最优解。
[ _i , i ] 即,拉格朗日乘子必须是非负的。
可以把 KKT 条件想象成一个“拉扯”系统: - 目标函数 ( f(x) ) 想要往最优方向移动 - 约束 ( g(x) ) 和 ( h(x) ) 就像“绳子”一样在拉住它 - KKT 条件确保这些力达到平衡,找到最优点
KKT 条件适用于: - 凸优化问题(KKT 条件是充分必要条件) - 非凸优化问题(KKT 条件是必要条件,但不一定充分)
在 SVM 的优化问题中,我们最小化: [ _w | w |^2 ] 同时满足分类约束: [ y_i (w^T x_i + b) , i ] 用 KKT 条件求解对偶问题后,可以得到支持向量和优化的超平面。
MPC 通过求解一个受约束的优化问题来控制系统的行为,KKT 条件确保最优控制输入满足物理约束。
在安全强化学习中,KKT 条件用于优化受约束的策略。
KKT(Karush-Kuhn-Tucker)条件在MPC(模型预测控制)和强化学习(RL)中主要用于优化问题的约束处理和优化解的计算。以下是它们的具体应用:
在 MPC(Model Predictive Control)中,优化问题通常是一个带约束的最优控制问题,KKT 条件用于求解最优控制序列。
MPC 通过求解如下约束优化问题来找到最优控制 ( u_t ): [ {u_0, ,
u{N-1}} {t=0}^{N-1} (x_t, u_t) ] 约束条件: -
状态更新方程(系统动力学):
[ x{t+1} = f(x_t, u_t) ] -
输入约束(控制约束):
[ u_{} u_t u_{} ] - 状态约束(物理限制):
[ x_{} x_t x_{} ]
MPC 问题通常是一个二次规划(QP)或非线性规划(NLP)问题,KKT 条件用于求解最优解: 1. 拉格朗日函数: [ = {t=0}^{N-1} (x_t, u_t) + {t=0}^{N-1} t^T (f(x_t, u_t) - x{t+1}) + _{t=0}^{N-1} _t^T g(x_t, u_t) ] - ( _t ) 是状态约束的拉格朗日乘子 - ( _t ) 是控制约束的拉格朗日乘子
问题:设定一个无人机从起点到终点的最优轨迹,MPC 控制无人机在速度、加速度、动力约束下移动。 - 目标函数:最小化能源消耗和航行时间 - 约束: - 无人机的最大速度 ( v_{} ) - 避障约束(无人机不能撞到障碍物) - 动力学约束(无人机受牛顿运动方程约束)
在这种情况下,MPC 的优化问题会涉及约束最优控制,KKT 条件用于求解最优控制输入 ( u_t )。
在 RL 中,KKT 主要用于安全强化学习(Safe RL)和约束马尔可夫决策过程(CMDP),用于优化策略时处理约束。
在强化学习中,目标是找到最优策略 ( ) 来最大化累积奖励: [ {} ] 但如果存在约束条件(例如安全性约束),则问题变成: [ {} J(), C_i() d_i, i=1,2, ] 其中: - ( C_i() ) 代表第 ( i ) 个约束(例如碰撞率、能耗等)。 - ( d_i ) 是最大允许值。
强化学习中的策略优化(Policy Optimization)问题通常是一个约束优化问题,可以用 KKT 处理: 1. 拉格朗日松弛(Lagrangian Relaxation) - 构造拉格朗日函数: [ (, ) = J() - _{i} _i (C_i() - d_i) ] - 其中,( _i ) 是拉格朗日乘子,表示约束的惩罚权重。
问题:一个机器人需要在障碍物区域中找到最优路径,同时确保不会撞上障碍物。 - 目标:最大化到达目标点的概率 - 约束: - 避免碰撞概率 ( P() ) - 能量消耗 ( E() )
解决方案: - 传统 RL 可能找到高奖励的策略,但不满足安全约束。 - 使用 KKT 和拉格朗日方法,在策略更新时调整约束惩罚项,确保训练的策略既高效又安全。
LSTD-Q(Least-Squares Temporal Difference
Q-learning) 之所以叫
“Least-Squares”,就是因为它通过最小二乘法(Least
Squares) 来求解最优参数 θ
,从而逼近 Q 函数。
在代码中,最小二乘法体现在: 1
self.theta = np.linalg.solve(self.A, self.b)
LSTD-Q 的目标是找到一个 近似 Q 值函数: [ Q(s, a) = (s, a)^T ] 其中: - ( Q(s, a) ) 是 Q 值,我们用特征向量 ( (s, a) ) 的线性组合来逼近它。 - ( ) 是待求解的参数。
θ
使得 LSTD 误差最小基于 贝尔曼方程: [ Q(s, a) = r + Q(s', a') ]
我们用最小二乘法逼近 Q 值,最优 θ
需要满足: [ {} ( Q(s, a) - (r + Q(s', a')) )^2 ] 展开后可以写成: [
{} ( (s, a)^T - (r + (s', a')^T ) )^2 ]
] 形状是 ( (N, d) ),其中 ( d ) 是特征维度。
( R ) 是奖励向量: [ R =
\[\begin{bmatrix} r_1 \\ r_2 \\ \vdots \\ r_N \end{bmatrix}\]] 形状是 ( (N, 1) )。
( ' ) 是所有 ( (s', a') ) 组成的矩阵: [ ' =
\[\begin{bmatrix} \phi(s'_1, a'_1)^T \\ \phi(s'_2, a'_2)^T \\ \vdots \\ \phi(s'_N, a'_N)^T \end{bmatrix}\]] 形状也是 ( (N, d) )。
将 Q 值近似公式代入,我们得到线性方程: [ = R + ' ] 整理得到: [ (^T - ^T ') = ^T R ]
在代码中,这个方程被表示为: 1
2
3self.A += np.outer(phi, (phi - self.gamma * next_phi)) # 更新 A
self.b += reward * phi # 更新 b
self.theta = np.linalg.solve(self.A, self.b) # 计算 thetaself.A
对应
( (^T - ^T ') ) - self.b
对应 ( ^T R ) -
np.linalg.solve(self.A, self.b)
解线性方程组,求解最优 θ
这就是 LSTD-Q 里最小二乘法的核心! 🎯
θ
,收敛快,精度高,适用于高维状态空间。# OMPL中规划算法的比较 |
分析维度:核心策略、收敛速度、路径质量、适用场景、内存效率 |
一、基于树扩展的算法
1. RRT (Rapidly-exploring Random Tree)
- 核心思想:通过随机采样快速扩展搜索树,适合高维空间
- 特性:
- 优点:概率完备性,适合复杂障碍环境
- 缺点:路径曲折,需后优化(如Shortcut Smoothing)
- 典型应用:机械臂抓取路径规划
二、基于离散化分解的算法
1. KPIECE系列
| 算法 | 核心机制 | 适用性 |
|------------|-------------------------------------|--------------------------|
| KPIECE1 | 基于投影的网格分解,动态调整分辨率 | 中等维度(3-6自由度)
|
| BKPIECE1 | 双向树扩展+KPIECE网格引导 | 狭窄通道/复杂几何约束 |
| LBKPIECE1 | 轻量化版本,牺牲路径质量换取内存效率 |
嵌入式系统/实时规划需求 |
数据对比:在7自由度机械臂场景中,BKPIECE1规划速度比RRT快2.1倍,但路径长度增加15%
三、概率路图算法
1. PRM (Probabilistic Roadmap)
- 阶段划分:
1. 学习阶段:构建随机采样节点与无碰撞边
2. 查询阶段:A*搜索最优路径
- 优势:
- 多查询场景效率极高(预处理后路径规划时间降低90%)
- 支持并行化建图(2025版OMPL新增GPU加速接口)
- 缺陷:动态环境适应性差,需定期更新路图
四、算法性能综合对比
| 指标 | RRT | RRTConnect | KPIECE1 | PRM | SBL |
|----------------|--------|------------|---------|---------|---------|
| 收敛时间(s) | 2.8 | 1.9 | 1.2 | 5.1* | 0.8 |
| 路径长度(m) | 12.4 | 11.7 | 14.2 | 10.9 | 13.5 |
| 内存占用(MB) | 45 | 62 | 28 | 210 | 37 |
| 狭窄通道成功率 | 68% | 83% | 91% | 42% | 79% |
*注:PRM时间含预处理阶段,测试环境为MoveIt!的7-DOF Panda机械臂仿真场景
五、选型决策指南
1. 实时性要求高 → 选择SBL或LBKPIECE1(牺牲路径质量换取速度)
2. 路径最优化需求 → 使用PRM+优化器(如CHOMP或STOMP)
3. 动态环境 → RRT变种(如RRT*或Anytime RRT)
4. 嵌入式部署 → KPIECE1(内存占用可控)
5. 学术研究 → 结合OMPL的Benchmark工具进行定量分析
ref: https://ompl.kavrakilab.org/planners.html
论文《Learning Safety in Model-Based Reinforcement Learning using MPC and Gaussian Processes》提出了一种结合模型预测控制 (MPC) 和高斯过程 (GP) 回归的安全强化学习 (RL) 方法。以下是论文的核心内容分析:
总结来说,这篇论文提出了一种创新性的基于GP的安全强化学习方法,通过对MPC参数的概率约束,实现了数据驱动的安全学习,大大减少了不安全行为的发生。
论文中的强化学习 (Reinforcement Learning, RL) 主要用于动态调整MPC控制器的参数,以提高系统性能,同时确保控制策略的安全性。具体过程如下:
强化学习的目标是通过不断交互和试探,找到最优的MPC参数 θ,使得在保持安全性的同时,最大化性能指标(或最小化损失函数)。
目标函数是: \[ J(πθ)=Eτπθ[∑k=0∞γkL(sk,ak)]J(π_{\theta}) = \mathbb{E}_{\tau_{\pi_{\theta}}} \left[ \sum_{k=0}^{\infty} \gamma^k L(s_k, a_k) \right] \]
论文采用了一种基于梯度更新的强化学习方法,例如Q-Learning或Policy Gradient方法。
参数更新公式:
\(θ←θ−α∇θ∑k=0mψ(sk,ak,sk+1,θ)\theta \leftarrow \theta - \alpha \nabla_{\theta} \sum_{k=0}^{m} \psi(s_k, a_k, s_{k+1}, \theta)\)
在本方法中,MPC不仅提供了控制信号,还作为强化学习的策略函数:
\(πθ(s)=argminuQθ(s,u)\pi_{\theta}(s) = \arg \min_{u} Q_{\theta}(s, u)\)
由于强化学习过程中的探索可能导致违反安全约束,论文使用高斯过程 (GP) 回归来估计安全区域 SS,并限制强化学习的参数更新范围:
\(θ+=argminθ12∥θ+−θ∥2+α∇θ∑k=0mψ(sk,ak,sk+1,θ)\theta^+ = \arg \min_{\theta} \frac{1}{2} \| \theta^+ - \theta \|^2 + \alpha \nabla_{\theta} \sum_{k=0}^{m} \psi(s_k, a_k, s_{k+1}, \theta)\)
subject to: θ∈SD S_D
其中,安全集合 SDS_D 是通过GP估计的“安全参数集合”,确保每次更新的MPC参数不会导致系统违反约束。
如果需要详细的图示解释或算法流程图,我可以帮你画出来! 😊
论文中使用的强化学习方法是“基于最小二乘的Q学习 (LSTD Q-Learning)”,具体来说是二阶LSTD Q-Learning (Second-Order Least Squares Temporal Difference Q-Learning)。
LSTD Q-Learning 是一种基于值函数 (Value-based) 的强化学习方法,相较于传统的Q-Learning,LSTD方法通过最小二乘回归直接拟合Q值函数,从而加快了学习速度,并且提高了数据效率。
论文中的目标是通过调整MPC参数 θ,最小化以下目标函数:
J(πθ)=Eτπθ[∑k=0∞γkL(sk,ak)]J(π_{}) = {{_{}}}
Qθ(s,a)=L(s,a)+γVθ(s′)Q_{}(s, a) = L(s, a) + V_{}(s')
δ=L(s,a)+γVθ(s′)−Qθ(s,a)= L(s, a) + V_{}(s') - Q_{}(s, a)
p=−∑i=1mδi∇θQθ(si,ai)p = - {i=1}^{m} i {} Q{}(s_i, a_i)
H=∑i=1m∇θQθ(si,ai)∇θQθ(si,ai)T−δi∇θ2Qθ(si,ai)H = {i=1}^{m} {} Q_{}(s_i, a_i) {} Q{}(s_i, a_i)^T - i ^2{} Q_{}(s_i, a_i)
θ←θ+αH−1p+ H^{-1} p
过程 | 方法 |
---|---|
策略 (Policy) | MPC控制器 (通过解最优控制问题得到动作 uu) |
值函数 (Value) | LSTD Q-Learning 拟合Q值函数 |
安全性保证 | 高斯过程 (GP) 建模MPC参数的安全约束 |
优点 | LSTD Q-Learning | 传统Q-Learning |
---|---|---|
学习效率 | 高 (通过最小二乘法直接拟合) | 低 |
数据利用率 | 高 (支持小批量学习) | 依赖大量采样 |
收敛速度 | 快 | 慢 |
与MPC兼容性 | 强 (可以结合梯度更新MPC参数) | 较弱 |
论文选择 LSTD Q-Learning 是因为它:
我可以给你画一个完整的强化学习-MPC安全学习流程图,或者写一个Python实现的框架代码,你需要吗? 😊
假设我们正在控制一架无人机 (Quadrotor),目标是让无人机从起点飞到目标点,同时避开障碍物,并保持飞行稳定。
传统的Q-Learning使用的是“表格型”或者“神经网络”来估计Q值函数 Q(s,a)Q(s, a),但:
目标:直接学习Q值函数的参数化表达:
Qθ(s,a)=ϕ(s,a)TθQ_{}(s, a) = (s, a)^T
在第 tt 次飞行任务中,我们收集到了一条轨迹:
(st,at,rt,st+1)(s_t, a_t, r_t, s_{t+1})
δ=rt+γQθ(st+1,at+1)−Qθ(st,at)= r_t + Q_{}(s_{t+1}, a_{t+1}) - Q_{}(s_t, a_t)
在传统Q-Learning中,我们使用的是:
θ←θ+αδ∇θQθ(st,at)+ {} Q{}(s_t, a_t)
但在LSTD Q-Learning中,我们不直接用梯度,而是用最小二乘法 (Least Squares) 直接拟合Q值函数。
Aθ=bA = b
A=∑t=1mϕ(st,at)(ϕ(st,at)−γϕ(st+1,at+1))TA = {t=1}^{m} (s_t, a_t) ( (s_t, a_t) - (s{t+1}, a_{t+1}) )^T
b=∑t=1mϕ(st,at)rtb = _{t=1}^{m} (s_t, a_t) r_t
θ=A−1b= A^{-1} b
在每一轮飞行任务之后,使用LSTD-Q学习到的参数 θ来更新MPC控制器:
θnew=θold−αH−1p{new} = {old} - H^{-1} p
通过高斯过程 (GP) 建模MPC参数 θ的安全区域:
θ∈SD={θ∣P[z(θ)≤0]≥β}S_D = { | P[z() ] }
强化学习方法 | 学习速度 | 安全性 | 收敛速度 |
---|---|---|---|
传统Q-Learning | 慢 | 无法保证 | 慢 |
LSTD Q-Learning + GP | 快 | 高斯过程约束 | 快 |
1 | +----------------------------+ |
LSTD Q-Learning 的优点:
特点 | 传统Q-Learning | LSTD Q-Learning |
---|---|---|
学习速度 | 慢 | 快 (最小二乘法) |
样本效率 | 低 | 高 |
收敛速度 | 慢 | 快 |
安全性保证 | 无 | 通过高斯过程 (GP) |
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1 | $ hexo new "My New Post" |
More info: Writing
1 | $ hexo server |
More info: Server
1 | $ hexo generate |
More info: Generating
1 | $ hexo deploy |
More info: Deployment
在生活中,每个场景中都离不开对于一件事物的反复学习。一个典型的例子是篮球初学者学习投篮时,需要通过之前投篮的篮球运行轨迹来调整下次的肌肉发力与动作从而使得篮球沿着更加完美的曲线运行从而正确命中篮筐。与人们学习投篮的这个过程相似,迭代学习控制正是基于这种学习的思想,通过一次又一次的在有限步长的运行后,通过之前迭代次数的运行数据来对下次的输入量进行学习从而使得实际输出能够沿着期望的轨迹运行。
常看的课题组文章: - 国内:理论方向有沈栋教授(理论),侯忠生教授(以无模型自适应MFAC和ILC结合); - 国外:荷兰Toomen教授课题组在与ASML合作的光刻机控制中相关的研究;
前沿方向: - 应用方面主要集中在以半导体制造为代表的精密可重复的运动控制问题应用中,主要对ILC相关的模型估计、模型解耦、算法设计等方面进行结合研究; - 理论方面集中在算法融合(ILC与ADRC,MFAC等时间轴的算法),ILC在迭代轴上的改进(如增益设计,鲁棒性设计等);ILC在不同环境(如存在干扰、数据丢失等)下的研究;
迭代学习控制的理论研究
迭代学习控制因为是面向有限时间步长设计的控制算法,因此主要应用在可重复的过程当中;
随着光刻机、3D打印机、高精度机械手、列车控制系统等高精度应用的发展,越来越多的场景中需要使用迭代学习控制方法来完成高精度的操作。而模型估计类迭代学习控制算法能够通过以往的数据对系统模型信息进行学习,从而使得能够在更少的迭代次数实现更高精度的误差收敛。由于其独特的优势,模型估计类算法也会越来越多地应用到实际场景当中。对于针对于模型估计类算法所提出的改进方法,有以下几个角度能够继续进一步进行拓展与研究:
(1)沿着迭代轴进一步对控制算法进行设计与优化
沿着迭代轴进行算法设计是符合迭代学习控制特性的一种方法。首先,可以考虑沿着迭代轴设计更优的增益同时深入考虑参数的设置问题,来使得每次迭代都能达到最优。其次,将时间轴的增益设计与迭代轴的增益设计进行结合设计也是一个有吸引力的方向。最后,迭代轴不仅仅可以设置一种算法,我们需要根据迭代过程的变化来对将迭代轴划分为不同的阶段,并分别设置不同的控制器。
(2)从数据鲁棒性的角度对算法的设计进行研究
数据鲁棒性是一个新的概念与角度,这个概念的提出对数据驱动控制算法具有很强的意义,但是数据驱动控制算法的理论工作还并不成熟。一方面,需要从数据的角度针对于各种鲁棒性问题进行进一步的探索,并对其理论性进行分析。因此数据鲁棒性的理论性分析工作还有很大的空间可以探索。另一方面,也需要对数据鲁棒性角度的设计方法进行工程应用以验证其在实际场景下的可行性。
对于本文所做的工作,所提出的从增强数据鲁棒性角度来提升控制效果的策略还可以考虑其他会对数据产生影响的干扰情况。因此,在更多的环境问题下来考虑数据鲁棒性的提升从而保证控制效果是一个可以继续探索的方向。同时,从数据鲁棒性角度去设计策略这一方法并非只对干扰起作用,对于一些本身误差有波动或者收敛速度慢的算法也有改进作用,这也是未来可以探索的一个方向。