# 🏀常用 ## 三大模型 * 这三个模型是进阶 RL 的三座基石,三者不是孤立的,是层层递进、分工协作、互相依赖的关系 * 前置结论:策略 / 价值模型 是「纯强化学习(RL)的原生双模型」,奖励模型是「RLHF(基于人类反馈的强化学习)新增的核心模型」 —— 所有讨论都基于这个核心前提,先记牢。 ### 核心内容 核心定义 1. **策略模型(Actor)**:做决策,生成动作/回答,目标是「选最优行为」; 2. **价值模型(Critic)**:做评估,输出状态价值,目标是「精准量化行为优劣」; 3. **奖励模型(RM)**:做打分,输出奖励分数,目标是「定义什么是最优行为」。 核心关系 > **奖励模型(RM) → 提供奖励信号 → 价值模型(Critic) → 加工为GAE优势值 → 策略模型(Actor) → 优化行为策略** > **单向依赖、闭环优化、缺一不可** 核心结论 1. 纯RL只有 Actor+Critic,奖励来自环境;RLHF新增RM,奖励来自人类偏好,RM替代环境; 2. Critic是核心枢纽,没有Critic,RM的奖励无法有效指导Actor; 3. 三者分工明确,协同工作,共同完成「让模型从「会生成」到「生成的内容符合人类需求」」的核心目标。 ### 策略模型 (Actor) - 核心定位:**智能体的「大脑」,负责做决策的模型** - 输入:智能体当前的**环境状态 $s_t$** (RL里是游戏/环境状态;LLM的RLHF里是用户的prompt/对话上下文) - 输出:**动作的概率分布 $\pi(a|s)$** (RL里是向左/向右/攻击等动作;LLM里是下一个token的生成概率) - 核心目标:**学习一个最优策略** → 选择能让「累计收益最大」的动作,最终目的是**最大化回报** - 通俗理解:**只负责「做什么」,不负责「这么做好不好」** ### 价值模型 (Critic) - 核心定位:**智能体的「裁判」,负责评估决策优劣的模型** - 输入:智能体当前的**环境状态 $s_t$** - 输出:**状态价值 $V(s)$** (标量值) - 核心目标:**精准评估状态的好坏** → 预测「在当前状态下,不管选什么动作,未来能获得的期望累计回报」 - 通俗理解:**只负责「评判当前处境好不好」,不负责「选动作」,也不直接给动作打分** > 补充你之前的知识点闭环:Critic的三大作用(减方差、稳训练、支持GAE),本质都是为了**给Actor的决策提供「精准的优劣评估」**,让Actor知道自己选的动作到底赚不赚。 ### 奖励模型 (Reward Model) - 核心定位:**智能体的「评委/老师」,负责给「动作的结果」打精准分数的模型** - 输入:**完整的动作序列/决策结果** (RL里是「状态+动作」组合;LLM的RLHF里是「用户prompt + LLM生成的回答文本」) - 输出:**一个标量奖励分 $r$** (数值越大,代表这个决策/回答越好) - 核心目标:**定义「什么是好的行为」** → 给出客观、精准的奖励信号,替代RL里「人工写死的奖励函数」 - 通俗理解:**只负责「给最终的行为结果打分」,告诉你「你选的这个动作,最终得到的结果是好是坏,好多少,坏多少」** ### 三者的「核心区别」 ✅ 核心区别1:核心职责不同(最本质) - Actor:**决策端** → 生成动作/回答(**生成式**) - Critic:**状态评估端** → 评估当前状态的价值(**评估式**,只评状态,不评动作) - Reward Model:**行为评分端** → 评估动作/回答的最终质量(**评分式**,只评结果,不评状态) ✅ 核心区别2:输出目标不同 - Actor → 输出:**概率**(动作的可能性,是分布值) - Critic → 输出:**价值**(状态的期望回报,是标量) - Reward Model → 输出:**奖励分**(行为的好坏分数,是标量) ✅ 核心区别3:是否是「RL原生模型」 - ✔️ Actor + Critic:**纯强化学习(RL)的原生双模型**,所有经典Actor-Critic算法(PPO、TRPO、A2C)里,只有这两个模型,缺一不可。 - ✔️ Reward Model:**RLHF专属模型**,是「人类反馈」的载体,**纯RL里根本没有这个模型**!RLHF = 预训练 → 奖励模型训练 → 强化学习微调,RM是连接「人类偏好」和「纯RL」的桥梁。 ✅ 原则1:奖励模型是「顶层规则制定者」,价值模型是「中层评估官」,策略模型是「底层执行者」 - RM:定规则 → 什么是好回答、什么是坏回答(人类偏好); - Critic:做评估 → 基于规则,量化动作的优劣(优势值); - Actor:去执行 → 基于评估,调整行为,向规则靠拢; > 通俗比喻:RM是「老板」,定KPI;Critic是「主管」,核算员工的KPI完成度;Actor是「员工」,根据主管的核算结果调整工作方式,争取拿高绩效。 ✅ 原则2:Critic 是「承上启下的核心枢纽」,无Critic则RM无法赋能Actor 为什么不能让Actor直接用RM的奖励分做优化?**这是你一定会想到的问题**,也是RL的核心知识点: - RM输出的是「最终奖励分」,是**轨迹级的全局信号**,方差极大、延迟极高(LLM里要等完整回答生成才能打分); - 如果Actor直接用这个奖励分更新,训练会**极度震荡、不收敛、甚至发散**(这就是纯策略梯度的痛点); - Critic的核心作用:**把RM的「全局粗奖励」,转化为「每一步的细粒度优势值」**,通过GAE做平滑处理,**大幅降低方差、稳定训练** > ✅ 结论:**RM是「源头奖励」,Critic是「奖励的加工器」,Actor只能吃「加工后的奖励(优势值)」才能健康成长**。 ✅ 原则3:三者可以「权重共享/合二为一」,但分工不变 在工程落地中(比如LLM的RLHF),为了节省显存、提升效率,会有两种常见的合并方式,**但「决策、评估、打分」的核心分工永远不变**: 1. Actor和Critic**共享主体网络权重**:只在最后一层加一个「价值头」输出V(s),主体的Transformer层复用,节省显存(FSDP里的双模型分片就是针对这个场景); 2. 奖励模型RM,**通常是基于预训练模型微调而来**,和Actor的基础模型是同架构,甚至部分权重复用,目的是让打分逻辑和生成逻辑对齐。 ✅ 原则4:三者的训练目标完全独立,互不冲突 - Actor的损失:**策略梯度损失** → 最大化优势值对应的动作概率; - Critic的损失:**均方误差损失(MSE)** → 让预测的V(s)接近真实的「回报+未来价值」; - RM的损失:**排序损失/回归损失** → 让打分结果和人类的偏好排序一致; > 训练时三者的损失函数分开计算、分开反向传播,FSDP的分片训练也是对三个模型分别做显存优化,互不干扰。 ### 场景 #### 纯强化学习(无 RM,只有 Actor + Critic)场景 > 无奖励模型,奖励信号来自**环境的硬编码奖励函数**(比如游戏里得分+1,撞墙-10) **✅ 核心关系 & 训练闭环:`环境奖励 → Critic 评估 → Actor 优化`** 1. Actor 基于当前状态 $s_t$,输出动作概率,选择一个动作 $a_t$ 执行; 2. 环境收到动作后,返回 **即时奖励 $r_t$** + 新状态 $s_{t+1}$; 3. Critic 接收 $s_t$ 和 $s_{t+1}$,输出状态价值 $V(s_t)$ 和 $V(s_{t+1})$,计算「TD残差/GAE优势值」; 4. 这个**优势值**,本质是「Critic结合环境奖励,对Actor选的动作做的「优劣量化」」; 5. Actor 拿到这个优势值:**优势值>0 → 这个动作好,提升该动作的概率;优势值<0 → 这个动作差,降低该动作的概率**; 6. Critic 同时自我优化:让自己的状态价值预测,越来越接近「真实的累计回报」,评估越来越准。 **核心结论:** > **Actor 依赖 Critic 的评估结果做优化,Critic 依赖环境的奖励信号做优化** > Critic 是 Actor 的「导航仪」,环境奖励是 Critic 的「标准答案」 #### 大模型 RLHF(Actor + Critic + RM 三者齐全)场景 > RLHF 是大模型对齐的核心技术(ChatGPT/LLaMA/百川都是这个路线),**这里的奖励模型完全替代了纯RL里的「环境硬编码奖励」**,是整个流程的「核心驱动力」,也是三者关系最完整的形态。 > 先补RLHF的标准三步流程(必记,理解关系的前提): > 1. **预训练**:训练一个基础大模型(LLaMA/OPT),能生成通顺文本,但无人类偏好; > 2. **奖励模型训练**:用人类标注的「偏好数据」训练RM → 学会给LLM的回答打分; > 3. **RL微调**:用RM输出的「奖励分」替代环境奖励,训练Actor+Critic,让模型生成更符合人类偏好的回答。 **✅ 核心关系** 1. **Actor(策略模型)**:输入用户prompt(状态$s_t$),生成回答文本(动作$a_t$); 2. **Reward Model(奖励模型)**:输入「prompt+回答文本」,输出一个**精准的奖励分数 $r_t$** → 这个分数就是「人类偏好的量化体现」(回答越符合人类需求,分数越高); 3. **Critic(价值模型)**:输入当前prompt($s_t$)和下一轮上下文($s_{t+1}$),输出状态价值$V(s_t)$/$V(s_{t+1})$,结合RM给的奖励分$r_t$,计算**GAE优势值**; → 这里的关键:**RM的奖励分,就是RLHF里的「环境奖励」,是Critic做评估的唯一依据** 4. **Actor的优化**:拿到Critic计算的优势值,和纯RL逻辑一致,调整生成文本的概率分布,让「高奖励分的回答」生成概率更高; 5. **Critic的优化**:让自己的状态价值预测,贴合「RM奖励分+未来价值」的真实值,评估越来越精准; 6. **Reward Model的特殊性**:**RM在RL微调阶段是「只读的」,不参与训练更新**!RM只负责输出分数,不会被Actor/Critic的训练影响,它的参数在第二步就已经固定了。 ### 伪代码 ```python # ===================== 1. 初始化三大模型 ===================== actor = ActorModel() # 策略模型:生成回答 critic = CriticModel() # 价值模型:评估状态价值 reward_model = RewardModel() # 奖励模型:打分,固定参数不更新 # ===================== 2. RLHF核心训练循环 ===================== for prompt in dataloader: # ✅ Actor:生成动作(回答文本) response = actor.generate(prompt) # ✅ Reward Model:输出奖励分 (替代环境奖励) reward = reward_model.score(prompt, response) # ✅ Critic:计算状态价值 + GAE优势值 (核心加工环节) v_s = critic.get_value(prompt) v_s_next = critic.get_value(prompt + response) advantage = compute_gae(reward, v_s, v_s_next, gamma=0.99, lam=0.95) # ✅ 分别计算损失,独立更新 actor_loss = policy_gradient_loss(advantage) # Actor优化 critic_loss = mse_loss(v_s, reward + 0.99*v_s_next) # Critic优化 actor_loss.backward() critic_loss.backward() optimizer.step() optimizer.zero_grad() ``` ## 时序差分残差 这是一个在**强化学习** 中非常核心且基础的概念,它是许多经典算法(如 Q-Learning、SARSA)的基石。 --- ### 1. 核心思想:用估计来更新估计 要理解时序差分残差,首先要明白“时序差分”的含义。 * **蒙特卡洛方法**:我们必须等到一个完整的回合(episode)结束,知道了最终的总收益后,才能回过头来更新每个状态的价值。**速度慢,但无偏**。 * **动态规划**:它使用环境的完整模型(状态转移概率和奖励函数),通过“自举”来更新价值。**需要模型,不适用于未知环境**。 * **时序差分**:它结合了以上两者的思想。它**不需要等待回合结束**,而是在每一步之后,利用当前得到的奖励和**对下一个状态的价值的估计**,来更新当前状态的价值。这就是所谓的“用估计来更新估计”,或者叫“自举”。 **时序差分残差**,就是这个更新过程中产生的**误差信号**,它告诉我们需要将当前的价值估计调整多少。 --- ### 2. 正式定义与公式 我们通常在两种场景下讨论时序差分残差: #### 场景一:状态价值函数 \( V(s) \) 的学习 假设一个智能体在时间步 \( t \),处于状态 \( S_t \),执行动作后转移到状态 \( S_{t+1} \),并获得奖励 \( R_{t+1} \)。 * **当前的估计值**:在更新前,我们认为状态 \( S_t \) 的价值是 \( V(S_t) \)。 * **更优的目标估计值**:我们观察到了一次真实的转移,得到了奖励 \( R_{t+1} \),并且我们对下一个状态 \( S_{t+1} \) 的价值有一个估计 \( V(S_{t+1}) \)。那么,一个更好的、对 \( S_t \) 价值的估计应该是: \[ \text{目标值} = R_{t+1} + \gamma V(S_{t+1}) \] 其中 \( \gamma \) 是折扣因子,表示未来奖励的现值。 **时序差分残差 \( \delta_t \)** 就定义为这个“更好的目标值”与“旧的估计值”之间的差值: \[ \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \] 这个 \( \delta_t \) 就是我们要用来更新 \( V(S_t) \) 的误差信号。 #### 场景二:动作价值函数 \( Q(s, a) \) 的学习(更常用) 在 Q-Learning 等算法中,我们直接学习状态-动作对的价值 \( Q(s, a) \)。 * **当前的估计值**:在状态 \( S_t \) 执行动作 \( A_t \) 的估计价值是 \( Q(S_t, A_t) \)。 * **更优的目标估计值**:我们转移到了 \( S_{t+1} \),获得了 \( R_{t+1} \)。对于下一个状态,我们采取不同的策略(例如,在 Q-Learning 中,我们选择能带来最大 Q 值的动作),得到一个目标值。 以 **Q-Learning** 为例,其时序差分残差为: \[ \delta_t = R_{t+1} + \gamma \, \max_{a} Q(S_{t+1}, a) - Q(S_t, A_t) \] 以 **SARSA** 为例,其时序差分残差为: \[ \delta_t = R_{t+1} + \gamma \, Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t) \] --- ### 3. 核心作用:驱动学习 时序差分残差最直接的作用是**更新价值函数**。 我们使用这个残差来调整旧的估计值,使其更接近目标值。更新公式通常为: \[ V(S_t) \leftarrow V(S_t) + \alpha \delta_t \] 或 \[ Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \delta_t \] 其中 \( \alpha \) 是学习率。 **这个过程的直观理解是:** * **如果 \( \delta_t > 0 \)**:说明我们之前的估计 \( V(S_t) \) 过于悲观了。实际得到的回报(即时奖励+下一状态价值)比我们想象的要好。所以我们要**增加** \( V(S_t) \) 的值。 * **如果 \( \delta_t < 0 \)**:说明我们之前的估计 \( V(S_t) \) 过于乐观了。实际情况没那么好。所以我们要**减少** \( V(S_t) \) 的值。 * **如果 \( \delta_t = 0 \)**:说明我们的估计非常准确,不需要修改。 通过成千上万次这样的更新,价值函数会逐渐收敛到真实的价值,智能体也因此学会了如何做出更好的决策。 --- ### 4. 深入理解:为什么它是“差分”且“时序”的? * **差分**:因为它计算的是两个不同估计之间的**差值**(\( (R + \gamma V(S‘)) - V(S) \))。 * **时序**:因为这个差值是在**连续的时间步 \( t \) 和 \( t+1 \)** 上计算出来的。它关联了相邻两个状态的价值。 --- ### 5. 扩展:优势函数与残差的关系 在演员-评论家算法中,时序差分残差有一个非常重要的解释: **时序差分残差是对优势函数 \( A(s, a) \) 的一个估计。** 优势函数 \( A(s, a) = Q(s, a) - V(s) \) 衡量了在状态 \( s \) 下采取动作 \( a \) 相对于平均而言有多好。 回顾一下 TD 残差: \[ \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \] 如果我们有一个近似的价值函数 \( V \),那么 \( \delta_t \) 正是 \( Q(S_t, A_t) \) 的一个估计(即 \( R + \gamma V(S’) \))减去 \( V(S_t) \)。因此,\( \delta_t \) 可以被看作是 \( A(S_t, A_t) \) 的一个有效、低方差的估计。这使得它可以直接用作策略梯度中的基准,来更新策略(演员)。 --- ### 总结 | 方面 | 描述 | | :--- | :--- | | **定义** | 当前价值估计与基于新观察(奖励和下一状态估计)得出的目标值之间的差值。 | | **核心公式** | \( \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \) 或 \( \delta_t = R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t) \) | | **核心思想** | **时序差分学习**与**自举**——用估计来更新估计。 | | **主要作用** | **驱动学习**:作为误差信号,用于更新价值函数,使其更准确。 | | **直观理解** | 一个“惊喜”或“失望”的信号,告诉智能体应该如何修正其预期。 | | **高级应用** | 在演员-评论家算法中,作为**优势函数**的估计,用于更新策略。 | 简单来说,**时序差分残差是强化学习智能体从环境中学习“什么好、什么坏”的关键反馈信号**。没有它,像 AlphaGo 这样的智能体就无法通过经验自我改进。 ## Bradley-Terry模型 这是一个非常重要且经典的统计模型,主要用于对一组物品(通常是选手、团队或产品)进行**配对比较**并从中推断出它们的相对强度或偏好顺序。 --- ### 1. 核心思想 Bradley-Terry模型的核心思想非常直观: > 两个个体(例如选手A和选手B)进行对抗时,其中一方获胜的概率可以由他们各自的“内在强度”决定。强度越高,获胜的概率就越大。 模型不会直接给你一个绝对的分数,而是通过一系列“谁打败了谁”的配对比较数据,反推出每个个体的强度参数。 --- ### 2. 基本模型与公式 假设我们有N个选手/物品,我们需要为每个选手 `i` 估计一个正的强度参数 `λ_i`(或 `θ_i`,有时也表示为 `β_i`)。 根据Bradley-Terry模型,选手 `i` 在与选手 `j` 比赛时获胜的概率 `P(i > j)` 由以下公式给出: **P(i beats j) = λ_i / (λ_i + λ_j)** **或者,更常见的另一种等价形式是:** **P(i beats j) = exp(β_i) / [exp(β_i) + exp(β_j)]** 其中 `β_i = log(λ_i)`。这两种形式是等价的,因为 `λ_i = exp(β_i)`。第二种形式在数学上更方便,尤其是在使用广义线性模型框架时。 **公式解读:** * **概率只取决于相对强度**:选手i的胜率只取决于他自己的强度与对手强度的**比值**。 * **强度是相对的**:强度参数 `λ_i` 本身没有绝对意义,只有相互比较时才有意义。例如,将所有的 `λ` 都乘以2,概率计算结果不变。 * **概率边界**: * 如果 `λ_i` 远大于 `λ_j`(即 `β_i` 远大于 `β_j`),则 `P(i beats j)` 接近 1。 * 如果 `λ_i` 远小于 `λ_j`,则 `P(i beats j)` 接近 0。 * 如果 `λ_i = λ_j`,则 `P(i beats j) = 0.5`,表示势均力敌。 --- ### 3. 一个简单的例子 假设我们有三位网球选手:费德勒(F)、纳达尔(N)和德约科维奇(D)。我们观察到以下历史对战记录(假设没有平局): * 费德勒 vs 纳达尔:费德勒赢了60场,纳达尔赢了40场。 * 费德勒 vs 德约:费德勒赢了55场,德约赢了45场。 * 纳达尔 vs 德约:纳达尔赢了52场,德约赢了48场。 我们想通过Bradley-Terry模型来估计三人的强度参数 `λ_F`, `λ_N`, `λ_D`。 **模型设定:** * P(F beats N) = λ_F / (λ_F + λ_N) = 60 / (60+40) = 0.6 * P(F beats D) = λ_F / (λ_F + λ_D) = 55 / (55+45) = 0.55 * P(N beats D) = λ_N / (λ_N + λ_D) = 52 / (52+48) = 0.52 我们的任务就是找到一组 `λ_F`, `λ_N`, `λ_D`,使得上面的三个等式(在统计意义上)最成立。 **参数估计与标准化** 由于强度是相对的,我们需要一个基准。通常的做法是固定其中一个参数(例如设 `λ_D = 1`),或者要求所有参数之和为一个常数(例如和为N)。 通过迭代算法(如最大似然估计的MM算法或牛顿法)求解后,我们可能会得到一组如下的解: `λ_F = 1.2`, `λ_N = 0.8`, `λ_D = 1.0` **结果解读:** * 费德勒的强度最高(1.2)。 * 我们可以计算任意两人对战的预测胜率: * P(F beats D) = 1.2 / (1.2 + 1.0) = 0.545,这与我们观察到的0.55非常接近。 * P(N beats D) = 0.8 / (0.8 + 1.0) = 0.444,这与观察到的0.52略有偏差,说明模型在拟合这个简化数据时并非完美,但这展示了其工作原理。 * 我们也可以预测未发生的对战:P(F beats N) = 1.2 / (1.2 + 0.8) = 0.6。 --- ### 4. 模型优势与特点 1. **处理不完整的比较数据**:你不需要让每个选手都和所有其他选手比赛。只要整个比较网络是连通的(即没有选手是完全孤立的),模型就可以估计所有选手的强度。 2. **量化差异**:它不仅给出排名,还能量化选手之间的差距。例如,强度为2.0的选手对强度为1.0的选手的胜率是2/3,而强度为1.1的选手对强度为1.0的选手的胜率只有1.1/2.1 ≈ 0.524。这比简单的“赢了多少场”要精细得多。 3. **概率解释**:结果为概率形式,非常直观,易于理解和应用。 --- ### 5. 模型扩展 基础的Bradley-Terry模型有很多强大的扩展,以适应更复杂的场景: * **考虑主客场/平局**:引入“主场优势”参数,或者修改模型以处理平局的情况。 * **考虑协变量**:将选手的强度 `β_i` 建模为其特征(如年龄、身高、技术统计)的线性函数,即 `β_i = X_i^T * γ`。这被称为“结构化Bradley-Terry模型”。 * **动态Bradley-Terry模型**:允许选手的强度随时间变化,用于动态排名系统(如国际象棋ELO评分、足球俱乐部世界排名就是其变体)。 * **处理多队比较**:扩展模型以处理团队比赛,而不仅仅是一对一的比较。 --- ### 6. 应用领域 Bradley-Terry模型的应用非常广泛,远不止于体育: * **体育排名**:网球、棋类、电子竞技等个人项目的选手排名。 * **消费者偏好研究**:在市场调研中,通过让消费者反复选择他们更喜欢的产品A还是产品B,来推断所有产品的整体偏好排序。 * **搜索引擎排名**:Learning to Rank算法中,可以利用文档之间的配对比较关系来学习排序函数。 * **社会科学**:用于衡量公众对某些政策、候选人或其他抽象概念的相对偏好。 ### 总结 **Bradley-Terry模型**是一个优雅而强大的工具,它通过“**赢家通吃**”的二元比较数据,巧妙地还原出背后隐含的**连续强度标度**。它将复杂的多对象比较问题,分解为一系列两两比较的概率问题,并通过统计方法进行求解,是数据科学和统计学中处理排序和偏好数据的基石模型之一。 ## 马尔可夫决策过程 马尔可夫决策过程(**Markov Decision Process, MDP**)是 **强化学习(Reinforcement Learning, RL)** 的核心数学框架,用于描述 **智能体(Agent)在不确定环境中通过选择动作(Action)最大化长期累积奖励(Reward)** 的序贯决策问题。 它的核心是**马尔可夫性**——未来的状态仅依赖于当前状态和动作,与历史状态无关,这大大简化了决策的复杂度。 MDP 是强化学习的理论基础,它将决策问题形式化为状态、动作、转移概率和奖励的数学框架。 --- ### 一、MDP的核心组成要素 一个标准的MDP由五元组 \( \langle S, A, P, R, \gamma \rangle \) 定义: 1. **状态空间 \( S \)** - 环境所有可能状态的集合。 - 例:机器人导航时,\( S \) 是地图上的所有坐标;游戏中,\( S \) 是所有可能的游戏画面或棋盘布局。 2. **动作空间 \( A \)** - 智能体在每个状态下可执行的所有动作的集合。 - 例:机器人的动作 \( A = \{向前, 向后, 左转, 右转\} \);围棋的动作是棋盘上的落子位置。 3. **状态转移概率 \( P(s'|s,a) \)** - 核心的马尔可夫性体现:在状态 \( s \) 执行动作 \( a \) 后,环境转移到状态 \( s' \) 的概率。 - 满足 \( \sum_{s' \in S} P(s'|s,a) = 1 \)(所有可能转移的概率和为1)。 - 例:在状态 \( s \) 执行“向前”动作,有80%概率到 \( s_1 \),20%概率因环境干扰到 \( s_2 \)。 4. **奖励函数 \( R(s,a,s') \) 或 \( R(s,a) \)** - 智能体在状态 \( s \) 执行动作 \( a \) 并转移到 \( s' \) 时获得的**即时奖励**。 - 奖励是智能体的“目标信号”:正向奖励引导智能体靠近目标,负向奖励避免错误行为。 - 例:机器人到达终点获得+100奖励,撞到障碍物获得-10奖励。 5. **折扣因子 \( \gamma \in [0,1] \)** - 用于权衡**即时奖励**和**未来奖励**的重要性。 - \( \gamma = 0 \):智能体只关注当前奖励(短视); - \( \gamma = 1 \):智能体同等重视所有未来奖励(适用于无限期任务); - 通常取 \( 0.9 \sim 0.99 \),保证长期奖励的总和是有限的(避免无穷大)。 --- ### 二、MDP的核心目标:最大化累积奖励 智能体的决策目标不是最大化**即时奖励**,而是最大化**长期累积折扣奖励**(Return): \[ G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} \] 其中 \( G_t \) 是从时刻 \( t \) 开始的累积奖励。 --- ### 三、策略与价值函数 为了实现目标,MDP引入**策略**和**价值函数**两个关键概念: 1. **策略 \( \pi(a|s) \)** - 智能体的决策规则:在状态 \( s \) 下选择动作 \( a \) 的概率分布。 - 确定性策略:\( \pi(a|s) = 1 \)(某个动作被确定选择),如 \( \pi(s) = a \); - 随机性策略:\( \pi(a|s) \) 是概率分布(探索不同动作)。 - MDP的目标是找到**最优策略 \( \pi^* \)**,使得对于所有状态 \( s \),累积奖励的期望最大。 2. **价值函数** 价值函数用于量化“某个状态/动作的好坏”,分为两种: - **状态价值函数 \( V^\pi(s) \)** 定义:在策略 \( \pi \) 下,从状态 \( s \) 出发的累积奖励的期望。 \[ V^\pi(s) = \mathbb{E}_\pi \left[ G_t \mid S_t = s \right] \] - **动作价值函数 \( Q^\pi(s,a) \)** 定义:在策略 \( \pi \) 下,从状态 \( s \) 执行动作 \( a \) 后,累积奖励的期望。 \[ Q^\pi(s,a) = \mathbb{E}_\pi \left[ G_t \mid S_t = s, A_t = a \right] \] 3. **贝尔曼方程(Bellman Equation)** 价值函数的核心递归关系,体现了“当前价值 = 即时奖励 + 未来价值的折扣期望”。 - 状态价值函数的贝尔曼方程: \[ V^\pi(s) = \sum_{a \in A} \pi(a|s) \left( R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) V^\pi(s') \right) \] - 最优状态价值函数 \( V^*(s) \) 满足: \[ V^*(s) = \max_{a \in A} \left( R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) V^*(s') \right) \] 贝尔曼方程是所有强化学习算法(如动态规划、Q-Learning、SARSA)的理论基础。 --- ### 四、MDP的分类 根据任务的持续时间和状态转移的特性,MDP可分为: 1. **有限期MDP(Finite-Horizon MDP)** - 决策过程有固定的时间步数 \( T \),在 \( T \) 步后结束。 - 价值函数依赖于当前时间步 \( t \),即 \( V_t^\pi(s) \)。 2. **无限期MDP(Infinite-Horizon MDP)** - 决策过程没有固定结束时间,智能体需要持续决策。 - 价值函数与时间步无关,仅依赖于状态 \( s \),即 \( V^\pi(s) \)。 - 大多数强化学习任务(如机器人导航、游戏AI)属于此类。 3. **确定性MDP vs 随机性MDP** - 确定性MDP:\( P(s'|s,a) = 1 \)(动作的结果确定); - 随机性MDP:\( P(s'|s,a) \) 是概率分布(环境存在不确定性,如机器人受噪声干扰)。 --- ### 五、MDP与强化学习的关系 - MDP是**完全可观测环境**下的强化学习框架——智能体可以准确知道当前的状态 \( s \)。 - 如果环境是**部分可观测**的(智能体只能通过观测 \( O \) 推断状态),则扩展为**部分可观测马尔可夫决策过程(POMDP)**。 - 所有经典的强化学习算法(如动态规划、蒙特卡洛方法、时序差分学习)都是基于MDP的贝尔曼方程推导而来。 --- ### 六、简单示例:格子世界 假设有一个4x4的格子世界,智能体从任意格子出发,目标是到达右上角的终点(奖励+1),撞到边界(奖励-1),其他情况奖励0。 - 状态空间 \( S \):16个格子的坐标; - 动作空间 \( A \):上下左右; - 转移概率 \( P \):执行动作后,80%概率按动作方向移动,20%概率随机移动到相邻格子; - 折扣因子 \( \gamma = 0.9 \)。 智能体通过MDP框架学习最优策略,即从任意格子出发,以最小步数到达终点的动作选择规则。 --- ### 核心总结 马尔可夫决策过程的本质是**用马尔可夫性简化序贯决策问题,通过策略和价值函数建模智能体的决策行为,最终通过贝尔曼方程求解最优策略**,是强化学习中连接理论和算法的关键桥梁。 ## 动态规划 在强化学习与马尔可夫决策过程(MDP)的语境下,**动态规划(Dynamic Programming, DP)** 是一类**利用贝尔曼方程的递归结构,通过“价值迭代”或“策略迭代”求解MDP最优策略**的方法。其核心思想是 **“将复杂问题分解为重叠的子问题,通过求解子问题的最优解来构建原问题的最优解”**,并利用**缓存(存储已计算的子问题结果)** 避免重复计算。 --- ### 一、动态规划的核心前提 动态规划能应用于MDP的两个关键条件: 1. **马尔可夫性**:未来状态仅依赖当前状态和动作,子问题的边界清晰。 2. **完全可观测性**:智能体已知**完整的MDP模型**(即已知状态空间 \( S \)、动作空间 \( A \)、转移概率 \( P \)、奖励函数 \( R \))。 - 这是DP与无模型强化学习(如Q-Learning)的核心区别——DP是**有模型(Model-Based)** 方法。 --- ### 二、动态规划的核心操作 在MDP中,DP通过两个基本操作来更新价值函数和策略,这两个操作共同构成了DP算法的基础: #### 1. 策略评估(Policy Evaluation) **定义**:给定一个策略 \( \pi \),计算该策略下的状态价值函数 \( V^\pi(s) \)。 **本质**:求解策略 \( \pi \) 对应的贝尔曼方程。 **递归公式**: \[ V^\pi(s) = \sum_{a \in A} \pi(a|s) \left( R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) V^\pi(s') \right) \] **实现方式**: - 迭代法:从任意初始价值函数 \( V_0(s) \) 开始,不断用上述公式更新 \( V_k(s) \),直到 \( V_k(s) \) 收敛到 \( V^\pi(s) \)。 - 停止条件:\( \max_{s \in S} |V_{k+1}(s) - V_k(s)| < \epsilon \)(\( \epsilon \) 为预设的极小值)。 #### 2. 策略改进(Policy Improvement) **定义**:基于当前策略的价值函数 \( V^\pi(s) \),生成一个更优的策略 \( \pi' \)。 **本质**:通过“贪心选择”最大化动作价值函数 \( Q^\pi(s,a) \)。 **策略更新规则**: \[ \pi'(a|s) = \begin{cases} 1 & \text{if } a = \arg\max_{a' \in A} Q^\pi(s,a') \\ 0 & \text{otherwise} \end{cases} \] **原理**:对于任意状态 \( s \),新策略 \( \pi' \) 选择能最大化 \( Q^\pi(s,a) \) 的动作,因此 \( V^{\pi'}(s) \geq V^\pi(s) \),策略得到改进。 --- ### 三、MDP中动态规划的两种核心算法 DP在MDP中的应用主要有两种经典算法,均基于上述两个操作: #### 1. 策略迭代(Policy Iteration, PI) **核心流程**:**策略评估 + 策略改进** 交替进行,直到策略收敛到最优策略 \( \pi^* \)。 1. **初始化**:随机选择一个初始策略 \( \pi_0 \),初始化价值函数 \( V_0(s) \)。 2. **策略评估**:对当前策略 \( \pi_k \),迭代计算 \( V_k(s) \) 直到收敛。 3. **策略改进**:用 \( V_k(s) \) 计算 \( Q^\pi(s,a) \),通过贪心选择得到新策略 \( \pi_{k+1} \)。 4. **收敛判断**:如果 \( \pi_{k+1} = \pi_k \),则策略已最优,停止;否则返回步骤2。 **特点**: - 每次策略评估都需要收敛到精确的 \( V^\pi(s) \),计算量较大,但收敛速度快(通常只需几次迭代即可得到最优策略)。 #### 2. 价值迭代(Value Iteration, VI) **核心思想**:将“策略评估”和“策略改进”合并为一步,直接迭代更新**最优价值函数 \( V^*(s) \)**,无需显式维护策略。 **递归公式**: \[ V_{k+1}(s) = \max_{a \in A} \left( R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) V_k(s') \right) \] **核心流程**: 1. **初始化**:设置初始价值函数 \( V_0(s) \)(通常设为0)。 2. **价值更新**:对所有状态 \( s \),用上述公式迭代更新 \( V_k(s) \)。 3. **收敛判断**:当 \( V_k(s) \) 收敛到 \( V^*(s) \) 时,停止。 4. **提取最优策略**:通过贪心选择从 \( V^*(s) \) 得到最优策略 \( \pi^*(a|s) = \arg\max_{a \in A} Q^*(s,a) \)。 **特点**: - 无需显式评估策略,每次迭代只需一次价值更新,计算量较小,适合状态空间较大的问题。 - 本质是“截断的策略迭代”——策略评估仅做一次迭代就进行策略改进。 --- ### 四、动态规划的优缺点 #### 优点 1. **理论完备**:基于贝尔曼方程,能保证收敛到MDP的最优策略。 2. **精度高**:如果MDP模型完全准确,DP能得到精确的最优价值函数和策略。 #### 缺点 1. **维数灾难**:当状态空间 \( S \) 很大时(如像素级的游戏画面),DP需要遍历所有状态,计算量呈指数级增长,无法实际应用。 2. **依赖模型**:必须已知完整的转移概率 \( P \) 和奖励函数 \( R \),而现实中很多问题的模型是未知的(如机器人导航的环境转移概率难以精确建模)。 --- ### 五、动态规划与其他强化学习方法的关系 - **DP vs 蒙特卡洛(MC)**:MC是无模型方法,通过实际采样的轨迹来估计价值函数,无需模型,但需要大量样本,收敛较慢。 - **DP vs 时序差分(TD)**:TD也是无模型方法,结合了DP的递归更新和MC的采样思想,是Q-Learning、SARSA等算法的基础。 - **DP的扩展**:为解决维数灾难,出现了**近似动态规划(Approximate Dynamic Programming)**,用函数近似(如神经网络)来表示价值函数,而不是存储所有状态的价值。 --- ### 六、简单示例:格子世界的价值迭代 以4x4格子世界为例(终点奖励+1,撞边界奖励-1,其他奖励0,\( \gamma=0.9 \)): 1. 初始化 \( V_0(s) = 0 \)(所有格子的价值为0)。 2. 第一次迭代:计算每个格子的 \( V_1(s) \),终点格子的 \( V_1(s) = 1 \)(自身奖励),相邻格子的 \( V_1(s) = 0.9 \times 1 = 0.9 \)。 3. 重复迭代:每次迭代都通过最大化动作价值更新每个格子的价值,直到相邻两次迭代的价值差小于 \( \epsilon \)。 4. 提取策略:每个格子的最优动作是指向价值最高的相邻格子(即向终点方向移动)。 --- ### 核心总结 在MDP中,动态规划是**有模型强化学习的基础方法**,通过**策略迭代**或**价值迭代**,利用贝尔曼方程的递归结构,将复杂的序贯决策问题分解为可求解的子问题,最终得到最优策略。其核心局限是**维数灾难**和**模型依赖**,这也推动了无模型强化学习和函数近似方法的发展。 ## 贝尔曼方程 在强化学习(RL)和马尔可夫决策过程(MDP)中,**贝尔曼方程(Bellman Equation)** 是描述**价值函数递归关系**的核心数学公式,其本质是**“当前价值 = 即时奖励 + 未来折扣价值的期望”**。 它由理查德·贝尔曼(Richard Bellman)提出,利用MDP的**马尔可夫性**(未来仅依赖当前状态和动作,与历史无关),将复杂的长期累积奖励问题分解为可迭代求解的子问题,是动态规划、时序差分(TD)、Q-Learning等所有RL算法的理论基础。 --- ### 一、贝尔曼方程的核心前提 1. **马尔可夫性**:状态转移满足 \( P(s'|s,a) \),未来状态仅由当前状态 \( s \) 和动作 \( a \) 决定。 2. **累积折扣奖励**:智能体的目标是最大化长期累积折扣奖励 \( G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots \),其中 \( \gamma \in [0,1] \) 是折扣因子。 --- ### 二、贝尔曼方程的分类 根据价值函数的类型(状态价值、动作价值)和策略的性质(任意策略、最优策略),贝尔曼方程分为四大核心形式。 #### 1. 策略评估的贝尔曼方程(针对任意策略 \( \pi \)) 这类方程用于**计算给定策略 \( \pi \) 下的价值函数**,是动态规划中**策略评估**的理论依据。 ##### 1.1 状态价值函数的贝尔曼方程 **状态价值函数 \( V^\pi(s) \)** 定义为:在策略 \( \pi \) 下,从状态 \( s \) 出发的累积折扣奖励的期望。 其递归关系为: \[ V^\pi(s) = \sum_{a \in A} \pi(a|s) \left( R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) V^\pi(s') \right) \] **公式解读**: - \( \pi(a|s) \):策略 \( \pi \) 下,状态 \( s \) 选择动作 \( a \) 的概率。 - \( R(s,a) \):在状态 \( s \) 执行动作 \( a \) 获得的即时奖励(也可扩展为 \( R(s,a,s') \),此时需在转移概率后求和)。 - \( \gamma \sum_{s' \in S} P(s'|s,a) V^\pi(s') \):未来所有可能状态 \( s' \) 的价值的**折扣期望**——先按转移概率加权,再乘以折扣因子 \( \gamma \)。 **直观理解**:当前状态的价值 = 策略下所有可能动作的价值的加权平均,而每个动作的价值 = 即时奖励 + 未来状态价值的折扣期望。 ##### 1.2 动作价值函数的贝尔曼方程 **动作价值函数 \( Q^\pi(s,a) \)** 定义为:在策略 \( \pi \) 下,从状态 \( s \) 执行动作 \( a \) 后,累积折扣奖励的期望。 其递归关系为: \[ Q^\pi(s,a) = R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) \sum_{a' \in A} \pi(a'|s') Q^\pi(s',a') \] **公式解读**: - 动作 \( a \) 的价值 = 即时奖励 + 转移到新状态 \( s' \) 后,策略 \( \pi \) 下所有可能动作 \( a' \) 的价值的**折扣期望**。 - 状态价值与动作价值的关系:\( V^\pi(s) = \sum_{a \in A} \pi(a|s) Q^\pi(s,a) \)(状态价值是动作价值的策略加权平均)。 #### 2. 最优性的贝尔曼方程(针对最优策略 \( \pi^* \)) 这类方程用于**计算最优价值函数**,是动态规划中**策略改进**和**价值迭代**的理论依据。最优策略 \( \pi^* \) 满足:对所有状态 \( s \),\( V^{\pi^*}(s) \geq V^\pi(s) \)(即最优状态价值是所有策略中最大的)。 ##### 2.1 最优状态价值函数的贝尔曼方程 **最优状态价值函数 \( V^*(s) \)** 定义为:从状态 \( s \) 出发,遵循最优策略 \( \pi^* \) 时的累积折扣奖励的期望。 其递归关系为: \[ V^*(s) = \max_{a \in A} \left( R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) V^*(s') \right) \] **公式解读**: - 与任意策略的区别在于**用 \( \max_a \) 替代了策略加权和 \( \sum_a \pi(a|s) \)**。 - 最优状态的价值 = 选择**能最大化未来累积奖励**的动作 \( a \),该动作的价值 = 即时奖励 + 未来状态最优价值的折扣期望。 ##### 2.2 最优动作价值函数的贝尔曼方程 **最优动作价值函数 \( Q^*(s,a) \)** 定义为:从状态 \( s \) 执行动作 \( a \) 后,遵循最优策略 \( \pi^* \) 时的累积折扣奖励的期望。 其递归关系为: \[ Q^*(s,a) = R(s,a) + \gamma \sum_{s' \in S} P(s'|s,a) \max_{a' \in A} Q^*(s',a') \] **公式解读**: - 最优动作的价值 = 即时奖励 + 转移到新状态 \( s' \) 后,**所有可能动作中最优动作**的价值的折扣期望。 - 最优状态价值与最优动作价值的关系:\( V^*(s) = \max_{a \in A} Q^*(s,a) \)(最优状态价值是最优动作价值的最大值)。 - 最优策略的提取:\( \pi^*(a|s) = \arg\max_{a \in A} Q^*(s,a) \)(在每个状态选择能最大化最优动作价值的动作)。 --- ### 三、贝尔曼方程的求解思路 贝尔曼方程是**递归方程**,无法直接通过代数方法求解(除非状态空间极小),实际中通过**迭代法**求解,核心思路是: 1. **初始化**:设置价值函数的初始值(如 \( V_0(s) = 0 \) 对所有 \( s \))。 2. **迭代更新**:用贝尔曼方程作为更新规则,不断更新价值函数: - 对任意策略:\( V_{k+1}(s) = \sum_a \pi(a|s) \left( R(s,a) + \gamma \sum_{s'} P(s'|s,a) V_k(s') \right) \) - 对最优策略:\( V_{k+1}(s) = \max_a \left( R(s,a) + \gamma \sum_{s'} P(s'|s,a) V_k(s') \right) \) 3. **收敛判断**:当相邻两次迭代的价值函数的最大差值小于预设阈值 \( \epsilon \)(如 \( \max_s |V_{k+1}(s) - V_k(s)| < 10^{-5} \)),认为价值函数收敛到真实值。 --- ### 四、贝尔曼方程的意义与扩展 #### 1. 核心意义 - **理论基础**:所有强化学习算法的更新规则都源于贝尔曼方程(如Q-Learning的更新规则 \( Q(s,a) \leftarrow Q(s,a) + \alpha [R + \gamma \max_{a'} Q(s',a') - Q(s,a)] \) 就是最优动作价值贝尔曼方程的近似)。 - **问题分解**:将“无限期的长期奖励问题”分解为“即时奖励 + 单步的未来奖励问题”,使问题可解。 #### 2. 扩展形式 - **贝尔曼期望方程**:即“策略评估的贝尔曼方程”,描述任意策略下价值函数的期望递归关系。 - **贝尔曼最优方程**:即“最优性的贝尔曼方程”,描述最优策略下价值函数的最大递归关系。 - **时序差分(TD)误差**:贝尔曼方程的近似误差 \( \delta = R + \gamma V(s') - V(s) \),是TD学习、SARSA等算法的核心更新信号。 --- ### 五、简单示例:格子世界的贝尔曼方程 以4x4格子世界为例(终点 \( s_{goal} \) 奖励+10,撞边界奖励-1,其他奖励0,\( \gamma=0.9 \),动作上下左右为确定性转移): - 对终点状态 \( s_{goal} \),其最优状态价值 \( V^*(s_{goal}) = 10 \)(无未来转移,价值等于自身奖励)。 - 对终点相邻的状态 \( s_{adj} \),执行“向终点移动”的动作 \( a \),其最优价值为: \[ V^*(s_{adj}) = \max_a \left( R(s_{adj},a) + \gamma V^*(s') \right) = 0 + 0.9 \times 10 = 9 \] - 迭代更新所有状态的价值,最终收敛到最优价值函数,即可提取最优策略(向价值最高的方向移动)。 --- ### 核心总结 贝尔曼方程的本质是**价值函数的递归分解**,它将MDP的长期累积奖励问题转化为可迭代求解的局部问题。无论是有模型的动态规划,还是无模型的Q-Learning,其核心更新逻辑都是对贝尔曼方程的**精确计算**或**近似估计**。 ## Q-learning **Q-Learning** 是强化学习中最经典的 **无模型(Model-Free)、异策略(Off-Policy)** 算法,核心目标是直接学习**最优动作价值函数 \( Q^*(s,a) \)**,而无需知道MDP的转移概率 \( P \) 和奖励函数 \( R \)。它通过与环境的交互采样(试错)来更新Q值,最终通过贪心策略提取最优决策。 --- ### 一、Q-Learning的核心概念 #### 1. 核心对象:Q表(Q-Table) - Q-Learning用**Q表**存储所有状态-动作对的价值 \( Q(s,a) \),表的行是状态 \( s \),列是动作 \( a \)。 - 对于离散状态和离散动作空间,Q表是一个二维数组;对于连续空间,需要用函数近似(如神经网络,即DQN)。 #### 2. 核心策略 Q-Learning的**异策略**体现在两个策略的分离: - **行为策略(Behavior Policy)**:用于与环境交互、生成样本的策略,通常是**ε-贪心策略**(以概率 \( 1-\epsilon \) 选择当前Q值最大的动作,以概率 \( \epsilon \) 随机选择动作),目的是**探索环境**。 - **目标策略(Target Policy)**:用于更新Q值的策略,是**贪心策略**(直接选择 \( \arg\max_{a'} Q(s',a') \)),目的是**学习最优策略**。 #### 3. 最优动作价值函数的贝尔曼方程 Q-Learning的更新规则源于**最优动作价值函数的贝尔曼方程**: \[ Q^*(s,a) = \mathbb{E}\left[ R + \gamma \max_{a'} Q^*(s',a') \mid s,a \right] \] 其中: - \( R \) 是执行动作 \( a \) 后获得的即时奖励; - \( s' \) 是转移后的新状态; - \( \gamma \) 是折扣因子; - \( \max_{a'} Q^*(s',a') \) 是新状态 \( s' \) 下所有动作的最大Q值(体现贪心的目标策略)。 --- ### 二、Q-Learning的核心更新规则 Q-Learning不直接求解贝尔曼方程,而是通过**时序差分(TD)学习**的方式近似更新Q值,核心更新公式为: \[ Q(s,a) \leftarrow Q(s,a) + \alpha \left( R + \gamma \max_{a'} Q(s',a') - Q(s,a) \right) \] 其中: 1. **学习率 \( \alpha \in (0,1] \)**:控制每次更新的步长,\( \alpha \) 越大,新的样本对Q值的影响越大;\( \alpha \) 过小,收敛速度会很慢。 2. **TD目标(Target)**:\( R + \gamma \max_{a'} Q(s',a') \),即当前样本估计的最优动作价值。 3. **TD误差(Error)**:\( \text{TD Error} = \text{TD Target} - Q(s,a) \),即当前Q值与目标Q值的差值,更新的目的是最小化这个误差。 #### 公式直观理解 > 新的Q值 = 旧的Q值 + 学习率 ×(实际得到的总奖励 - 旧的Q值) > 其中“实际得到的总奖励” = 即时奖励 + 未来最优状态的折扣价值 --- ### 三、Q-Learning的完整算法流程 假设状态空间 \( S \) 和动作空间 \( A \) 均为离散,算法步骤如下: 1. **初始化** - 初始化Q表 \( Q(s,a) \),所有值初始为0(或随机小值)。 - 设置学习率 \( \alpha \)、折扣因子 \( \gamma \)、探索率 \( \epsilon \)。 2. **对于每个回合(Episode)** - 初始化当前状态 \( s \)。 - **对于每个时间步(Step)** 1. **选择动作**:根据行为策略(ε-贪心)从当前状态 \( s \) 选择动作 \( a \): \[ a = \begin{cases} \arg\max_{a'} Q(s,a') & \text{以概率 } 1-\epsilon \\ \text{随机动作} & \text{以概率 } \epsilon \end{cases} \] 2. **执行动作**:在环境中执行动作 \( a \),得到即时奖励 \( R \) 和新状态 \( s' \)。 3. **更新Q值**:使用Q-Learning更新规则更新 \( Q(s,a) \): \[ Q(s,a) \leftarrow Q(s,a) + \alpha \left( R + \gamma \max_{a'} Q(s',a') - Q(s,a) \right) \] 4. **更新状态**:设置 \( s = s' \)。 5. **终止判断**:如果 \( s \) 是终止状态,结束当前回合。 3. **收敛判断** - 当Q表的更新幅度足够小(如 \( \max |Q_{new} - Q_{old}| < \epsilon \)),或回合累积奖励稳定,认为算法收敛。 4. **提取最优策略** - 收敛后,最优策略为贪心策略: \[ \pi^*(a|s) = \arg\max_{a'} Q(s,a') \] --- ### 四、Q-Learning的关键特性 #### 1. 无模型(Model-Free) - 无需知道环境的转移概率 \( P(s'|s,a) \) 和奖励函数 \( R(s,a) \),仅通过与环境的交互样本(\( s,a,R,s' \))更新Q值。 - 这是Q-Learning与动态规划(DP)的核心区别,DP需要完整的MDP模型。 #### 2. 异策略(Off-Policy) - 行为策略(ε-贪心)和目标策略(贪心)分离,行为策略负责探索,目标策略负责学习最优策略。 - 优势:可以用更具探索性的策略生成样本,同时保证学习到的是最优策略,样本利用率更高。 - 对比:SARSA是**同策略(On-Policy)**算法,其更新规则中使用的是行为策略选择的下一个动作 \( a' \),而非最大Q值的动作。 #### 3. 收敛性 - 在满足**探索充分**(所有状态-动作对都被无限次访问)和**学习率递减**(如 \( \alpha_t = \frac{1}{t} \))的条件下,Q-Learning能**以概率1收敛到最优动作价值函数 \( Q^*(s,a) \)**。 --- ### 五、Q-Learning与SARSA的核心区别 Q-Learning和SARSA是最常用的两种时序差分算法,核心区别在于**TD目标的计算方式**: | 特性 | Q-Learning | SARSA | |---------------------|-------------------------------------|-------------------------------------| | 策略类型 | 异策略(Off-Policy) | 同策略(On-Policy) | | TD目标 | \( R + \gamma \max_{a'} Q(s',a') \) | \( R + \gamma Q(s',a') \)(\( a' \) 是行为策略选择的动作) | | 核心思想 | 学习“无论下一步怎么走,都要选最优的” | 学习“按照当前策略,下一步会怎么走” | | 探索与利用 | 更激进,可能在探索时忽略风险 | 更保守,考虑探索时的实际动作风险 | **示例**:机器人在悬崖边行走,Q-Learning会学习到直接走最短路径(即使路径靠近悬崖,因为它只关注最优目标),而SARSA会学习到绕开悬崖的路径(因为它考虑了行为策略可能选择的探索动作)。 --- ### 六、Q-Learning的局限性与扩展 #### 1. 局限性 - **维数灾难**:仅适用于**离散状态和离散动作**空间,当状态空间很大(如像素级游戏画面)或动作空间连续时,Q表无法存储。 - **探索与利用的平衡**:ε-贪心策略的 \( \epsilon \) 选择需要手动调参,\( \epsilon \) 过大导致探索过多,收敛慢;\( \epsilon \) 过小导致探索不足,可能陷入局部最优。 #### 2. 经典扩展 - **DQN(Deep Q-Network)**:用神经网络替代Q表,实现对连续状态空间的函数近似,解决了维数灾难问题,成功应用于Atari游戏。 - **Double DQN**:解决DQN中因 \( \max_{a'} Q(s',a') \) 导致的Q值过估计问题。 - **Dueling DQN**:将Q值分解为状态价值 \( V(s) \) 和优势函数 \( A(s,a) \),提高学习效率。 --- ### 七、简单示例:格子世界的Q-Learning 以4x4格子世界为例(终点奖励+10,撞边界奖励-1,其他奖励0,\( \gamma=0.9 \),\( \alpha=0.1 \),\( \epsilon=0.1 \)): 1. 初始化Q表为全0。 2. 智能体从随机状态出发,用ε-贪心策略选择动作(90%选当前Q值最大的动作,10%随机选)。 3. 执行动作后,得到奖励 \( R \) 和新状态 \( s' \),用Q-Learning更新规则更新 \( Q(s,a) \)。 4. 重复多个回合,Q表逐渐收敛,最终智能体在每个状态都会选择向终点移动的动作。 --- ### 核心总结 Q-Learning是**无模型异策略强化学习的基础**,通过直接学习Q值来逼近最优动作价值函数,无需环境模型,仅通过试错交互即可实现自主决策。它的局限性推动了深度强化学习(如DQN)的发展,是连接经典强化学习和现代深度强化学习的关键算法。