1. 强化学习基础与价值函数
在强化学习领域,基于价值的方法是最经典也最实用的技术路线之一。不同于直接学习策略的策略梯度方法,基于价值的方法通过评估状态或状态-动作对的价值来间接推导出最优策略。这种方法的优势在于其数学基础扎实,收敛性有保障,特别适合离散动作空间的问题。
1.1 状态价值与动作价值
状态价值函数V(s)表示从状态s开始,遵循特定策略π所能获得的期望回报。用数学表达式可以写成:
V^π(s) = E_π[G_t | S_t = s]
其中G_t是从时刻t开始的累积回报,通常考虑折扣因子γ:
G_t = R_{t+1} + γR_{t+2} + γ²R_{t+3} + ...
而动作价值函数Q(s,a)则更进一步,评估在状态s下采取动作a的价值:
Q^π(s,a) = E_π[G_t | S_t = s, A_t = a]
关键区别:V函数告诉我们某个状态有多好,而Q函数告诉我们在这个状态下采取某个特定动作有多好。实际应用中,Q函数通常更有用,因为它直接关联到动作选择。
1.2 贝尔曼方程与最优性
这两个价值函数都满足贝尔曼方程,这是强化学习中最核心的数学工具之一。对于V函数:
V^π(s) = Σ_a π(a|s) Σ_{s',r} p(s',r|s,a)[r + γV^π(s')]
最优价值函数V*则满足贝尔曼最优方程:
V*(s) = max_a Σ_{s',r} p(s',r|s,a)[r + γV*(s')]
类似地,Q函数也有对应的贝尔曼方程和最优方程。这些方程不仅提供了理论分析工具,也直接衍生出各种迭代算法。
2. 动态规划方法
2.1 策略评估与策略改进
动态规划(DP)方法是解决已知环境模型(MDP)情况下的强化学习问题的标准工具。DP方法包含两个核心步骤:
- 策略评估:给定一个策略π,计算其价值函数V^π
- 策略改进:基于当前价值函数,构造一个更好的策略π'
这两个步骤交替进行,就形成了策略迭代算法。在实际实现中,我们常用价值迭代算法,它将策略评估和策略改进合并为一个步骤:
V_{k+1}(s) = max_a Σ_{s',r} p(s',r|s,a)[r + γV_k(s')]
2.2 DP的局限性
尽管DP方法理论完备,但它有两个主要限制:
- 需要完整的环境模型:即状态转移概率p(s'|s,a)和奖励函数r(s,a)
- 计算复杂度高:需要对整个状态空间进行遍历
这些限制使得DP方法难以应用于大规模问题或模型未知的场景。下表比较了DP与其他方法的特性:
| 特性 | DP | MC | TD |
|---|---|---|---|
| 需要模型 | 是 | 否 | 否 |
| 自举(Bootstrapping) | 是 | 否 | 是 |
| 采样方式 | 全状态遍历 | 完整轨迹 | 单步或n步 |
| 更新方差 | 低 | 高 | 中等 |
3. 蒙特卡洛方法
3.1 基本思想
蒙特卡洛(MC)方法通过采样完整的轨迹(episode)来估计价值函数。与DP不同,MC不需要环境模型,只需要能够与环境交互并获得经验样本。
MC方法的核心是使用经验回报的平均值来估计价值函数。对于一个状态s,其价值估计为:
V(s) ≈ average(G_t | S_t = s)
其中G_t是从该状态开始到episode结束的实际累积回报。
3.2 首次访问与每次访问
MC方法有两种主要变体:
- 首次访问MC:只考虑episode中第一次访问某个状态时的回报
- 每次访问MC:考虑每次访问该状态时的回报
在理论上,两者在大样本下都会收敛到真实值,但在有限样本情况下表现可能不同。
3.3 增量式实现
实际实现中,我们通常使用增量式更新:
V(S_t) ← V(S_t) + α[G_t - V(S_t)]
其中α是学习率。这种形式更节省内存,也适用于非平稳环境。
实用技巧:学习率α可以随时间衰减,比如使用1/n,其中n是该状态被访问的次数。这能保证收敛性,同时适应早期快速学习和后期精细调整的需求。
4. 时序差分学习
4.1 TD(0)算法
时序差分(TD)方法结合了DP的自举思想和MC的采样思想。最简单的TD(0)算法更新规则为:
V(S_t) ← V(S_t) + α[R_{t+1} + γV(S_{t+1}) - V(S_t)]
其中δ_t = R_{t+1} + γV(S_{t+1}) - V(S_t)称为TD误差。
与MC相比,TD方法:
- 不需要等待episode结束就可以更新
- 通常方差更小,收敛更快
- 但引入了偏差,因为使用了自举的估计
4.2 n步TD与TD(λ)
n步TD是介于MC和TD(0)之间的方法,它使用n步的实际回报加上后续状态的估计值:
G_t^{(n)} = R_{t+1} + γR_{t+2} + ... + γ^{n-1}R_{t+n} + γ^nV(S_{t+n})
TD(λ)则进一步将不同n的回报进行加权平均,其中λ∈[0,1]控制权重衰减的速度。
4.3 资格迹
实际实现TD(λ)时,通常使用资格迹(elegibility traces)来提高效率。资格迹记录了哪些状态最近被访问过,以及它们对当前更新的"资格":
E_t(s) = γλE_{t-1}(s) + I(S_t = s)
然后使用资格迹进行更新:
V(s) ← V(s) + αδ_tE_t(s)
5. SARSA与Q-learning
5.1 SARSA算法
SARSA是一种on-policy的TD控制算法,其名称来源于它的更新涉及的状态-动作序列:(S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1})。
SARSA的更新规则为:
Q(S_t,A_t) ← Q(S_t,A_t) + α[R_{t+1} + γQ(S_{t+1},A_{t+1}) - Q(S_t,A_t)]
SARSA的关键特性:
- 是on-policy的:它评估和改进的是实际执行的行为策略
- 通常更"保守":考虑了实际会采取的动作,包括探索动作
- 适合需要安全考虑的场景,如机器人控制
5.2 Q-learning算法
Q-learning是最著名的off-policy TD控制算法,其更新规则为:
Q(S_t,A_t) ← Q(S_t,A_t) + α[R_{t+1} + γmax_a Q(S_{t+1},a) - Q(S_t,A_t)]
Q-learning的关键特性:
- 是off-policy的:它直接学习最优策略,而行为策略可以不同
- 更"激进":总是假设后续采取最优动作
- 通常收敛更快,但可能不够稳定
5.3 探索与利用
在实际应用中,无论是SARSA还是Q-learning,都需要平衡探索(exploration)和利用(exploitation)。常用策略包括:
- ε-greedy:以ε概率随机选择动作,否则选择当前最优动作
- 玻尔兹曼探索:根据Q值按概率选择动作,P(a|s) ∝ e^
- 乐观初始值:给所有Q值设置乐观的初始值,鼓励尝试所有动作
经验之谈:ε的设定很关键。通常可以随时间衰减,比如从1.0线性衰减到0.1。在关键安全应用中,可能需要保持一定的探索率。
6. 实际应用与技巧
6.1 算法选择指南
选择哪种算法取决于具体问题:
- 已知模型且状态空间小:DP方法
- 需要精确评估完整回报:MC方法
- 在线学习、快速更新:TD方法
- 安全关键场景:SARSA
- 追求最优性能:Q-learning
- 连续状态空间:考虑与函数逼近结合
6.2 参数调优
关键参数及其影响:
-
折扣因子γ:
- 接近1:更重视长期回报
- 接近0:更重视即时奖励
- 通常设置在0.9-0.99之间
-
学习率α:
- 太大:不稳定
- 太小:学习慢
- 可以使用自适应学习率
-
探索率ε:
- 太大:随机探索多,性能差
- 太小:可能陷入局部最优
- 通常从高到低衰减
6.3 常见问题与解决
-
不收敛:
- 检查是否满足收敛条件(如GLIE条件)
- 降低学习率
- 增加探索
-
学习慢:
- 尝试资格迹
- 调整奖励尺度
- 考虑函数逼近
-
过估计:
- Q-learning常见问题
- 尝试Double Q-learning
- 调整目标网络更新频率
7. 进阶方向
7.1 函数逼近
对于大规模或连续状态空间,通常需要将Q值表示为参数化函数Q(s,a;θ),如线性函数或神经网络。这引入了新的挑战:
- 收敛性可能无法保证
- 需要处理特征工程
- 可能出现过拟合
7.2 Deep Q-Networks (DQN)
DQN将Q-learning与深度神经网络结合,主要创新:
- 经验回放:存储并随机采样转移样本,打破相关性
- 目标网络:使用单独的网络计算目标值,提高稳定性
- 误差裁剪:限制梯度大小,防止发散
7.3 多步TD与Rainbow
现代强化学习算法常结合多种技术:
- 多步TD:平衡偏差和方差
- 分布RL:学习回报的分布而不仅是期望
- Noisy Nets:参数化探索
- Rainbow DQN整合了这些改进,达到了state-of-the-art性能
在实际项目中,我通常会从简单的Q-learning或SARSA开始,建立基线后再尝试更复杂的方法。特别是在工业应用中,算法的稳定性和可解释性往往比绝对性能更重要。一个实用的建议是:在实现任何算法时,都要包含详尽的日志记录和可视化,这对调试和理解算法行为至关重要。