11 强化学习:在不确定性中做出最优决策

核心问题:机器如何“学习”最优决策?

机器如何在一个复杂的、不确定的世界中,通过与环境的互动和试错,自动学出一套最优的决策序列,以实现其长期目标

这不仅是技术问题,更触及了经济学中理性决策、动态优化和博弈论的核心。

强化学习核心概念 一个智能体通过试错(走弯路)最终找到通往目标的最佳路径。 智能体 (Agent) 长期目标 (Goal) 互动与试错

经济学中的“智能体”

在经济学中,我们持续研究“智能体”(agents)——消费者、公司、政府——如何做出选择以最大化其效用或利润。

强化学习为我们提供了一个全新的、可计算的框架,来模拟和优化这些智能体的决策过程,尤其是在信息不完全和环境动态变化的情况下。

一个商业案例:动态定价

想象一下,你是一个电商平台的定价算法(智能体)。

  • 状态 (State): 当前库存、竞争对手价格、用户流量、时间…
  • 动作 (Action): 提高价格、降低价格、保持不变。
  • 奖励 (Reward): 当天的总销售额。
  • 目标: 找到一个定价策略 (Policy),最大化未来30天的总销售额。

你没有一个“正确答案”的数据集,你只能通过不断尝试和观察结果来学习。这就是强化学习的主场。

本章学习目标:理解强化学习的经济学直觉

完成本章后,我希望你们能够:

  1. 理解:强化学习与监督、无监督学习的根本不同。
  2. 掌握:描述决策问题的核心框架——马尔可夫决策过程(MDP)。
  3. 应用:解释策略(Policy)和价值(Value)在决策中的作用。
  4. 洞察:领会Q学习等核心算法在动态定价或算法交易中的应用潜力。

机器学习的三大家族

机器学习根据学习方式和数据形式,通常分为三大范式。

机器学习的三大家族 一个图表,将机器学习分为监督学习、无监督学习和强化学习三个分支,并配有简单的图标和描述。 监督学习 f(X) → y 从“标准答案”中学习 无监督学习 发现数据结构 在“无标签”数据中找模式 强化学习 + 通过试错学习 在“与环境交互”中决策

监督学习 (Supervised Learning)

学习一个从输入到输出的映射函数,就像一个老师给出标准答案。

  • 核心任务: 预测或分类。
  • 数据形式: 有标签数据 (X, y),其中y是正确答案。
  • 经济学类比:
    • 回归:根据历史数据(GDP、利率、通胀)预测明年的GDP。
    • 分类:根据客户信息判断其是否会违约。
  • 局限: 依赖大量高质量的标注数据,无法做出序贯决策。

无监督学习 (Unsupervised Learning)

在没有标准答案的情况下,自行发现数据中隐藏的结构或模式。

  • 核心任务: 发现数据结构。
  • 数据形式: 无标签数据 X
  • 经济学类比:
    • 聚类:将客户群体细分为不同的市场区隔 (market segments)。
    • 降维:从数百个宏观经济指标中提取少数几个关键因子。
  • 局限: 只能描述数据,不能指导决策。

强化学习 (Reinforcement Learning)

智能体通过与环境的互动,在“试错”中学习如何做出一系列决策以最大化累积奖励。

  • 核心任务: 学习最优的决策序列 (sequence)
  • 数据形式: 与环境的交互数据 (状态, 动作, 奖励)。
  • 经济学类比:
    • 一家企业在多个季度中,持续调整广告、研发和定价策略,以最大化长期市场份额和利润。

强化学习的本质:在互动中试错学习

强化学习与监督学习最根本的区别在于:

强化学习的本质区别 三个图标分别代表:没有正确答案、反馈延迟、探索与利用的权衡。 ? 没有“正确答案” 只有最大化长期奖励的目标 反馈有延迟 今天的决策,未来才知好坏 探索 vs. 利用 是选择已知最优,还是尝试未知?

核心框架:马尔可夫决策过程 (MDP)

强化学习的问题通常被数学化地建模为 马尔可夫决策过程 (Markov Decision Process, MDP)

这是一个描述决策者(智能体)与环境进行序贯交互的数学框架。理解了MDP,就理解了整个强化学习的基石。

它由五个核心要素构成:(S, A, P, R, γ)

MDP的主角:智能体 (Agent) 与环境 (Environment)

智能体与环境 智能体和环境是MDP的两个主要实体,它们通过动作和状态/奖励进行交互。 智能体 (Agent) 学习者和决策者 环境 (Environment) 智能体所处的外部世界

MDP要素 1: 状态 (State, S)

状态 (State, \(s \in S\)) 是对环境在某一时刻的快照式描述。

  • 定义:描述世界当前状况的一组信息,这组信息足以做出未来的决策。
  • 关键特性 (马尔可夫性):未来只与当前状态有关,与过去如何到达当前状态无关。

\[ \large{ P(S_{t+1}|S_t, A_t) = P(S_{t+1}|S_1, A_1, ..., S_t, A_t) } \]

  • 经济学案例
    • 一个公司的状态可以是:(现金流, 库存水平, 市场份额)
    • 一个经济体的状态可以是:(GDP增速, 通胀率, 失业率)

MDP要素 2: 动作 (Action, A)

动作 (Action, \(a \in A\)) 是智能体可以执行的操作。

  • 定义:智能体在每个状态下可以选择的行为集合。
  • 类型:可以是离散的(如:买入、卖出、持有),也可以是连续的(如:设定价格为$10.53)。
  • 经济学案例
    • 一家公司的动作可以是:(设定产品价格, 决定广告预算)
    • 中央银行的动作可以是:(加息25个基点, 降息, 维持不变)

MDP要素 3: 奖励 (Reward, R)

奖励 (Reward, \(R_t\)) 是环境对智能体在状态 \(S_t\) 下采取动作 \(A_t\) 后给出的即时反馈信号。

  • 定义:一个标量数值,衡量了智能体所做动作的“好坏”。奖励假设 (Reward Hypothesis) 指出,所有目标都可以被描述为最大化期望累积奖励。
  • RL的目标:最大化的是累积奖励,而非瞬时奖励。
  • 经济学案例
    • 对于交易算法,奖励是每日的投资组合回报率。
    • 对于公司,奖励是当季的利润。

MDP要素 4: 状态转移概率 (Transition Probability, P)

状态转移概率 (State Transition Probability) 描述了环境的动态性 (dynamics)。

  • 定义:在状态 \(s\) 采取动作 \(a\) 后,转移到下一个状态 \(s'\) 的概率。
  • 数学表示\[ \large{ p(s' | s, a) = P(S_{t+1} = s' | S_t = s, A_t = a) } \]
  • 经济学案例
    • 在当前市场份额为20% (s) 的情况下,如果公司投入100万美元广告费 (a),那么下个季度市场份额增长到22% (s') 的概率是多少?这通常是随机的。

汇总:MDP五元组

一个完整的马尔可夫决策过程可以由一个五元组定义: \((\mathcal{S}, \mathcal{A}, P, R, \gamma)\)

MDP五元组 展示MDP的五个核心元素:S, A, P, R, gamma,并配有图标。 S 状态 (States) 对世界的描述 A 动作 (Actions) 智能体的选择 P 转移概率 环境的动态 R 奖励 (Rewards) 即时反馈信号 γ 折扣因子 对未来的权衡

交互循环:智能体与环境的“舞蹈”

强化学习的核心过程就是一个不断循环的交互。

MDP交互循环 智能体和环境之间的交互循环图。智能体输出动作,环境返回状态和奖励。 智能体 环境 动作 A_t 状态 S_{t+1}, 奖励 R_{t+1}

交互循环:一步详解

  1. 观察: 在 t 时刻,智能体观察到环境的状态 \(S_t\)
    • (例:交易算法观察到当前股价为$100,交易量为50万手)
  2. 决策: 智能体根据其策略 \(\pi\) 选择一个动作 \(A_t\)
    • (例:算法决定“买入100股”)
  3. 执行: 环境接收动作 \(A_t\)
  4. 演变: 环境根据其内部动态演变到新状态 \(S_{t+1}\),并给出一个奖励 \(R_{t+1}\)
    • (例:市场成交,股价变为$101,当日浮盈为+$100)
  5. 这个循环不断重复。

智能体的大脑:策略函数 (Policy Function, \(\pi\))

策略 (Policy, \(\pi\)) 是智能体的行为准则,是其“大脑”,定义了从状态到动作的映射。

  • 定义:一个从状态到动作的映射。它告诉智能体在每个状态下应该采取什么动作。
  • 类型
    • 确定性策略\(a = \pi(s)\),每个状态对应一个唯一动作。
    • 随机性策略\(\pi(a|s) = P(A_t = a | S_t = s)\),在状态 \(s\) 下采取动作 \(a\) 的概率。
  • RL的目标:找到一个最优策略 \(\pi^*\),以最大化长期回报。

随机性策略的经济学直觉

为什么需要随机性策略?

探索未知

如果一个策略是确定性的,它可能会永远错过更好的选择。随机性让智能体有机会探索新的、未知的动作。这就像一个公司偶尔会尝试一种全新的营销渠道一样。

应对不确定性与对手

在某些情况下,最优的行为本身就是随机的。这在博弈论中很常见,例如“剪刀石头布”的最优策略就是随机出拳,让对手无法预测。

目标函数:最大化累积回报

智能体的目标不是最大化眼前的瞬时奖励 \(R_{t+1}\),而是最大化从当前时刻开始的未来累积回报 (Return)

回报 \(G_t\) 的定义为: \[ \large{ 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} } \]

核心概念:折扣因子 (Discount Factor, \(\gamma\))

公式中的 \(\gamma\) (gamma) 是折扣因子\(0 \le \gamma \le 1\)

  • 经济学直觉:这与金融学中的净现值 (Net Present Value, NPV) 概念完全一致!\(\gamma\) 就像是 \(1/(1+r)\),其中 \(r\) 是贴现率。
  • 为什么需要折扣?
    1. 时间价值:今天的1美元比明天的1美元更有价值。
    2. 模型不确定性:我们对未来的预测总是不确定的,折扣因子反映了这种不确定性。
    3. 数学收敛:从数学上保证了无限序列的回报总和是一个有限值。

折扣因子的作用:一个例子

假设奖励序列是 [+10, +2, +5, +8, ...]

\(\gamma = 0\) (极度短视)

\(G_t = 10 + 0 \cdot 2 + 0 \cdot 5 + \dots = 10\) 只关心立即奖励。

\(\gamma = 0.9\) (有远见)

\(G_t = 10 + 0.9 \cdot 2 + 0.9^2 \cdot 5 + \dots\) \(G_t = 10 + 1.8 + 4.05 + \dots\) 会权衡短期和长期利益。

\(\gamma\) 的选择是一个关键的建模决策,它定义了智能体的“远见”程度。

衡量策略好坏的标尺:价值函数 (Value Function)

我们如何判断一个状态是“好”还是“坏”?或者一个动作是“好”还是“坏”?

这就是价值函数的作用。它是对未来回报的期望 (Expectation)

有两种核心的价值函数:

  1. 状态价值函数 (State-Value Function, \(V_\pi(s)\))
  2. 动作价值函数 (Action-Value Function, \(Q_\pi(s, a)\))

状态价值函数 V(s): 当前处境有多好?

状态价值函数 \(V_\pi(s)\) 回答了这个问题:“如果我从状态 \(s\) 开始,并始终遵循策略 \(\pi\),我能期望获得多少未来的总回报?”

  • 定义\[ \large{ V_\pi(s) = E_\pi[G_t | S_t = s] = E_\pi[\sum_{k=0}^{\infty} \gamma^k R_{t+k+1} | S_t = s] } \]
  • 经济学案例:在当前宏观经济状况(状态 \(s\))下,如果美联储遵循其当前的利率政策(策略 \(\pi\)),那么对未来经济总产出(回报)的期望值是多少。

动作价值函数 Q(s, a): 这个选择有多好?

动作价值函数 \(Q_\pi(s, a)\) (也称为Q函数) 回答了这个问题:“在状态 \(s\) 下,如果我选择动作 \(a\),然后继续遵循策略 \(\pi\),我能期望获得多少未来的总回报?”

  • 定义\[ \large{ Q_\pi(s, a) = E_\pi[G_t | S_t = s, A_t = a] } \]
  • 直观理解\(Q_\pi(s, a)\) 是对在特定状态下采取特定动作的质量 (Quality) 的评估。
  • 经济学案例:在当前库存水平(状态 \(s\))下,如果公司选择降价10%(动作 \(a\)),那么对公司未来总利润(回报)的期望值是多少。

V函数与Q函数的关系:一个重要的恒等式

状态的价值,等于在该状态下,遵循策略 \(\pi\) 所可能采取的所有动作的价值的期望。

\[ \large{ V_\pi(s) = \sum_{a \in A} \pi(a|s) Q_\pi(s, a) } \]

  • \(\pi(a|s)\) 是在状态 \(s\) 选择动作 \(a\) 的概率。
  • \(Q_\pi(s, a)\) 是选择了动作 \(a\) 之后的价值。

这个关系非常直观,并且在后续的算法中至关重要。

动态规划的核心:贝尔曼期望方程

贝尔曼方程(Bellman Equation)是强化学习中最核心的方程,它将一个状态的价值与其后继状态的价值联系起来,构建了一个递归关系。

对于状态价值函数 \(V_\pi(s)\): \[ \large{ V_\pi(s) = \sum_{a \in A} \pi(a|s) \left( E[R_{t+1}|s,a] + \gamma \sum_{s' \in S} p(s'|s,a) V_\pi(s') \right) } \]

这个方程说的是:当前状态的价值 = 所有可能动作的(即时奖励 + 折扣后的下一状态期望价值)的期望

贝尔曼期望方程的直观分解 (V函数)

让我们把这个方程拆开来看: \[ V_\pi(s) = \sum_{a \in A} \pi(a|s) \Big( \underbrace{R(s,a)}_{\text{立即能得到什么}} + \gamma \underbrace{\sum_{s' \in S} p(s'|s,a) V_\pi(s')}_{\text{未来能期望得到什么}} \Big) \]

  1. 外层期望 \(\sum_{a \in A} \pi(a|s) \dots\):因为我们的策略可能是随机的,所以要对所有可能的动作求期望。
  2. 即时奖励 \(R(s,a)\):采取动作 \(a\) 后立即获得的奖励。
  3. 内层期望 \(\sum_{s' \in S} p(s'|s,a) \dots\):因为环境的反应(状态转移)可能是随机的,所以要对所有可能的下一状态求期望。
  4. \(V_\pi(s')\):这就是递归的魔力所在。下一状态的价值,又可以用同样的方式展开。

贝尔曼期望方程 (Q函数)

对于动作价值函数 \(Q_\pi(s, a)\),贝尔曼方程形式略有不同:

\[ \large{ 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') } \]

由于 \(\sum_{a' \in A} \pi(a'|s') Q_\pi(s', a') = V_\pi(s')\), 我们可以简化为:

\[ \large{ Q_\pi(s, a) = R(s,a) + \gamma \sum_{s' \in S} p(s'|s,a) V_\pi(s') } \]

这个方程说的是:在状态s采取动作a的价值 = 即时奖励 + 折扣后的期望下一状态价值

求解RL问题:找到最优策略 \(\pi^*\)

强化学习的最终目标是找到一个最优策略 \(\pi^*\),使得在任何初始状态下,它所能获得的期望回报都大于或等于其他任何策略。

\[ \large{ \pi^* = \arg\max_{\pi} V_\pi(s) \quad \text{for all } s \in S } \]

对应的最优价值函数记为 \(V^*(s)\)\(Q^*(s, a)\)

贝尔曼最优方程

对于最优策略,贝尔曼方程有一个特殊的形式,即贝尔曼最优方程。它不再是求期望,而是取最大值 (max)。

对于 \(V^*(s)\): \[ \large{ V^*(s) = \max_{a \in A} \left( R(s,a) + \gamma \sum_{s' \in S} p(s'|s,a) V^*(s') \right) } \]

对于 \(Q^*(s, a)\): \[ \large{ Q^*(s, a) = R(s,a) + \gamma \sum_{s' \in S} p(s'|s,a) \max_{a' \in A} Q^*(s', a') } \]

这里的 \(\max\) 体现了“最优性”:智能体总是会选择那个能导向最优未来的动作。

如何求解?广义策略迭代 (GPI)

知道了目标(贝尔曼最优方程),但如何找到解?大多数RL算法都遵循一个通用的模式,叫做广义策略迭代 (Generalized Policy Iteration, GPI)

这是一个“左右手互搏”的过程,包含两个相互交织的步骤:

广义策略迭代 (Generalized Policy Iteration) V π 2. 策略改进 (Policy Improvement) π' ← greedy(V) 1. 策略评估 (Policy Evaluation) V_π ← Bellman Expectation Equation V*, π*

策略评估:我的当前策略到底有多好?

假设我们有一个固定的策略 \(\pi\)(比如,一个交易算法的现有规则),我们想知道它的价值。

  • 任务:计算 \(V_\pi(s)\)
  • 方法:利用贝尔曼期望方程,通过迭代来求解。 \[ \large{ V_{k+1}(s) = \sum_{a \in A} \pi(a|s) \left( R(s,a) + \gamma \sum_{s' \in S} p(s'|s,a) V_k(s') \right) } \] 我们从一个随机的 \(V_0\) 开始,不断用旧的价值函数计算新的价值函数,直到 \(V_k\) 收敛。这个过程也叫 iterative policy evaluation

策略改进:我能做得更好吗?

一旦我们知道了当前策略 \(\pi\) 的价值函数 \(V_\pi\),我们就可以尝试改进它。

  • 方法:对于每个状态 \(s\),我们不再遵循 \(\pi\),而是采取“贪心”策略,选择那个能带来最大Q值的动作: \[ \large{ \pi'(s) = \arg\max_{a \in A} Q_\pi(s,a) } \] \[ \large{ = \arg\max_{a \in A} \left( R(s,a) + \gamma \sum_{s' \in S} p(s'|s,a) V_\pi(s') \right) } \]
  • 可以证明,这样得到的新策略 \(\pi'\) 一定比旧策略 \(\pi\) 要好(或者一样好)。这就是策略改进定理

算法分类:是否需要环境模型?

解决GPI这个循环的算法,可以分为两大类:

基于模型 (Model-Based)

算法需要知道环境的完整模型,即状态转移概率 \(p(s'|s,a)\) 和奖励函数 \(R(s,a)\)

  • 典型算法: 动态规划
  • 优点: 数据效率高。
  • 缺点: 现实世界中几乎永远无法知道精确的环境模型(比如股市的转移概率)。

无模型 (Model-Free)

算法不需要知道环境模型,它直接通过与环境交互产生的样本(经验)来学习。

  • 典型算法: Q-Learning, Sarsa
  • 优点: 更适用于现实世界的复杂问题。

无模型方法:探索世界的方式

Model-Based vs Model-Free 一个比喻,基于模型的RL像是看地图,无模型的RL像是亲自探索。 基于模型 (Model-Based) "我有一张完整的地图," "可以在脑中规划好最优路线。" 无模型 (Model-Free) "我没有地图," "只能边走边看,从试错中学习。"

算法分类:学习方式有何不同?

无模型算法内部,又可以根据学习方式分为两类:

同轨策略 (On-policy)

学习和决策使用同一个策略。它评估和改进的是当前正在执行的那个策略。

  • 类比: 一个新手司机在开车时,边开边总结经验,以改进自己的驾驶技术。
  • 典型算法: Sarsa。

离轨策略 (Off-policy)

学习和决策可以使用不同的策略。它可以在执行一个探索性策略的同时,评估和改进一个目标(贪心)策略。

  • 类比: 一个专家在观看新手司机的录像,从中学习如何成为一个完美的司机。
  • 典型算法: Q-Learning。

无模型方法一:蒙特卡洛 (Monte Carlo, MC)

MC方法是最直观的无模型学习方法。

  • 核心思想:通过大量的完整回合 (episode) 模拟来估计价值函数。一个回合指从开始状态到终止状态的完整轨迹。
  • 如何估计 \(Q_\pi(s,a)\)
    1. 遵循策略 \(\pi\) 玩很多次回合。
    2. 对于所有访问过 \((s,a)\) 对的回合,记录其后续的实际回报 \(G_t\)
    3. 将这些回报取平均值,作为 \(Q_\pi(s,a)\) 的估计。 \[ \large{ Q(s,a) \leftarrow \text{Average}(G_t \text{ for all visits to } (s,a)) } \]
  • 缺点:只能用于有明确终止状态的回合制任务,且需要等到回合结束后才能学习。

无模型方法二:时序差分 (Temporal-Difference, TD)

TD学习是强化学习中最核心、最创新的思想之一。它结合了MC和动态规划的优点。

  • 核心思想:不需要等待回合结束,每走一步就进行学习和更新。它使用当前对下一状态价值的估计来更新当前状态的价值。
  • 与MC对比
    • MC 更新目标是实际的最终回报 \(G_t\)
    • TD 更新目标是估计的未来回报 \(R_{t+1} + \gamma V(S_{t+1})\)
  • 这个过程叫做自举 (Bootstrapping),即用一个估计值来更新另一个估计值。

TD(0) 算法的更新规则

最简单的TD算法,称为TD(0),其更新规则为: \[ \large{ V(S_t) \leftarrow V(S_t) + \alpha \underbrace{\left[ \overbrace{R_{t+1} + \gamma V(S_{t+1})}^{\text{TD Target}} - V(S_t) \right]}_{\text{TD Error}} } \]

  • \(\alpha\):学习率,决定了我们多大程度上接受新的估计。
  • TD目标 (\(R_{t+1} + \gamma V(S_{t+1})\)):一个比 \(V(S_t)\) 更精确的、对未来回报的估计。
  • TD误差 (\(\delta_t\)):我们当前的估计与更精确的目标之间的差距。算法的目标就是不断减小这个误差。

一个生动的例子:从宿舍到教室

假设你每天从宿舍走到教室,想预测总共需要多长时间。你最初的预测是18分钟。

MC vs TD Learning Example 一个时间轴,比较蒙特卡洛和时序差分学习在预测任务中的更新时机。 离开宿舍 下楼遇雨 天桥拥堵 到达教室 MC: 必须走完全程(25分钟),才能返回更新初始预测。 更新! TD: 每遇到新情况就立即更新预测,无需等待最终结果。 更新! 再次更新!
  • MC方法:你必须走完全程,发现总共花了25分钟。然后你才能回头更新你对“离开宿舍”这个状态的价值估计。
  • TD方法:你下到楼下,发现外面下雨了,你立刻更新你的预测:现在估计总时间可能是23分钟。每一步都根据新的信息来更新你的预测。这更高效,也更符合人类的学习方式。

On-Policy TD 控制算法:Sarsa

Sarsa是一种On-policy的TD控制算法,它的目标是学习Q函数。

  • 名字来源:其更新规则需要一个五元组 \((S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1})\),即 S, A, R, S’, A’
  • 更新规则\[ \large{ Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha [R_{t+1} + \gamma Q(S_{t+1}, \mathbf{A_{t+1}}) - Q(S_t, A_t)] } \]
  • 关键点:更新 \(Q(S_t, A_t)\) 时,使用的是在 \(S_{t+1}\) 实际将要采取的动作 \(A_{t+1}\) 对应的Q值。

探索与利用:\(\epsilon\)-greedy 策略

为了保证算法能够探索所有可能性,我们通常不直接使用贪心策略(即总是选择Q值最大的动作),而是使用\(\epsilon\)-greedy策略。

  • \(1-\epsilon\) 的概率,选择当前估计的最好动作:\(a^* = \arg\max_a Q(s,a)\)。 (利用)
  • \(\epsilon\) 的概率,从所有动作中随机选择一个。 (探索)

\(\epsilon\) 的值通常会随着学习的进行而逐渐减小,从偏向探索变为偏向利用。

Off-Policy TD 控制算法:Q-Learning

Q-Learning是强化学习中最著名、应用最广泛的算法之一。它是一种Off-policy算法。

  • 核心思想:它遵循一个行为策略(例如\(\epsilon\)-greedy)来探索,但同时学习的是另一个目标策略(纯贪心策略)的Q值。
  • 更新规则\[ \large{ Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha [R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a') - Q(S_t, A_t)] } \]
  • 关键区别:注意更新规则中的 \(\max_{a'} Q(S_{t+1}, a')\)。它不再关心在\(S_{t+1}\)实际选择了什么动作,而是直接使用在\(S_{t+1}\)可能的最大Q值来更新。

Sarsa vs. Q-Learning: 一个悬崖行走的比喻

想象一个智能体在悬崖边行走,目标是到达终点(G),起点是(S)。掉下悬崖(Cliff)会得到巨大负奖励。

Sarsa vs. Q-Learning:悬崖行走策略对比 S G 悬 崖 (The Cliff) Sarsa (同策略 On-policy) Q(s,a) ← R + γQ(s',a') 评估实际将执行的动作 a' 结果:策略更谨慎 (Safe Path) Q-Learning (异策略 Off-policy) Q(s,a) ← R + γ max Q(s',a') 评估理论最优的动作 a' 结果:策略更激进 (Optimal Path) 核心区别:Sarsa评估“现实”,Q-Learning评估“理想”。

Sarsa vs. Q-Learning: 解读

  • Sarsa (On-policy):它是一个“谨慎”的学习者。因为它知道自己下一步也是探索性的(可能会失足掉下悬崖),所以在更新Q值时会把这种风险考虑进去。它会学到一条离悬崖远一点、虽然慢但更安全的路径。
  • Q-Learning (Off-policy):它是一个“大胆”的学习者。它总是假设下一步会采取最优行动,而不管实际探索时可能会犯错。它会学到一条紧贴悬崖边的最快路径,因为它相信自己最终能完美地执行。
特性 Sarsa (On-policy) Q-Learning (Off-policy)
学习目标 学习当前行为策略的价值 学习最优策略的价值
更新方式 使用下一个实际采取的动作A’ 使用下一个可能的最优动作
行为特点 更保守,会避开有危险的捷径 更激进,倾向于走最优但有风险的路径

Python实践:使用Q-Learning解决“冰湖”问题

为了让概念更具体,我们来看一个经典的RL问题:FrozenLake

  • 环境:一个 4x4 的网格,部分是冰面(F),部分是洞(H)。
  • 目标:从起点(S)走到终点(G),不能掉进洞里。
  • 状态:16个格子位置。
  • 动作:上、下、左、右。
  • 奖励:到达终点得1分,其他情况得0分。
  • 挑战:冰面是滑的,执行“向右”的动作,可能有一定概率滑到别处。

这是一个典型的MDP。

Q-Learning代码框架:初始化

我们需要一个Q表来存储每个 (状态, 动作) 对的价值。初始时,我们对所有价值一无所知,所以全部设为0。

import numpy as np
import pandas as pd

# 环境参数
n_states = 16  # 4x4 grid
n_actions = 4  # left, down, up, right

# 初始化Q表,所有值都为0
q_table = np.zeros((n_states, n_actions))

print('Initialized Q-Table (Shape: {}):'.format(q_table.shape))
# 使用pandas美化输出
q_df = pd.DataFrame(q_table, columns=['Left', 'Down', 'Up', 'Right'])
q_df.index.name = 'State'
print(q_df.head())
Initialized Q-Table (Shape: (16, 4)):
       Left  Down   Up  Right
State                        
0       0.0   0.0  0.0    0.0
1       0.0   0.0  0.0    0.0
2       0.0   0.0  0.0    0.0
3       0.0   0.0  0.0    0.0
4       0.0   0.0  0.0    0.0

Q-Learning代码框架:主循环

算法的核心是一个循环,在其中智能体与环境交互并更新Q表。为了让代码可独立运行,我们模拟一个简单的、无滑动的冰湖环境。

import numpy as np
import pandas as pd

# --- Mock Environment ---
MAP = ["SFFF", "FHFH", "FFFH", "HFFG"]
# 动作效果: 0:左, 1:下, 2:上, 3:右
ACTION_EFFECTS = [-1, 4, -4, 1] 
GOAL_STATE = 15
HOLES =[5,7,11,12]

def mock_step(state, action):
    new_state = state + ACTION_EFFECTS[action]
    # 边界检查
    if (action == 0 and state % 4 == 0) or \
       (action == 3 and state % 4 == 3) or \
       (action == 2 and state < 4) or \
       (action == 1 and state > 11):
        new_state = state # 撞墙则停在原地
    
    if new_state in HOLES:
        return new_state, 0, True # 掉进洞,无奖励,回合结束
    elif new_state == GOAL_STATE:
        return new_state, 1, True # 到达终点,奖励为1,回合结束
    else:
        return new_state, 0, False # 普通移动

# --- Q-Learning Algorithm ---
q_table = np.zeros((16, 4))
learning_rate = 0.1
gamma = 0.99
epsilon = 0.1
n_episodes = 5000

for _ in range(n_episodes):
    state = 0 # Start at S
    done = False
    while not done:
        if np.random.uniform(0, 1) < epsilon:
            action = np.random.randint(0, 4) # Explore
        else:
            action = np.argmax(q_table[state, :]) # Exploit

        new_state, reward, done = mock_step(state, action)
        
        old_value = q_table[state, action]
        next_max = np.max(q_table[new_state, :])
        
        # Q-learning核心更新公式
        new_value = old_value + learning_rate * (reward + gamma * next_max - old_value)
        q_table[state, action] = new_value
        
        state = new_state

# --- Print Results ---
print("Final Q-Table:")
q_df_final = pd.DataFrame(q_table, columns=['Left', 'Down', 'Up', 'Right'])
q_df_final.index.name = 'State'
print(q_df_final.round(3))
Final Q-Table:
       Left  Down   Up  Right
State                        
0       0.0   0.0  0.0    0.0
1       0.0   0.0  0.0    0.0
2       0.0   0.0  0.0    0.0
3       0.0   0.0  0.0    0.0
4       0.0   0.0  0.0    0.0
5       0.0   0.0  0.0    0.0
6       0.0   0.0  0.0    0.0
7       0.0   0.0  0.0    0.0
8       0.0   0.0  0.0    0.0
9       0.0   0.0  0.0    0.0
10      0.0   0.0  0.0    0.0
11      0.0   0.0  0.0    0.0
12      0.0   0.0  0.0    0.0
13      0.0   0.0  0.0    0.0
14      0.0   0.0  0.0    0.0
15      0.0   0.0  0.0    0.0

从表格到现实:状态空间爆炸

我们刚才讨论的表格方法(Q表)非常适合状态和动作空间很小的问题。

但是,现实世界的经济问题呢?

  • 国际象棋的状态空间大约是 \(10^{47}\)
  • 围棋的状态空间大约是 \(10^{170}\)
  • 一个自动驾驶汽车的状态是连续的(位置、速度、方向),状态空间是无限的。

我们不可能为这些问题创建一个Q表。这就是深度强化学习 (Deep Reinforcement Learning, DRL) 的用武之地。

深度强化学习:神经网络赋能RL

DRL的核心思想是用一个深度神经网络来近似价值函数或策略函数,而不是用一个表格。

  • 价值网络 (Value Network):输入是状态 \(s\),输出是这个状态的价值 \(V(s)\),或者每个动作的Q值 \(Q(s,a)\)\[ \large{ Q(s, a; \mathbf{w}) \approx Q^*(s, a) } \] 这里的 \(\mathbf{w}\) 是神经网络的权重。
  • 策略网络 (Policy Network):输入是状态 \(s\),输出是在这个状态下采取每个动作的概率 \(\pi(a|s)\)

里程碑:Deep Q-Network (DQN)

2013年,DeepMind公司提出的DQN算法震惊了世界,它成功地只通过观察游戏屏幕像素,就学会在多种Atari游戏中达到超越人类的水平。

DQN的核心就是用一个深度卷积神经网络(CNN)来近似最优动作价值函数 \(Q^*(s,a)\)

DQN Architecture 一个简化的DQN架构图,显示了从输入状态到卷积层、全连接层,最后到Q值输出的过程。 状态 S (e.g., 游戏画面) 卷积神经网络 (CNN) 全连接层 (FC) Q(s, action_1) Q(s, action_2) ...

DQN的损失函数:如何训练网络?

我们如何训练这个Q网络呢?我们希望网络的预测 \(Q(s, a; \mathbf{w})\) 尽可能接近贝尔曼最优方程给出的“目标值”。

因此,我们可以定义一个类似于监督学习的损失函数,通常是均方误差 (MSE): \[ \large{ L(\mathbf{w}) = E \left[ \left( \underbrace{R + \gamma \max_{a'} Q(s', a'; \mathbf{w})}_{\text{TD Target, a.k.a. y}} - \underbrace{Q(s, a; \mathbf{w})}_{\text{Prediction}} \right)^2 \right] } \]

然后我们可以用梯度下降法来优化网络权重 \(\mathbf{w}\)

DQN成功的秘诀一:经验回放 (Experience Replay)

直接用上述方法训练会很不稳定。DQN引入了两个关键技巧。第一个是经验回放

Experience Replay 一个图示,说明经验回放机制:智能体的经验被存储到回放缓冲区,训练时从中随机采样。 Agent 生成经验 (s, a, r, s') 回放缓冲区 (s_t, a_t, r_t, s_{t+1}) (s_{t-1}, ...) ... 随机采样 Mini-batch Q-Network 训练
  • 效果:1. 打破数据相关性,满足i.i.d假设。 2. 提高数据利用率

DQN成功的秘诀二:目标网络 (Target Network)

训练不稳定的第二个原因是:我们的预测和目标都在用同一个网络计算,目标值 \(y = R + \gamma \max_{a'} Q(s', a'; \mathbf{w})\) 会随着 \(\mathbf{w}\) 的每次更新而变化,这就像追逐一个移动的目标。

Target Network 一个图示,说明DQN中使用两个网络:一个用于预测,一个固定的目标网络用于计算TD目标。 主网络 (Q-Network, w) 用于计算预测值 Q(s, a; w) 目标网络 (Target Network, w-) 用于计算目标值 max Q(s', a'; w-) 每N步复制一次权重
  • 效果:目标网络 w- 被“冻结”一段时间,使得学习目标更加稳定

DQN的过高估计问题

标准的DQN由于在计算TD目标时总是使用 \(\max\) 算子,倾向于系统性地过高估计Q值。 \[ \large{ y_t = R_{t+1} + \gamma \max_{a'} Q(s', a'; \mathbf{w}) } \] 如果Q值的估计本身有噪声,那么取最大值会放大正向噪声,导致乐观的偏差。这种偏差会通过自举过程不断传播和累积。

解决方案:Double DQN (DDQN)

DDQN通过一个巧妙的修改来解耦“动作选择”和“价值评估”,从而缓解过高估计问题。

  • 标准DQN的目标\[ \large{ Y_t^{DQN} = R_{t+1} + \gamma Q(S_{t+1}, \arg\max_{a'} Q(S_{t+1}, a'; \mathbf{w}_t); \mathbf{w}_t) } \]
  • DDQN的目标:它使用主网络选择最佳动作,但使用目标网络评估这个动作的价值。 \[ \large{ Y_t^{DDQN} = R_{t+1} + \gamma Q(S_{t+1}, \arg\max_{a'} Q(S_{t+1}, a'; \mathbf{w}_t); \mathbf{w}_t^-) } \]
  • 这种解耦使得价值估计更加保守和准确。

价值函数的进一步分解:Dueling DQN

Dueling DQN提出了一种新的网络架构,它将Q值的估计分解为两部分:

  1. 状态价值 (State Value, \(V(s)\)):这个状态本身有多好,与采取什么动作无关。
  2. 优势函数 (Advantage Function, \(A(s,a)\)):在这个状态下,采取动作 \(a\) 比采取平均动作要好多少。

\[ \large{ Q(s,a) = V(s) + \left( A(s,a) - \frac{1}{|\mathcal{A}|} \sum_{a' \in \mathcal{A}} A(s,a') \right) } \]

这种架构让网络能够更有效地学习状态的内在价值,尤其是在很多动作的价值都差不多时。

结论:强化学习为经济学决策提供了新范式

  • 核心框架:MDP为序贯决策问题提供了统一的数学语言。
  • 核心思想:通过策略评估和策略改进的迭代循环,最终收敛到最优决策。
  • 核心算法:从Q-Learning到DQN及其变体,算法的进步使得解决日益复杂的问题成为可能。
  • 经济学意义:RL不仅仅是游戏AI,它为动态定价、资源管理、投资组合优化、拍卖设计等众多经济学领域提供了强大的、数据驱动的决策工具。

未来的方向:RL在经济学中的应用

  • 市场建模:将多个RL智能体放在一个模拟市场中,研究市场均衡和复杂动态的涌现 (emergence)。
  • 算法博弈论:设计在竞争或合作环境中表现最优的智能体,例如在拍卖或供应链谈判中。
  • 个性化策略:为每个用户(如电商推荐)或每个资产(如投资组合)制定动态的、个性化的策略。

强化学习正在从一个计算机科学的子领域,演变为理解和优化复杂系统中智能决策的通用框架。

谢谢!