1. 强化学习核心算法解析:从蒙特卡罗到时序差分
在强化学习领域,蒙特卡罗法和时序差分法是两类基础且重要的算法范式。它们都试图解决无模型环境下的策略评估问题,但采用了截然不同的更新方式。蒙特卡罗法必须等待整个回合结束后才能进行价值更新,而时序差分法则能够在每一步交互后立即更新价值估计,这种"即时学习"的特性使其在实际应用中更具优势。
时序差分学习巧妙地结合了蒙特卡罗采样和动态规划的自举思想。与蒙特卡罗法相比,它不需要等待回合结束;与动态规划相比,它不依赖完整的环境模型。这种折中方案使得TD学习在样本效率和计算效率之间取得了良好平衡,成为现代强化学习算法的基石。
关键理解:时序差分误差(TD Error) δ = R + γV(S') - V(S) 是TD学习的核心概念,它量化了当前价值估计与更准确的一步前瞻估计之间的差异。
2. Sarsa算法:保守而可靠的在线学习策略
2.1 算法原理与实现细节
Sarsa是一种典型的在线策略(on-policy)TD控制算法,其名称来源于算法更新所需的五元组(State, Action, Reward, next State, next Action)。与Q-learning不同,Sarsa遵循当前策略选择下一个动作,这使得它在探索过程中更加谨慎。
算法更新公式为:
Q(S,A) ← Q(S,A) + α[R + γQ(S',A') - Q(S,A)]
在悬崖漫步(Cliff Walking)环境中的实现要点:
- 使用ε-greedy策略平衡探索与利用
- 维护Q表存储状态-动作对的价值
- 需要完整记录前后两个动作的选择
python复制class Sarsa:
def __init__(self, ncol, nrow, epsilon, alpha, gamma):
self.Q_table = np.zeros([nrow*ncol, 4]) # 初始化Q表
self.epsilon = epsilon # 探索率
self.alpha = alpha # 学习率
self.gamma = gamma # 折扣因子
def take_action(self, state):
if np.random.random() < self.epsilon:
return np.random.randint(4)
return np.argmax(self.Q_table[state])
def update(self, s0, a0, r, s1, a1):
td_error = r + self.gamma*self.Q_table[s1,a1] - self.Q_table[s0,a0]
self.Q_table[s0,a0] += self.alpha * td_error
2.2 性能特点与适用场景
Sarsa在悬崖漫步环境中表现出保守的特性,会主动避开靠近悬崖的路径。这种保守性使得:
- 训练过程中的回报波动较小
- 最终策略的安全性较高
- 但可能无法找到最优路径(在悬崖漫步中比最优路径多约5步)
实测发现:当ε=0.1,α=0.1,γ=0.9时,Sarsa经过500回合训练后平均回报稳定在-25左右,明显优于完全随机策略的-500,但不及最优策略的-13。
3. Q-learning:激进高效的离线学习算法
3.1 算法核心思想
Q-learning是最著名的离线策略(off-policy)TD控制算法,其更新公式为:
Q(S,A) ← Q(S,A) + α[R + γmaxₐQ(S',a) - Q(S,A)]
关键区别在于:
- 使用max操作直接估计最优策略价值
- 行为策略(ε-greedy)与目标策略(greedy)分离
- 能够从任意历史数据中学习最优策略
python复制class QLearning:
def __init__(self, ncol, nrow, epsilon, alpha, gamma):
self.Q_table = np.zeros([nrow*ncol, 4])
self.epsilon = epsilon
self.alpha = alpha
self.gamma = gamma
def update(self, s0, a0, r, s1):
# 关键区别:使用max而非下一个动作
td_error = r + self.gamma*np.max(self.Q_table[s1]) - self.Q_table[s0,a0]
self.Q_table[s0,a0] += self.alpha * td_error
3.2 收敛性证明与数学基础
Q-learning的收敛性由以下条件保证:
- 所有状态-动作对被无限次访问
- 学习率α满足随机逼近条件:
∑αₜ = ∞
∑αₜ² < ∞ - 环境是有限马尔可夫决策过程
收敛证明的关键步骤:
- 将Q-learning视为随机逼近过程
- 证明其对应ODE收敛到最优Q函数
- 应用随机近似理论得出结论
实验观察:在相同参数下,Q-learning的收敛速度比Sarsa快约30%,但训练过程中偶尔会出现回报骤降(因探索时跌落悬崖)
4. 多步TD算法:平衡偏差与方差
4.1 n步Sarsa算法
n步TD方法通过调整回溯长度来平衡蒙特卡罗的无偏性和TD学习的高效性。n步Sarsa的回报估计为:
Gₜ = Rₜ₊₁ + γRₜ₊₂ + ... + γⁿ⁻¹Rₜ₊ₙ + γⁿQ(Sₜ₊ₙ,Aₜ₊ₙ)
实现时需要维护最近n个状态、动作和奖励:
python复制class NStepSarsa:
def __init__(self, n, ncol, nrow, epsilon, alpha, gamma):
self.n = n
self.state_list = []
self.action_list = []
self.reward_list = []
# 其他初始化同Sarsa
def update(self, s0, a0, r, s1, a1, done):
self.state_list.append(s0)
self.action_list.append(a0)
self.reward_list.append(r)
if len(self.state_list) == self.n:
G = self.Q_table[s1,a1]
for i in reversed(range(self.n)):
G = self.gamma * G + self.reward_list[i]
if done and i > 0:
s = self.state_list[i]
a = self.action_list[i]
self.Q_table[s,a] += self.alpha*(G-self.Q_table[s,a])
s = self.state_list.pop(0)
a = self.action_list.pop(0)
self.reward_list.pop(0)
self.Q_table[s,a] += self.alpha*(G-self.Q_table[s,a])
4.2 参数选择经验
通过悬崖漫步实验发现:
- n=5时效果最佳(比单步Sarsa快约15%)
- 过大n值会导致方差增大
- 过小n值则偏差明显
- 最佳n值与问题的时间跨度相关
5. 算法对比与工程实践建议
5.1 性能对比表格
| 指标 | Sarsa | Q-learning | 5-step Sarsa |
|---|---|---|---|
| 收敛速度 | 较慢 | 快 | 中等 |
| 最终性能 | 次优 | 最优 | 接近最优 |
| 训练稳定性 | 高 | 中等 | 较高 |
| 探索风险 | 低 | 高 | 中等 |
| 适用场景 | 安全关键 | 效率优先 | 平衡需求 |
5.2 调参技巧与注意事项
-
学习率α的退火策略:
- 初始设为0.1-0.5
- 随训练逐步衰减到0.01-0.05
-
探索率ε的设置:
- 训练初期设为0.1-0.3
- 后期衰减到0.01-0.05
- 可采用ε=1/t的衰减策略
-
折扣因子γ的选择:
- 短期任务设为0.9-0.95
- 长期任务设为0.98-0.99
- 即时奖励任务可设为0.8-0.9
-
多步TD的n值选择:
- 建议从n=3开始尝试
- 不超过回合平均步数的1/5
- 可通过交叉验证确定
实际工程中发现:在机械臂控制任务中,Sarsa的表现优于Q-learning,因其避免了训练过程中的危险动作;而在游戏AI中,Q-learning通常能取得更好成绩。
6. 前沿扩展与进阶方向
-
资格迹(Eligibility Traces):
- 结合TD(λ)算法
- 实现前向视图与后向视图的统一
- 显著加速某些任务的收敛
-
函数逼近与深度Q网络:
- 用神经网络替代Q表
- 解决高维状态空间问题
- 引入经验回放机制
-
策略优化方法:
- Actor-Critic架构
- 策略梯度与Q-learning结合
- 近端策略优化(PPO)
-
多智能体强化学习:
- 博弈论视角下的Q-learning
- 对手建模与课程学习
- 分布式Q值更新
在自动驾驶领域,这些算法常与主动学习结合,通过精心设计的状态表示和奖励函数,使智能体能够从有限的人类示范中高效学习驾驶策略。对于四足机器人控制,TD方法被证明在模拟到现实的迁移中表现出色,特别是在Isaac Sim等仿真环境中预训练后。
