Lecture by X.Dan

# 强化学习简介

强化学习 (Reinforcement Learning, RL) 是一种机器学习范式,其智能体 (agent) 通过与环境交互来学习如何做出决策,以最大化累积奖励。强化学习的核心概念包括状态 (state)、动作 (action)、奖励 (reward) 和策略 (policy)。

Markov 决策过程 (Markov Decision Process, MDP) 是强化学习的数学框架,定义为一个五元组 (S,A,P,R,γ)(S, A, P, R, \gamma),其中:

  • SS:状态空间,表示所有可能的环境状态。
  • AA:动作空间,表示智能体可以采取的所有可能动作。
  • PP:状态转移概率,表示在给定当前状态和动作下,转移到下一个状态的概率分布。
  • RR:奖励函数,表示在给定状态和动作下,智能体获得的即时奖励。
  • γ\gamma:折扣因子,表示未来奖励的现值权重,范围在 [0,1][0, 1] 之间。

这个决策过程具有 Markov 性质,即未来状态仅依赖于当前状态和动作,而与过去的状态和动作无关:

P(st+1st,at)=P(st+1s0,a0,,st,at)P(s_{t+1} | s_t, a_t) = P(s_{t+1} | s_0, a_0, \ldots, s_t, a_t)

这表明智能体决策动作后,不一定会确定性地转移到下一个状态,而是根据概率分布进行转移。

4×44\times 4 的网格情形中:

  • 状态空间表示智能体在网格中的位置,从左下到右上依次编号二维坐标为 (0,0)(0,0)(3,3)(3,3)
  • 动作空间包括向上、向右、向下和向左移动(数值表示依次为 {0,1,2,3}\{0, 1, 2, 3\});
  • 状态转移概率 P(ss,a)P(s'|s, a) 满足边界条件,即限制智能体不能移动出网格边界。这样的边界条件确保智能体在现有的状态空间内进行决策和学习;
  • 终态为右上角位置 (3,3)(3,3),一旦智能体到达该位置,当前回合结束;
  • 奖励函数 R(s,a,s)R(s,a,s') 定义为:当智能体到达终态 s=(3,3)s'=(3,3) 时,奖励 +10+10,此外带有每步移动的惩罚 1-1,鼓励智能体以最短路径到达终态,这平衡智能体的探索 (exploration)利用 (exploitation) 的行为,后者是指智能体在已知信息基础上选择最优动作以最大化奖励,前者是指智能体尝试新的动作以发现潜在的更优策略。需要注意的是,奖励是稀疏奖励 (sparse reward),只有在到达特殊情形时才会获得奖励,不是每一个格点上都有奖励。奖励函数还关注到达奖励格的方式和决策路径。

为了调整智能体在探索和利用之间的权衡,可以

  • 引入 ε\varepsilon - 贪婪策略 (epsilon-greedy policy),即智能体以概率 1ε1-\varepsilon 选择当前估计的最优动作,以概率 ε\varepsilon 随机选择一个动作进行探索。通过调整 ε\varepsilon 的值,可以控制智能体的探索程度,从而影响学习效果和收敛速度。
  • 使用软最大化策略 (softmax policy),根据动作的估计值分配选择概率,使得高估计值的动作被选择的概率更大,但仍然保留一定的探索空间。
  • 采用上置信界 (Upper Confidence Bound, UCB) 方法,结合动作的估计值和不确定性,选择具有最高上置信界的动作,从而在探索和利用之间取得平衡。

折扣因子 (discount factor) γ\gamma 用于权衡即时奖励和未来奖励的重要性。较高的折扣因子(接近 1)表示智能体更重视未来奖励,而较低的折扣因子(接近 0)则表示智能体更关注即时奖励。在实际应用中,选择合适的折扣因子一方面可以影响智能体的学习效果,另一方面也可以帮助控制学习过程的稳定性和收敛性。智能体的目标是达到一个最优策略 π\pi^*,使得在任何状态 ss 下,采取该策略 π:SA\pi^*:S\to A 所能获得的累积奖励最大化。累积奖励通常表示为未来奖励的折扣和:

Gt=E[k=0γkRt+k+1]G_t =\mathbb E\left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} \right]

其中,GtG_t 是从时间步 tt 开始,之后所有时间步的折扣奖励总和,E\mathbb E 表示期望值,这是因为环境的动态性和不确定性使得奖励具有随机性,因此需要通过期望值来描述智能体在不同策略下的平均表现。特别注意,π\pi^* 作为最优策略本身也可能是随机的,即在某一状态下,智能体可能以一定概率选择不同的动作:

  • 探索:在学会最优策略之前,智能体需要尝试不同的动作以了解环境的动态,这有助于发现潜在的更优策略。
  • 应对不确定性环境:在某些环境中,状态转移和奖励可能具有随机性,随机策略可以帮助智能体更好地适应这种不确定性。
  • 最优策略本身可能是随机的:在某些情况下(博弈)中,最优策略可能涉及随机选择动作以避免被对手预测。

状态值函数 (State-Value Function) Vπ(s)V_{\pi}(s) 定义为在状态 ss 下,按照策略 π\pi 行动时,能够获得的期望累积奖励:

Vπ(s)=Eπ[GtSt=s]=Eπ[k=0γkRt+k+1St=s]V_{\pi}(s) = \mathbb{E}_{\pi} \left[ G_t | S_t = s \right] = \mathbb{E}_{\pi} \left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} | S_t = s \right]

动作值函数 (Action-Value Function) Qπ(s,a)Q_{\pi}(s,a) 定义为在状态 ss 下,采取动作 aa 并随后按照策略 π\pi 行动时,能够获得的期望累积奖励:

Qπ(s,a)=Eπ[GtSt=s,At=a]=Eπ[k=0γkRt+k+1St=s,At=a]Q_{\pi}(s,a) = \mathbb{E}_{\pi} \left[ G_t | S_t = s, A_t = a \right] = \mathbb{E}_{\pi} \left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} | S_t = s, A_t = a \right]

它们的关系如下,其中 π(as)\pi(a|s) 表示在状态 ss 下选择动作 aa 的概率,这也说明了随机策略的作用:

Vπ(s)=aAπ(as)Qπ(s,a)V_{\pi}(s) = \sum_{a \in A} \pi(a|s) Q_{\pi}(s,a)

简言之,Vπ(s)V_\pi(s) 衡量在状态 ss 下,智能体按照策略 π\pi 行动时的整体预期表现,而 Qπ(s,a)Q_\pi(s,a) 则更具体地衡量在状态 ss 下采取特定动作 aa 后的预期表现。后者将整体回报拆解成若干步决策的影响,是一种 “动态规划” 的思想。引出下文的 Bellman 方程和 QQ 学习算法。

Bellman 方程 (Bellman Equations) 描述了状态值函数和动作值函数之间的递归关系。对于状态值函数 Vπ(s)V_{\pi}(s)Bellman 期望方程表示为:

{Vπ(s)=aAπ(as)sSP(ss,a)[R(s,a,s)+γVπ(s)]=aAπ(as)Qπ(s,a)Qπ(s,a)=sSP(ss,a)[R(s,a,s)+γaAπ(as)Qπ(s,a)]\begin{cases}V_{\pi}(s) = \displaystyle \sum_{a \in A} \pi(a|s) \sum_{s' \in S} P(s'|s,a) \left[ R(s,a,s') + \gamma V_{\pi}(s') \right]=\sum_{a \in A} \pi(a|s) Q_{\pi}(s,a)\\ \\ Q_{\pi}(s,a) = \displaystyle \sum_{s' \in S} P(s'|s,a) \left[ R(s,a,s') + \gamma \sum_{a' \in A} \pi(a'|s') Q_{\pi}(s',a') \right]\end{cases}

Bellman 最优方程 (Bellman Optimality Equations) 则描述了最优状态值函数 V(s)V_*(s) 和最优动作值函数 Q(s,a)Q_*(s,a) 之间的关系:

{V(s)=maxaAs,rP(s,rs,a)[r+γV(s)]=Q(s,π(s))=maxaAQ(s,a)Q(s,a)=s,rP(s,rs,a)[r+γmaxaAQ(s,a)]π(s)=argmaxaAQ(s,a)\begin{cases}V_{*}(s) = \displaystyle \max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V_{*}(s') \right]=Q_{*}(s,\pi_{*}(s))= \max_{a \in A} Q_{*}(s,a)\\ \\ Q_{*}(s,a) = \displaystyle \sum_{s',r} P(s',r|s,a) \left[ r + \gamma \max_{a' \in A} Q_{*}(s',a') \right]\\ \\ \pi_{*}(s) = \arg\max_{a \in A} Q_{*}(s,a)\end{cases}

其实,对于一般的 MDP 问题,所有的求和都需要像上面那样对奖励 rr 进行求和,因为奖励函数 R(s,a,s)R(s,a,s') 可能是随机的。但是在大多数实际应用中,奖励函数是确定性的,因此可以简化为只对下一个状态 ss' 进行求和。

比如,智能体在状态 ss(面对冰箱)时,可以选择动作 aa(打开冰箱门),然后根据状态转移概率 P(ss,a)P(s'|s,a) 转移到下一个状态 ss'(冰箱门打开),并获得即时奖励 R(s,a,s)R(s,a,s')(找到食物,奖励 +10+10),但也有可能什么都没找到(奖励 1-1)。这就是 rr 的随机性体现。而 π\pi_* 就是希望能找到一个最优策略,使得在任何状态下,选择的动作都能最大化未来的累积奖励。(期望意义下的最优)

现在给出 QπQ_\pi 的 Bellman 期望方程的推导过程。从起始点 Qπ(s,a)=Eπ[GtSt=s,At=a]Q_{\pi}(s,a)=\mathbb E_{\pi} \left[ G_t | S_t = s, A_t = a \right] 出发,将回报拆解成即时奖励和未来奖励的折扣和:

Qπ(s,a)=Eπ[k=0γkRt+k+1St=s,At=a]=Eπ[Rt+1+γk=0γkRt+k+2St=s,At=a]=Eπ[Rt+1+γGt+1St=s,At=a]=Eπ[Rt+1s,a]+γEπ[Gt+1s,a]=s,rP(s,rs,a)r+sP(ss,a)γEπ[Gt+1s,a]=s,rP(s,rs,a)[r+γaπ(as)Qπ(s,a)]\begin{array}{ll} Q_{\pi}(s,a)&=\displaystyle \mathbb{E}_{\pi} \left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} | S_t = s, A_t = a \right]\\\\ &=\displaystyle \mathbb{E}_{\pi} \left[ R_{t+1} + \gamma \sum_{k=0}^{\infty} \gamma^k R_{t+k+2} | S_t = s, A_t = a \right]\\\\ &=\displaystyle \mathbb{E}_{\pi} \left[ R_{t+1} + \gamma G_{t+1} | S_t = s, A_t = a \right]\\\\ &=\displaystyle \mathbb{E}_{\pi} \left[ R_{t+1} |s,a \right] + \gamma \mathbb{E}_{\pi} \left[ G_{t+1} | s,a \right]\\ \\ &=\displaystyle \sum_{s',r} P(s',r|s,a) \cdot r +\sum_{s'}P(s'|s,a) \cdot \gamma \mathbb{E}_{\pi} \left[ G_{t+1} | s',a' \right]\\\\ &=\displaystyle \sum_{s',r} P(s',r|s,a) \left[ r + \gamma \sum_{a'} \pi(a'|s') Q_{\pi}(s',a') \right]\end{array}

简言之,QQ 是一个递归定义的函数,通过对 QQ 的期望计算,可以逐步逼近最优动作值函数 QQ_*,从而找到最优策略 π\pi_*。寻找最优策略主要有两种方法:

  • 动态规划:分为值迭代和策略迭代,需要已知完整的环境模型(状态转移概率和奖励函数);
  • 强化学习:不需要已知环境模型,通过与环境交互来学习最优策略,主要包括值函数方法(如 QQ 学习)和策略方法(如策略梯度方法)。

# 动态规划 (Dynamic Programming, DP)

动态规划 (Dynamic Programming, DP) 假设了理想概率模型:

  • 已知完整的环境模型,包括状态转移概率 P(ss,a)P(s'|s,a) 和奖励函数 R(s,a,s)R(s,a,s')
  • 模型具有 Markov 性质,即未来状态仅依赖于当前状态和动作。

它通过迭代更新状态值函数或动作值函数,逐步逼近最优值函数,从而找到最优策略。主要方法包括值迭代和策略迭代。

# 策略迭代 (Policy Iteration)

策略迭代 (Policy Iteration) 包括两个主要步骤:给定策略 π\pi,计算其对应的状态值函数 Vπ(s)V_{\pi}(s)(策略评估);然后通过改进策略 π\pi,选择在每个状态下能够最大化动作值函数 Qπ(s,a)Q_{\pi}(s,a) 的动作(策略改进)。重复这两个步骤,直到策略收敛到最优策略 π\pi_*。其中,策略评估分为两类

  • 同步评估:在每次迭代中,同时更新所有状态的值函数 Vπ(s)V_{\pi}(s),以加快收敛速度,但是需要维护整个状态空间的值函数,计算开销较大

Vk+1(s)=aAπ(as)s,rP(s,rs,a)[r+γVk(s)]V_{k+1}(s) = \sum_{a \in A} \pi(a|s) \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V_k(s') \right]

  • 就地评估:在每次迭代中,逐个更新状态的值函数 Vπ(s)V_{\pi}(s),利用最新的值函数进行计算,节省内存开销,但可能收敛速度较慢

V(s)aAπ(as)s,rP(s,rs,a)[r+γV(s)]V(s) \leftarrow \sum_{a \in A} \pi(a|s) \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V(s') \right]

同步评估的例子是,想要评估一个城市各小区的房价(状态价值),但房价相互影响,小区和邻近小区的房价会互相影响,因此需要同时一轮轮地更新所有小区的房价估计。而就地评估则是逐个小区地更新房价估计,利用最新的估计值进行计算,依次评估各小区的房价。

策略改进定理 (Policy Improvement Theorem) 表明,如果策略 π,π\pi,\pi' 满足

Qπ(s,π(s))Vπ(s),sSQ_{\pi}(s, \pi'(s)) \geq V_{\pi}(s), \quad \forall s \in S

那么新策略 π\pi' 至少与旧策略 π\pi 一样好,即

Vπ(s)Vπ(s),sSV_{\pi'}(s) \geq V_{\pi}(s), \quad \forall s \in S

贪心策略改进 (Greedy Policy Improvement) 则是通过选择在每个状态下能够最大化动作值函数 Qπ(s,a)Q_{\pi}(s,a) 的动作来改进策略:

π(s)=argmaxaAQπ(s,a)=argmaxaAs,rP(s,rs,a)[r+γVπ(s)]\pi'(s) = \arg\max_{a \in A} Q_{\pi}(s,a) =\arg\max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V_{\pi}(s') \right]

策略改进定理是在说,如果我们能找到一个新策略 π\pi',使得在每个状态 ss 下,按照新策略选择的动作在旧策略下的动作值函数 Qπ(s,π(s))Q_{\pi}(s, \pi'(s)) 至少不低于旧策略的状态值函数 Vπ(s)V_{\pi}(s),那么新策略 π\pi' 在所有状态下的表现至少不会比旧策略 π\pi 差,写成公式推导就是

Vπ(s)=Qπ(s,π(s))Qπ(s,π(s))=Vπ(s)V_{\pi}(s) = Q_{\pi}(s, \pi(s)) \leq Q_{\pi}(s, \pi'(s)) = V_{\pi'}(s)

这是不过是用 V,QV,Q 表示同一件事。

策略迭代算法的步骤如下:

  • 计算评估 Vπk(s)V_{\pi_k}(s)
  • 策略改进 πk+1(s)\pi_{k+1}(s);满足

πk+1(s)=argmaxaAQπk(s,a)=argmaxaAs,rP(s,rs,a)[r+γVπk(s)]\pi_{k+1}(s) = \arg\max_{a \in A} Q_{\pi_k}(s,a)=\arg\max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V_{\pi_k}(s') \right]

  • 重复上述步骤,直到策略收敛,即 πk+1(s)=πk(s)\pi_{k+1}(s) = \pi_k(s),此时 πk\pi_k 即为最优策略 π\pi_*

上述算法由策略改进定理保证,每次策略改进后,策略的表现至少不会变差,因此具有单调性:

Vπ0(s)Vπ1(s)Vπ2(s)Vπ(s),sSV_{\pi_0}(s) \leq V_{\pi_1}(s) \leq V_{\pi_2}(s) \leq \ldots \leq V_{\pi_*}(s), \quad \forall s \in S

对于有限状态、有限动作的 MDP,由单调有界收敛定理,知道策略迭代会在有限次稳定到达最优策略 π\pi_*

策略迭代的局限性也是显而易见的,比如在博弈环境中,环境的动态性和不确定性使得状态转移概率和奖励函数难以准确建模,因此无法直接应用策略迭代方法。此外,策略迭代需要维护整个状态空间的值函数,对于大规模状态空间的问题,计算和存储开销较大,难以实际应用。

# 值迭代 (Value Iteration)

策略迭代通过优化动作值函数 Q(s,a)Q(s,a),从而提升状态值函数 V(s)V(s),最终找到最优策略 π\pi_*。相比之下,值迭代 (Value Iteration) 直接通过优化状态值函数 V(s)V(s) 来找到最优策略 π\pi_*。它结合了策略评估和策略改进的步骤,通过迭代更新状态值函数,逐步逼近最优值函数 V(s)V_*(s)。值迭代的更新公式为:

Vk+1(s)=maxaAs,rP(s,rs,a)[r+γVk(s)]V_{k+1}(s) = \max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V_k(s') \right]

将其作为一个算子表示,即 Bellman 最优化算子 (Bellman Optimality Operator)

Vk+1=TVk,TV(s)=maxaAs,rP(s,rs,a)[r+γV(s)]V_{k+1} = \mathcal{T} V_k, \quad \mathcal{T} V(s) = \max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V(s') \right]

注意这个算子作用在 VkV_k 上,是一个向量到向量的映射。在值迭代的过程中,可以优化策略 πk\pi_k,通过选择在每个状态下能够最大化当前状态值函数的动作来更新策略:

πk(s)=argmaxaAs,rP(s,rs,a)[r+γVk(s)]\pi_k(s) = \arg\max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V_k(s') \right]

Bellman 最优方程告诉我们,在最优情形下,最优状态值函数和最优动作值函数之间的关系为

V(s)=maxaAQ(s,a)V_{*}(s) = \max_{a \in A} Q_{*}(s,a)

所以,通过反复选取预期回报最大的动作,作为状态值函数的更新依据,意思就是说希望在此处决策是采用最大预期回报的动作,自然当前状态下的预期回报就是最大回报(最大动作值函数)。

Bellman 最优化算子 T\mathcal{T} 具有收缩映射 (contraction mapping) 的性质,即对于任意两个状态值函数 VVUU,都有

TVTUγVU\| \mathcal{T} V - \mathcal{T} U \|_{\infty} \leq \gamma \| V - U \|_{\infty}

其中,\| \cdot \|_{\infty} 表示无穷范数,γ\gamma 是折扣因子,满足 0γ<10 \leq \gamma < 1。这是因为

TVTU=maxsSTV(s)TU(s)=maxsSmaxaAs,rP(s,rs,a)[r+γV(s)]maxaAs,rP(s,rs,a)[r+γU(s)]=maxsSmaxaAs,rP(s,rs,a)γV(s)maxaAs,rP(s,rs,a)γU(s)maxsSmaxaAs,rP(s,rs,a)γV(s)s,rP(s,rs,a)γU(s)=maxsSmaxaAs,rP(s,rs,a)γ(V(s)U(s))maxsSmaxaAs,rP(s,rs,a)γV(s)U(s)=γmaxsSV(s)U(s)=γVU\begin{array}{ll} \| \mathcal{T} V - \mathcal{T} U \|_{\infty} &=\displaystyle \max_{s \in S} | \mathcal{T} V(s) - \mathcal{T} U(s) |\\\\ &=\displaystyle \max_{s \in S} \left| \max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma V(s') \right] - \max_{a \in A} \sum_{s',r} P(s',r|s,a) \left[ r + \gamma U(s') \right] \right|\\\\ &\displaystyle =\max_{s \in S} \left| \max_{a \in A} \sum_{s',r} P(s',r|s,a) \gamma V(s') -\max_{a \in A} \sum_{s',r} P(s',r|s,a) \gamma U(s') \right|\\\\ &\displaystyle \leq \max_{s \in S} \max_{a \in A} \left| \sum_{s',r} P(s',r|s,a) \gamma V(s') - \sum_{s',r} P(s',r|s,a) \gamma U(s') \right|\\\\ &\displaystyle =\max_{s \in S} \max_{a \in A} \left| \sum_{s',r} P(s',r|s,a) \gamma (V(s') - U(s')) \right|\\\\ &\displaystyle \leq \max_{s \in S} \max_{a \in A} \sum_{s',r} P(s',r|s,a) \gamma |V(s') - U(s')|\\\\ &\displaystyle =\gamma \max_{s' \in S} |V(s') - U(s')|\\\\ &=\gamma \| V - U \|_{\infty}\end{array}

其中第一步放缩是因为,考虑 aaUU 的最优动作,那么它也可能不是 VV 的最优动作,因此取最大值时会有差异;考虑是 VV 的最优动作也是同理的,最后可以取两者的最大值,从而得到不等式。之后,根据 Banach 不动点定理,收缩映射在完备度量空间中存在唯一不动点,并且通过迭代应用该映射可以收敛到该不动点。因此,值迭代算法通过反复应用 Bellman 最优化算子 T\mathcal{T},能够保证状态值函数 VkV_k 收敛到最优状态值函数 VV_*

limkVk=V,VkVγk1γV1V0\lim_{k \to \infty} V_k = V_*,\quad \|V_k - V_*\|_{\infty} \leq \frac{\gamma^k}{1-\gamma} \|V_1 - V_0\|_{\infty}

Q 值动态规划 (Q-Value Dynamic Programming) 分为两类,它们用来进行策略评估,通过迭代的方法来逼近动作值函数 QπQ_{\pi},为后续的策略改进提供依据:

  • Q - 值策略迭代 (Q-Value Policy Iteration):类似于策略迭代,但直接操作动作值函数 Q(s,a)Q(s,a),其中策略 π\pi 是固定的:

Qk+1(s,a)=s,rP(s,rs,a)[r+γaπ(as)Qk(s,a)]Q_{k+1}(s,a) = \sum_{s',r} P(s',r|s,a) \left[ r + \gamma \sum_{a'} \pi(a'|s') Q_k(s',a') \right]

这用来评估当前策略 π\pi 的动作值函数,先固定 π\pi,然后通过迭代更新 QQ 来逼近 QπQ_{\pi}(真实值),然后在以此为基础进行策略改进,一般是贪婪策略改进:

π(s)=argmaxaAQk(s,a)\pi'(s) = \arg\max_{a \in A} Q_k(s,a)

  • Q - 值值迭代 (Q-Value Value Iteration):类似于值迭代,但直接操作动作值函数 Q(s,a)Q(s,a)

Qk+1(s,a)=s,rP(s,rs,a)[r+γmaxaQk(s,a)]Q_{k+1}(s,a) = \sum_{s',r} P(s',r|s,a) \left[ r + \gamma \max_{a'} Q_k(s',a') \right]

同样是用到了 Bellman 最优方程的思想,通过迭代更新 QQ 来逼近最优动作值函数 QQ_*,上述过程也可以类似地证明是一个收缩映射,从而保证收敛到最优动作值函数 QQ_*

总结一下,强化学习中的动态规划,用到的数学基础为:

  • Markov 决策过程 (MDP) (S,A,P,R,γ)(S, A, P, R, \gamma)
  • Bellman 方程:

{Vπ(s)=Eπ[r+γVπ(s)]V(s)=maxaE[r+γV(s)]\begin{cases}V_{\pi}(s) =\mathbb E_\pi[r+\gamma V_\pi(s')]\\\\ V_*(s) =\displaystyle \max_a \mathbb E[r+\gamma V_*(s')]\end{cases}

  • 动态规划算法:
    • 策略评估:计算 VπV_\pi,通过 Vk+1=TVkV_{k+1}=TV_k
    • 策略迭代:评估 VπV_\pi,改进 π\pi(一般是贪心);
    • 值迭代:直接更新 VV,逼近 VV_*,通过 Vk+1=TVkV_{k+1}=TV_k
  • 数学保证:
    • 收缩映射性质,Banach 不动点定理,保证收敛性和唯一性;
    • 单调有界收敛定理,保证策略迭代的单调性和最终收敛到最优策略。

冻酸奶超市问题 (Frozen Yogurt Shop Problem) 是一个经典的强化学习问题。在这个问题中,智能体需要管理一个冻酸奶超市的库存和定价策略,以最大化利润。具体情形如下:

  • 状态空间 SS:表示超市的库存水平,其中 s{0,1,2,3,4,5}s\in \{0,1,2,3,4,5\}
  • 动作空间 AA:表示智能体可以采取补货决策,其中 a{0,1,2}a\in \{0,1,2\},分别对应不同补货数量;
  • 最大库存限制为 55 单位;
  • 需求 dd 服从分布 {0,1,2,3}\{0,1,2,3\},表示每天的顾客需求量;
  • 开销为
    • 售价为每单位 2020
    • 补货成本为每单位 1212
    • 库存持有成本为每单位 22
    • 缺货惩罚为每单位 55

目标是找到最优的补货策略 π\pi^*,使得在长期内最大化超市的利润。可以列出方程:

  • 库存更新方程:s=max(0,min(5,s+ad))s' = \max(0,\min(5, s + a - d))
  • 奖励函数:

r(s,a,d)=20min(s+a,d)12a2s5max(0,d(s+a))r(s,a,d)=20 \min (s+a,d) - 12 a - 2 s - 5 \max(0,d - (s + a))

  • 需求分布:

P(d=0)=0.1,P(d=1)=0.3,P(d=2)=0.4,P(d=3)=0.2P(d=0)=0.1, \quad P(d=1)=0.3, \quad P(d=2)=0.4, \quad P(d=3)=0.2

  • MDP 参数:γ=0.9,θ=0.001\gamma=0.9,\ \theta=0.001

# Q - 学习 (Q-Learning)

QQ - 学习 (Q-Learning) 是一种基于值函数的强化学习算法。我们将所有的 QQ 值存储在一个表格中,称为 QQ - 表 (QQ-Table),其中每个条目 Q(s,a)Q(s,a) 表示在状态 ss 下采取动作 aa 所能获得的预期累积奖励。智能体通过与环境交互,不断更新 Q 表,以逼近最优动作值函数 Q(s,a)Q_*(s,a)。Q 学习的核心更新公式为:

  • Qt(st,at)Q_t(s_t,a_t) 是在时间步 (time step),即与环境交互的第 tt 步时刻,状态 sts_t 下采取动作 ata_t 的动作值;
  • Qt+1(st,at)Q_{t+1}(s_t,a_t) 是更新后的动作值;

QQ - 学习的更新公式为:

Q(st,at)Q(st,at)+α[rt+γmaxaQ(st+1,a)Q(st,at)]Q(s_t,a_t)\leftarrow Q(s_t,a_t) + \alpha\left[ r_{t} + \gamma \max_{a} Q(s_{t+1},a) - Q(s_t,a_t) \right]

其中 α\alpha 是学习率,控制更新步长,rtr_t 是在时间步 tt 获得的即时奖励,γ\gamma 是折扣因子。注意时间步和更新时刻的区别,虽然它们在实际应用中通常是同步的,但在某些情形下可能存在延迟。

QQ - 学习的更新公式推导如下。从当前的 QQ - 表出发,在 tt 时刻,智能体处于状态 sts_t,采取动作 ata_t,获得即时奖励 rtr_t,并转移到下一个状态 st+1s_{t+1}。我们希望做出最大化未来回报的决策,因为决策是一个概率过程(动态过程),因此选取总是存在误差:

Δ=(rt+γmaxaQ(st+1,a))Q(st,at)\Delta =(r_t+\gamma \max_{a} Q(s_{t+1},a)) - Q(s_t,a_t)

这里的 Δ\Delta 就是时序差分误差 (Temporal Difference Error),表示当前估计与目标值之间的差异。通过调整当前的 Q(st,at)Q(s_t,a_t),使其更接近目标值 rt+γmaxaQ(st+1,a)r_t + \gamma \max_{a} Q(s_{t+1},a),从而逐步逼近最优动作值函数 Q(s,a)Q_*(s,a)。具体地,设置学习率 α\alpha,控制每次更新的步长,最终得到 QQ - 学习的更新公式:

Q(st,at)Q(st,at)+α[rt+γmaxaQ(st+1,a)Q(st,at)]Q(s_t,a_t)\leftarrow Q(s_t,a_t) + \alpha\left[ r_{t} + \gamma \max_{a} Q(s_{t+1},a) - Q(s_t,a_t) \right]

QQ - 学习通过当前的估计值更新另一个估计值,看似可能会导致自举偏差 (self-fulfilling bias),即估计值受到自身误差的影响,从而导致估计值偏离真实值。但 QQ - 学习的映射是一个收缩映射,不同的 QQ,或者说 QQ 表格之间的距离会逐步缩小,最终收敛到唯一的最优动作值函数 QQ_*。具体地,定义 QQ - 学习的更新算子如上。

此外,学习率应该保持适当的衰减,以确保收敛性。通常要求满足以下条件:

  • t=0αt(s,a)=\sum_{t=0}^{\infty} \alpha_t(s,a) = \infty,确保每个状态 - 动作对被充分更新;
  • t=0αt2(s,a)<\sum_{t=0}^{\infty} \alpha_t^2(s,a) < \infty,防止更新过度震荡。

QQ - 学习的局限性是:

  • 离散的状态和动作空间,不利于计算,并且高维度还会带来维度灾难问题;
  • 对复杂的环境建模能力有限;
  • 需要处理每一对状态 - 动作对,存储开销大;
  • 不能归纳未见过的状态(泛化能力差)。

深度 QQ - 网络 (Deep QQ-Network, DQN) 是一种结合深度学习和 QQ - 学习的强化学习算法,主要应用深度神经网络来辅助 QQ - 学习。核心动机是因为 QQ - 学习的基础是 QQ - 表,可以看作是一个查找表格,但在大规模状态空间中,QQ - 表的存储和更新变得不可行。DQN 通过使用深度神经网络来近似动作值函数,可以较为容易处理高维空间中的特征(共性),泛化学习到未见过的状态,更高效地表达复杂的环境。它通过

  • 设立 QQ - 函数:Q(s,a;θ)Q(s,a;\theta),其中 θ\theta 是神经网络的参数;
  • QQ - 学习的更新公式应用于神经网络的参数更新(更新 θ\theta 就是在更新 QQ - 函数,就是在更新 QQ - 表,逼近 QQ_*),更新是通过最小化损失函数来进行反向传播的:

L(θ)=E(s,a,r,s)D[(r+γmaxaQ(s,a;θ)Q(s,a;θ))2]L(\theta)=\mathbb E_{(s,a,r,s')\sim D} \left[ \left( r + \gamma \max_{a'} Q(s',a';\theta^-) - Q(s,a;\theta) \right)^2 \right]

其中 θ\theta 是当前网络的参数,θ\theta^- 是下一层网络(目标网络,后面会提到)的参数,DD经验回放缓冲区 (Experience Replay Buffer),用于存储智能体与环境交互的经验样本,打破数据之间的相关性,提高训练的稳定性。

一般而言,深度学习辅助 QQ - 学习的实现也十分困难,因为

  • 神经网络是非线性函数逼近器,可能会引入不稳定性和发散问题;
  • 观测的数据具有序列相关性,违反了独立同分布 (i.i.d.) 假设,影响训练效果;
  • QQ - 值估计会变得不稳定,目标值随着网络参数的更新而变化,导致训练过程不稳定。

为此,DQN 引入了经验回放和目标网络等技术来缓解这些问题,从而提高训练的稳定性和效果:

  • 经验回放 (Experience Replay):将智能体与环境交互的经验存储在一个缓冲区中,随机采样小批量数据进行训练,打破数据之间的相关性,提高训练的稳定性。
  • 目标网络 (Target Network):引入一个独立的目标网络,用于计算目标值 r+γmaxaQ(s,a;θ)r + \gamma \max_{a'} Q(s',a';\theta^-),并定期将当前网络的参数 θ\theta 复制到目标网络 θ\theta^-,从而稳定目标值的计算。
  • 梯度裁剪 (Gradient Clipping):限制梯度的最大值,防止梯度爆炸,提高训练的稳定性。

目标网络综合了当前网络的学习成果,也兼顾历史稳定性,当目标网络更新比主网络慢时,在一段时间内,主网络 Q(s,a;θ)Q(s,a;\theta) 就会有一个稳定的学习目标,减少了由于网络参数频繁变化带来的不稳定性。

如果不加目标网络,更新就是硬更新,即每次都用最新的网络参数来计算目标值:

θθ\theta^-\leftarrow \theta

而有了目标网络后,更新变成软更新,即每次只更新一小部分:

θτθ+(1τ)θ\theta^- \leftarrow \tau \theta + (1-\tau) \theta^-

其中 τ\tau 是一个小的正数,通常取值在 0.0010.0010.010.01 之间。

# 策略方法 (Policy-Based Methods)

在策略方法中,我们直接对策略 π(as;θ)\pi(a|s;\theta) 进行参数化,使用参数 θ\theta 来表示策略的行为。目标是通过优化参数 θ\theta,使得策略在长期内获得的累积奖励最大化。具体地,定义目标函数为期望累积奖励:

J(θ)=Eπθ[Gt]J(\theta) = \mathbb{E}_{\pi_\theta} \left[ G_t \right]

则我们要找的最佳参数为:

θ=argmaxθJ(θ)\theta^* = \arg\max_{\theta} J(\theta)

使用参数化有以下优点:

  • 通用性:可以表示复杂的策略,适用于大规模状态空间;
  • 紧凑性:通过参数化减少存储需求;
  • 可微性:便于使用梯度下降等优化方法进行训练。

策略梯度定理 (Policy Gradient Theorem) 提供了计算目标函数 J(θ)J(\theta) 关于参数 θ\theta 的梯度的方法。重新表述 J(θ)J(\theta),可以写成对轨迹 τ\tau 的期望:

J(θ)=Eτπθ[R(τ)]=Eτπθ[t=0Trt(τ)]J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right]=\mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} r_t(\tau) \right]

它表明,目标函数的梯度可以表示为:

θJ(θ)=Eτπθ[t=0Tθlogπθ(atst)Gt]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_\theta(a_t|s_t) G_t \right]

其中,τ\tau 表示一条轨迹(服从策略 πθ\pi_\theta 生成的状态 - 动作序列,因为 πθ\pi_\theta 是一个概率分布),TT 是轨迹的长度,GtG_t 是从时间步 tt 开始的累积奖励 Gt=k=tTγktrkG_t=\sum^T_{k=t} \gamma^{k-t} r_k。这个公式表明,我们可以通过采样轨迹来估计梯度,从而更新策略参数 θ\theta

Monte Carlo 策略梯度方法 (Monte Carlo Policy Gradient Methods) 是一种基于策略梯度定理的强化学习算法。它通过采样完整的轨迹来估计梯度,从而更新策略参数 θ\theta。具体步骤如下:

  • 采样轨迹:根据当前策略 πθ\pi_\theta 与环境交互,生成一条完整的轨迹

τ=(s0,a0,r0,s1,a1,r1,,sT)\tau = (s_0, a_0, r_0, s_1, a_1, r_1, \ldots, s_T)

  • 计算累积奖励:对于每个时间步 tt,计算从时间步 tt 开始的累积奖励

Gt=k=tTγktrkG_t = \sum_{k=t}^{T} \gamma^{k-t} r_k

  • 对数概率梯度:计算每个时间步 tt 的对数概率梯度 θlogπθ(atst)\nabla_{\theta} \log \pi_\theta(a_t|s_t)

    • 对于离散型,使用 softmax 函数来参数化策略:

    πθ(as)=eθTϕ(s,a)aeθTϕ(s,a)θlogπθ(as)=ϕ(s,a)aπθ(as)ϕ(s,a)\pi_\theta(a|s) = \frac{e^{\theta^T\phi(s,a)}}{\sum_{a'} e^{\theta^T\phi(s,a')}}\implies \nabla_{\theta} \log \pi_\theta(a|s) = \phi(s,a) - \sum_{a'} \pi_\theta(a'|s) \phi(s,a')

    • 对于连续型,使用 Gaussian 分布来参数化策略:

    πθ(as)=N(μθ(s),σ2)θlogπθ(as)=aμθ(s)σ2θμθ(s)\pi_\theta(a|s) = \mathcal N(\mu_\theta(s),\sigma^2)\implies \nabla_{\theta} \log \pi_\theta(a|s) = \frac{a - \mu_\theta(s)}{\sigma^2} \nabla_{\theta} \mu_\theta(s)

  • 估计梯度:使用采样的轨迹来估计目标函数的梯度:

    • 对于单个轨迹 τ\tau,梯度估计为:

    θJ(θ)g=g(τ)=t=0Tθlogπθ(atst)Gt\nabla_{\theta} J(\theta) \approx g=g(\tau)= \sum_{t=0}^{T} \nabla_{\theta} \log \pi_\theta(a_t|s_t) G_t

    • 对于多个轨迹 {τi}i=1N\{\tau_i\}_{i=1}^N,梯度估计为:

    θJ(θ)g=1Ni=1Ng(τi)=1Ni=1Nt=0Tθlogπθ(atisti)Gti\nabla_{\theta} J(\theta) \approx g=\frac{1}{N} \sum_{i=1}^{N} g(\tau_i)= \frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T} \nabla_{\theta} \log \pi_\theta(a_t^i|s_t^i) G_t^i

  • 更新参数:初始化梯度 g0=0g_0=0,用上述计算好的 gg 累加到 g0g_0 上,然后使用梯度上升法更新策略参数,其中 α\alpha 是学习率:

θθ+αg\theta \leftarrow \theta + \alpha g

  • 重复上述步骤,不断采样,计算梯度并更新参数,直到策略收敛或达到预定的训练轮数。

下面给出梯度定理的证明推导。

  • 对 Bellman 期望方程两边对 θ\theta 求导,展开:

θVπθ(s)=θaπθ(as)Qπθ(s,a)=a[θπθ(as)Qπθ(s,a)+πθ(as)θQπθ(s,a)]=aθπθ(as)Qπθ(s,a)+γaπθ(as)sP(ss,a)θVπθ(s)\begin{array}{ll} \displaystyle \nabla_{\theta} V_{\pi_\theta}(s)&=\displaystyle \nabla_{\theta} \sum_{a} \pi_\theta(a|s) Q_{\pi_\theta}(s,a)\\\\ &=\displaystyle \sum_{a} \left[ \nabla_{\theta} \pi_\theta(a|s) Q_{\pi_\theta}(s,a) + \pi_\theta(a|s) \nabla_{\theta} Q_{\pi_\theta}(s,a) \right] \\ \\ &=\displaystyle \sum_{a} \nabla_{\theta} \pi_\theta(a|s) Q_{\pi_\theta}(s,a) + \gamma \sum_{a} \pi_\theta(a|s) \sum_{s'} P(s'|s,a) \nabla_{\theta} V_{\pi_\theta}(s')\end{array}

  • 定义在策略 πθ\pi_\theta 下的转移概率:

P(ss;1,πθ)=aπθ(as)P(ss,a)P(s\to s';1,\pi_\theta) = \sum_{a} \pi_\theta(a|s) P(s'|s,a)

  • 代入上式,得到:

θVπθ(s)=aθπθ(as)Qπθ(s,a)+γsP(ss;1,πθ)θVπθ(s)\nabla_{\theta} V_{\pi_\theta}(s) = \sum_{a} \nabla_{\theta} \pi_\theta(a|s) Q_{\pi_\theta}(s,a) + \gamma \sum_{s'} P(s\to s';1,\pi_\theta) \nabla_{\theta} V_{\pi_\theta}(s')

  • 递归展开上式,得到:

θVπθ(s)=k=0γksP(ss;k,πθ)aθπθ(as)Qπθ(s,a)\nabla_{\theta} V_{\pi_\theta}(s) = \sum_{k=0}^{\infty} \gamma^k \sum_{s'} P(s\to s';k,\pi_\theta) \sum_{a} \nabla_{\theta} \pi_\theta(a|s') Q_{\pi_\theta}(s',a)

其中, P(ss;k,πθ)P(s\to s';k,\pi_\theta) 表示在策略 πθ\pi_\theta 下,从状态 ss 出发经过 kk 步转移到状态 ss' 的概率,定义为

P(ss;k,πθ)=s1,,sk1i=0k1P(si+1si,ai)πθ(aisi)P(s\to s';k,\pi_\theta) = \sum_{s_1,\ldots,s_{k-1}} \prod_{i=0}^{k-1} P(s_{i+1}|s_i,a_i) \pi_\theta(a_i|s_i)

  • 定义折扣状态访问分布 (Discounted State Visitation Distribution)

dπθ(s)=s0p(s0)k=0γkP(s0s;k,πθ)d_{\pi_\theta}(s) = \sum_{s_0}p(s_0) \sum_{k=0}^{\infty} \gamma^k P(s_0 \to s;k,\pi_\theta)

其中,p(s0)p(s_0) 是初始状态分布。折扣状态访问分布表示在策略 πθ\pi_\theta 下,状态 ss 在整个轨迹中被访问的频率,考虑了折扣因子 γ\gamma 的影响。回忆目标函数的定义,我们可以从轨迹的开头进行分类:

θJ(θ)=θsp(s0=s)Vπθ(s)=sp(s0=s)θVπθ(s)=sp(s0=s)k=0γksP(ss;k,πθ)aθπθ(as)Qπθ(s,a)=s[sp(s0=s)k=0γkP(ss;k,πθ)]aθπθ(as)Qπθ(s,a)=sdπθ(s)aθπθ(as)Qπθ(s,a)=Esdπθ,aπθ[θlogπθ(as)Qπθ(s,a)]\begin{array}{ll} \nabla_{\theta} J(\theta) &= \displaystyle \nabla_{\theta} \sum_{s} p(s_0=s) V_{\pi_\theta}(s)\\\\ &= \displaystyle \sum_{s} p(s_0=s) \nabla_{\theta} V_{\pi_\theta}(s)\\\\ &= \displaystyle \sum_{s} p(s_0=s) \sum_{k=0}^{\infty} \gamma^k \sum_{s'} P(s\to s';k,\pi_\theta) \sum_{a} \nabla_{\theta} \pi_\theta(a|s') Q_{\pi_\theta}(s',a)\\\\ &= \displaystyle \sum_{s'} \left[ \sum_{s} p(s_0=s) \sum_{k=0}^{\infty} \gamma^k P(s\to s';k,\pi_\theta) \right] \sum_{a} \nabla_{\theta} \pi_\theta(a|s') Q_{\pi_\theta}(s',a)\\\\ &= \displaystyle \sum_{s'} d_{\pi_\theta}(s') \sum_{a} \nabla_{\theta} \pi_\theta(a|s') Q_{\pi_\theta}(s',a)\\ \\&= \displaystyle \mathbb{E}_{s \sim d_{\pi_\theta}, a \sim \pi_\theta} \left[ \nabla_{\theta} \log \pi_\theta(a|s) Q_{\pi_\theta}(s,a) \right]\end{array}

这是状态 - 动作对的期望形式。如果按轨迹进行分类,可以得到轨迹的期望形式:

θJ(θ)=Eτπθ[t=0γtθlogπθ(atst)Qπθ(st,at)]=Eτπθ[t=0θlogπθ(atst)Gt]\begin{array}{ll}\displaystyle \nabla_{\theta} J(\theta) &= \displaystyle \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{\infty} \gamma^t\nabla_{\theta} \log \pi_\theta(a_t|s_t) Q_{\pi_\theta}(s_t,a_t) \right]\\\\ &= \displaystyle \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{\infty} \nabla_{\theta} \log \pi_\theta(a_t|s_t) G_t \right]\end{array}

这是在说,每条轨迹的第 tt 步,处于状态 sts_t,采取动作 ata_t,其对数概率的梯度贡献为第一行式子,而另一方面

Eτ[θlogπθ(atst)Qπθ(st,at)]=Eτ[θlogπθ(atst)Est,at[Gtst,at]]=Est,at[Est,at[θlogπθ(atst)Gtst,at]]=Est,at[θlogπθ(atst)Gt]=Eτ[θlogπθ(atst)Gt]\begin{array}{ll}\mathbb E_{\tau}[\nabla_{\theta} \log \pi_\theta(a_t|s_t) Q_{\pi_\theta}(s_t,a_t)]&=\mathbb E_{\tau}[\nabla_{\theta} \log \pi_\theta(a_t|s_t) \mathbb E_{s_t,a_t}[G_t|s_t,a_t]]\\\\ &=\mathbb E_{s_t,a_t}[\mathbb E_{s_t,a_t}[\nabla_{\theta} \log \pi_\theta(a_t|s_t) G_t|s_t,a_t]]\\\\ &=\mathbb E_{s_t,a_t}[\nabla_{\theta} \log \pi_\theta(a_t|s_t) G_t]\\ \\ &=\mathbb E_{\tau}[\nabla_{\theta} \log \pi_\theta(a_t|s_t) G_t]\end{array}

这用到了重期望原理 (Law of Total Expectation),即条件期望的期望等于总体期望。