《强化学习的数学原理》九到十学习随笔

太棒了!这门《强化学习的数学原理》确实非常硬核,你的“边敲字边理解”是非常有效的沉浸式学习方法。针对你新增的 DPG(确定性策略梯度) 内容,我为你重新生成了一版完整且结构清晰的学习笔记。

所有的数学公式均已采用 MathJax 3 格式,并严格按照要求单独成行展示。文章末尾也按你的要求,用小字保留了你的原始输入。


强化学习的数学原理:学习笔记

课程来源:bilibili 西湖大学 WindyLab【强化学习的数学原理】从零开始到透彻理解
当前进度:第九课(策略梯度方法)、第十课(Actor-Critic 方法)

第九课:策略梯度方法 (Policy Gradient)

本课的核心在于:当我们要引入神经网络来近似策略时,首先必须要有明确的目标函数。

1. 目标函数的定义

课程介绍了两个核心目标函数,并推导了在折扣因子 \(\gamma < 1\) 时的数学联系:

  • 平均状态价值

\[\bar{v}_{\pi} \]

  • 平均奖励

\[\bar{r}_{\pi} \]

2. 关于分布 \(d\) 的选取(核心解惑)

在目标函数的推导中,初始状态分布 \(d(s)\) 的选取非常关键:

  • 工程与理论的矛盾:理论上存在一个统一的最优分布,但实际求解时,不同的 \(d\) 容易让算法陷入不同的局部最优。如果让 \(d\) 取平均或者只取单一的起点,在计算梯度的工程实现上会非常困难。
  • 巧妙的解决方案:让 \(d\) 符合目标策略 \(\pi\) 的平稳分布。这样做不仅在逻辑上合理,而且在梯度推导中可以顺理成章地将 \(d\) 消除。
  • 状态分布的推导:由于 \(d\) 理论上可以任意选取,所以经过一步转移后的真实状态分布 \(\rho(s)\) 应当写为:

\[\rho(s) = \sum_{s'} d(s') \Pr_{\pi}(s|s') \]

3. 梯度求解与 REINFORCE 算法

将梯度求解转化为可以通过采样来近似估算梯度的形式(目前仍在离散动作空间下)。
在此时的梯度公式中,需要用到动作价值函数 \(q(s,a)\),我们可以使用蒙特卡洛 (Monte Carlo) 的方式进行估计,这就引出了 REINFORCE 算法:

\[\text{蒙特卡洛估计 } q(s,a) \longrightarrow \text{Actor} \]

(注:课程随后还介绍了当前梯度求解中“自平衡更新步长”的优良性质。)


第十课:Actor-Critic 方法

本课正式引入 Actor-Critic 架构。其中:

  • Actor (演员):负责策略更新。
  • Critic (评论家):负责计算状态或动作的价值。

1. QAC (Q-Value Actor-Critic)

分别对值函数和策略函数做近似。
用值函数近似的 Sarsa 算法来代替蒙特卡洛估计 \(q(s,a)\)。信息流向为:

\[\text{Critic (输出动作价值)} \longrightarrow \text{Actor} \]

2. A2C (Advantage Actor-Critic)

(注:原笔记写为 ACA,通常称为 A2C)
引入基线 \(b(s)\),开发出优势函数 (Advantage Function) \(\delta(s,a)\),目的是减小梯度方差。此时不再使用动作价值 \(q(s,a)\),转而使用状态价值 \(v(s)\) 来计算梯度。信息流向变为:

\[\text{TD error} \longrightarrow \text{Critic (输出状态价值)} \longrightarrow \text{Actor} \]

3. Off-Policy 与重要性采样 (Importance Sampling)

在 Off-Policy(离线策略)下,由于我们需要用行为策略 \(\beta\) 去优化目标策略 \(\pi\),因此引入重要性采样。
重要性采样的核心逻辑

\[\mathbb{E}_{X \sim p_0}[X] = \sum p_0(X)X = \sum p_1(X) \left( \frac{p_0(X)}{p_1(X)} \right) X = \sum p_1(X)F(X) = \mathbb{E}_{X \sim p_1}[F(X)] \approx \bar{f} \]

通过这种方式,我们只需通过采样即可近似求解原分布下的期望 \(f\)

4. 为什么要修改 Off-Policy 的目标函数?(硬核推导)

如果依然使用原本的目标函数:

\[J = \sum_s d_{\pi}(s) v_{\pi}(s) \]

其梯度的展开式为:

\[\nabla J = \sum_s \sum_a \rho_{\pi}(s) \pi(a|s,\theta) \nabla \ln \pi(a|s,\theta) q_{\pi}(s,a) \]

写成期望形式(令 \(x = \nabla \ln \pi(a|s,\theta) q_{\pi}(s,a)\)):

\[\nabla J = \mathbb{E}_{\pi} \left[ \nabla \ln \pi(a|s,\theta) q_{\pi}(s,a) \right] \]

如果我们对上式强行使用重要性采样,且令:

\[p_0 = \rho_{\pi}(s)\pi(a|s,\theta) \]

\[p_1 = \rho_{\beta}(s)\beta(a|s) \]

则最终需要采样的函数 \(f(x) = \frac{p_0}{p_1}x\) 会变成:

\[f(x) = \frac{\rho_{\pi}(s)\pi(a|s,\theta)}{\rho_{\beta}(s)\beta(a|s)} \nabla \ln \pi(a|s,\theta) q_{\pi}(s,a) \]

工程痛点:要采样 \(f(x)\),就必须要计算状态分布的比值 \(\rho_{\pi}(s)\)\(\rho_{\beta}(s)\)。但在工程上,计算极其复杂的状态分布是无法求解的!

解决思路:更改目标函数!
如果采用以 \(\beta\) 策略分布为基底的目标函数:

\[J = \sum_s d_{\beta}(s) v_{\pi}(s) \]

经过推导,最后需要采样的 \(f(x)\) 将巧妙地避开状态分布比值,化简为:

\[f(x) = \frac{\pi(a|s,\theta)}{\beta(a|s)} \nabla \ln \pi(a|s,\theta) q_{\pi}(s,a) \]

这个只包含“动作概率比值”的式子,在工程上是完全可解的。

5. DPG (Deterministic Policy Gradient)

DPG(确定性策略梯度)专门用来处理动作是连续且有无限个的情况。

  • 特性:天然属于 Off-Policy 方法,且不需要重要性采样操作,依然能够求出梯度。
  • 信息流向

\[\text{TD error} \longrightarrow \text{Actor 策略更新} \longrightarrow \text{Critic 价值更新} \]



原文附录:
“我正在学习bilibili,西湖大学WindyLab【强化学习的数学原理】课程:从零开始到透彻理解(完结)

到第九课和第十课,理解不精,通过边敲字边理解,整理。

第九课讲策略梯度方法,第十课讲Actor-Critic方法(QAC,A2C,重要性采样,策略离线的Actor-Critic,DPG)。

第九课
**首先要用神经网络,我们就要有目标函数。
**第九课介绍了两个目标函数,一个是平均状态价值vΠbar,一个是平均奖励rΠbar。介绍了他们各自多种的表达式,说明了vΠbar和rΠbar在γ<1下的联系。

**不明白分布d的选取。
解决:让d符合策略Π的分布,于是梯度推导中可以消除d,而且合理;d取平均或只有起点,梯度工程上难以实现。虽然理论上有统一的最优,但实际求解不同的d会容易掉进不同的局部最优。
**以及由于d理论上可以随便取,所以d(S)*Pr_Π(S'|S)=ρ(S)才是状态分布

接着介绍了梯度求解,将其转化成我们可以通过采样来近似估算梯度的形式,现在还是离散的动作输出。

此时的梯度式子中要使用q(s,a),则我们可以使用蒙特卡洛的方式估计,REINFORCE
蒙特卡洛估计q(s,a)->Actor
介绍了一下当前梯度求解中自平衡更新步长的性质

第十课
Actor角色——策略更新,Critic评论家——计算状态或动作价值

QAC,分别做值函数近似和策略函数近似,用值函数近似Sarsa代替蒙特卡洛估计q(s,t)
Critic(输出动作价值)->Actor

ACA,引入b(S),开发优势函数δ(S,A),减小梯度方差,并不再使用动作q(s,t),转而使用状态价值v(s)计算梯度
变成TD error->Critic(输出状态价值)->Actor

off-policy
重要性采样,
**E_X~p0(X)=求和p0(X)X=求和p1(X)*(p0(X)/p1(X))*X=求和p1(X)F(X)=E_x~p1(X)(F(X))约等于fbar。则可以通过采样的方式近似f。
**为什么要使用J=d_β(s)v_Π(s)呢?
**考虑原本的J=d_Π(s)v_Π(s),首先我们看展开式,nablaJ=求和_s求和_a ρ_Π(s)Π(a|s,θ)nabla(lnΠ(a|s,θ)q_Π(s,a),所以我们可以写出E[nabla(lnΠ(a|s,θ)q_Π(s,a)],所以可以使用随机梯度,那我们现在想要使用β(s|a),
那看重要性采样是E_Π[x]=p1*p0/p1*x,令f(x)=p0/p1*x,则有E_Π[x]=p1*p0/p1*x=E_β(f(x))
则我们这里p0=ρ_Π(s)Π(a|s,θ),x=nabla(lnΠ(a|s,θ)q_Π(s,a),p1=ρ_β(s)β(a|s),就会得到E[nabla(lnΠ(a|s,θ)q_Π(s,a)]=E_β(f(x)),其中f(x)={[ρ_Π(s)Π(a|s,θ)]/ρ_β(s)β(a|s)}*nabla(lnΠ(a|s,θ)q_Π(s,a),即要采样f(x),要计算ρ_Π和ρ_β,工程无法求解。
**但是采用J=d_β(s)v_Π(s),最后的采样的f(x)=[Π(a|s,θ)/β(a|s)]nabla(lnΠ(a|s,θ)q_Π(s,a)是可解的

DPG,处理动作连续有无限个的情况,天然off policy,不需要重要性采样操作,依然求出梯度,做
变成TD error->Actor策略更新->Critic价值更新”
posted @ 2026-03-21 16:15  凌霄呵呵哒  阅读(18)  评论(0)    收藏  举报