文章目录
-
- 思想:参数化策略
- [3. 最优策略定义的改变](#3. 最优策略定义的改变)
- 4.优化方法:策略梯度
- 5.难点
- [策略优化的指标 (1) ------ 平均状态价值](#策略优化的指标 (1) —— 平均状态价值)
-
- 核心定义:什么是"平均状态价值"?
- [2. 权重的选择: d ( s ) d(s) d(s) 怎么定?](#2. 权重的选择: d ( s ) d(s) d(s) 怎么定?)
- [策略优化的指标 (2) ------ 平均奖励](#策略优化的指标 (2) —— 平均奖励)
-
- [1. 核心定义:什么是"平均奖励"?](#1. 核心定义:什么是“平均奖励”?)
- [2. 另一种常见的等价表达式](#2. 另一种常见的等价表达式)
- [3. 两个重要性质 (Remarks)](#3. 两个重要性质 (Remarks))
- 4.论文中常见的第三种形式
- 策略梯度定理
-
- [1. 统一的梯度公式](#1. 统一的梯度公式)
- [2. 对数似然技巧 (Log-Likelihood Trick)](#2. 对数似然技巧 (Log-Likelihood Trick))
- [3. 这个公式的优势](#3. 这个公式的优势)
-
- 解释:
-
- [1. 为什么我们要用这个?](#1. 为什么我们要用这个?)
- [2. 这个"数学恒等式"是怎么变出来的?](#2. 这个“数学恒等式”是怎么变出来的?)
- [3. 见证奇迹:从"求和"变"期望"](#3. 见证奇迹:从“求和”变“期望”)
- [4. 伟大之处:解决了两大难题](#4. 伟大之处:解决了两大难题)
-
- [✅ 1. 可以采样 (Sampling) ------ 变"上帝"为"玩家"](#✅ 1. 可以采样 (Sampling) —— 变“上帝”为“玩家”)
- [✅ 2. 这里的 η ( s ) \eta(s) η(s) 消失了?](#✅ 2. 这里的 η ( s ) \eta(s) η(s) 消失了?)
- [5. 终极直觉:这个公式在干什么?](#5. 终极直觉:这个公式在干什么?)
- [4. 为什么要用 Softmax?](#4. 为什么要用 Softmax?)
- [REINFORCE 算法详解](#REINFORCE 算法详解)
-
- 1.公式到行动
- [2. 找替身:蒙特卡洛 (Monte Carlo) 方法](#2. 找替身:蒙特卡洛 (Monte Carlo) 方法)
- [3. REINFORCE 算法流程](#3. REINFORCE 算法流程)
- [4. 深度解析:为什么这个算法有效?](#4. 深度解析:为什么这个算法有效?)
- [5. 算法优缺点 (Key Takeaway)](#5. 算法优缺点 (Key Takeaway))
思想:参数化策略
🔄 以前 vs 现在
-
以前 (Tabular):策略 π \pi π 是一个大表格。
- 查询:查表 π ( a ∣ s ) \pi(a|s) π(a∣s)。
- 更新:直接改表格里的数字。
-
现在 (Function Approximation):策略 π \pi π 是一个函数(通常是神经网络)。
- 记号: π ( a ∣ s , θ ) \pi(a|s, \theta) π(a∣s,θ)
- θ \theta θ:策略参数 (Policy Parameters)(注意:之前的 Value Function 用 w w w 表示参数,这里用 θ \theta θ 表示策略参数)。
- 输入:状态 s s s
- 输出:动作的概率分布。
🌟 为什么要用函数表示策略?
- 处理大规模/连续空间:表格存不下,函数能搞定。
- 泛化能力 (Generalization):
- 更新参数 θ \theta θ 会同时影响很多状态的策略。
- 学会了一个状态怎么走,邻近的状态也会自动学会怎么走。
- 支持随机策略:函数天然输出概率分布,适合处理需要随机性的场景。
3. 最优策略定义的改变
这是一个根本性的变化。
- 表格型 (Tabular):
- 定义:对每一个状态 s s s,其价值 v π ( s ) v_{\pi}(s) vπ(s) 都要比其他策略高。
- 这是一个非常苛刻的逐点比较。
- 函数型 (Function Based):
- 定义:我们需要定义一个标量指标 (Scalar Metric) J ( θ ) J(\theta) J(θ)。
- 最优策略就是能让这个指标 J ( θ ) J(\theta) J(θ) 最大化 的策略。
- 我们不再纠结每一个状态是否完美,而是追求整体平均表现最好。
4.优化方法:策略梯度
一旦我们把寻找最优策略的问题转化成了 最大化目标函数 J ( θ ) J(\theta) J(θ) 的问题,数学上就变得非常简单直接了。目标:找到 θ ∗ \theta^* θ∗ 使得 J ( θ ) J(\theta) J(θ) 最大。 θ ∗ = arg max θ J ( θ ) \theta^* = \arg\max_\theta J(\theta) θ∗=argθmaxJ(θ)
方法:梯度上升 (Gradient Ascent)(因为是求最大值,所以是上升)。
θ t + 1 = θ t + α ∇ θ J ( θ t ) \theta_{t+1} = \theta_t + \alpha \nabla_\theta J(\theta_t) θt+1=θt+α∇θJ(θt)
α \alpha α:学习率。 ∇ θ J \nabla_\theta J ∇θJ:策略梯度,指引参数 θ \theta θ 往回报更高的方向调整。
5.难点
1.如何定义目标函数 J ( θ ) J(\theta) J(θ)?
- 是用平均价值?还是平均回报?还是稳态分布下的总价值?这需要严谨的定义。
2.如何计算梯度 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇θJ(θ)?
- 策略 π \pi π 变了,环境互动的轨迹分布也会变,稳态分布 d π d_\pi dπ 也会变。这使得求导看起来非常复杂。
- Policy Gradient Theorem (策略梯度定理) 将是解决这个难题的关键武器(后续视频将详细推导)。
策略优化的指标 (1) ------ 平均状态价值
核心定义:什么是"平均状态价值"?
为了评价策略 π \pi π 到底好不好,我们不能只看某一个状态,而要看"整体"表现。平均状态价值 (Average State Value),记为 v ˉ π \bar{v}_\pi vˉπ,定义为所有状态价值的加权平均:
v ˉ π = ∑ s d ( s ) ⋅ v π ( s ) \bar{v}\pi = \sum{s} d(s) \cdot v_\pi(s) vˉπ=s∑d(s)⋅vπ(s)
或者写成向量形式: v ˉ π = d T v π \bar{v}\pi = d^T v\pi vˉπ=dTvπ
- v π ( s ) v_\pi(s) vπ(s):在策略 π \pi π 下,状态 s s s 的价值(累积期望回报)。
- d ( s ) d(s) d(s):状态 s s s 的权重 (Weight)。
- 要求: d ( s ) ≥ 0 d(s) \ge 0 d(s)≥0,且 ∑ d ( s ) = 1 \sum d(s) = 1 ∑d(s)=1。
- 意义:你可以把它看作是状态 s s s 的"重要性"或者"出现的概率"。
2. 权重的选择: d ( s ) d(s) d(s) 怎么定?
根据 d ( s ) d(s) d(s) 是否依赖于当前的策略 π \pi π,分为两种情况:
情况 A: d d d 独立于 π \pi π (Independent)这种情况下,权重是我们人为预先定好的,和策略怎么变没关系。
优点:计算梯度时比较简单,因为求导时 d d d 是常数。
常见例子:
- 均匀分布 (Uniform):所有状态一样重要, d ( s ) = 1 / N d(s) = 1/N d(s)=1/N。
- 关注初始状态 (Interest in Start State):
- 如果我们只关心从特定状态 s 0 s_0 s0 出发能得多少分(比如下围棋总是从空棋盘开始)。
- 设 d ( s 0 ) = 1 d(s_0) = 1 d(s0)=1,其他为 0。
- 此时指标退化为: v ˉ π = v π ( s 0 ) \bar{v}\pi = v\pi(s_0) vˉπ=vπ(s0)。
情况 B: d d d 依赖于 π \pi π (Dependent) ------ 最重要的情况这种情况下,权重取决于策略本身的行为。
- 选择:使用 稳态分布 (Stationary Distribution) d π d_\pi dπ。
- 物理含义:如果智能体按照策略 π \pi π 跑了很久很久,它出现在状态 s s s 的概率。
- 数学定义: d π T P π = d π T d_\pi^T P_\pi = d_\pi^T dπTPπ=dπT (其中 P π P_\pi Pπ 是状态转移矩阵)。
直观理解:
- 既然我们要优化策略,那么智能体常去的那些状态( d π ( s ) d_\pi(s) dπ(s) 大),其价值就应该更重要。
- 智能体不常去的状态,其价值低一点也无所谓。
- 难点:因为 d π d_\pi dπ 也是 π \pi π 的函数,所以在对目标函数求导(算梯度)时,理论上要考虑 d π d_\pi dπ 随 π \pi π 的变化。这会让数学推导变得复杂(但幸好有策略梯度定理,后续会讲)。
策略优化的指标 (2) ------ 平均奖励
1. 核心定义:什么是"平均奖励"?
第二种评估策略 π \pi π 的指标是看它每一步平均能拿到多少奖励 (Average One-step Reward)。记为 r ˉ π \bar{r}\pi rˉπ,定义为所有状态下的平均即时奖励的加权平均:
r ˉ π = ∑ s d π ( s ) ⋅ r π ( s ) \bar{r}\pi = \sum_{s} d_\pi(s) \cdot r_\pi(s) rˉπ=s∑dπ(s)⋅rπ(s)
- d π ( s ) d_\pi(s) dπ(s):稳态分布 (Stationary Distribution),即长期来看,智能体处于状态 s s s 的概率。
- r π ( s ) r_\pi(s) rπ(s):在状态 s s s 下的平均即时奖励 (Average Immediate Reward)。
- 定义: r π ( s ) = ∑ a π ( a ∣ s ) ⋅ R ( s , a ) r_\pi(s) = \sum_{a} \pi(a|s) \cdot R(s,a) rπ(s)=∑aπ(a∣s)⋅R(s,a)
意思是:站在状态 s s s,按照策略 π \pi π 选动作,平均一步能得多少分。 - 直观理解: r ˉ π \bar{r}_\pi rˉπ 就是把智能体扔进环境里一直跑,跑了无数步之后,算一下它每一步平均能得多少分。
- 定义: r π ( s ) = ∑ a π ( a ∣ s ) ⋅ R ( s , a ) r_\pi(s) = \sum_{a} \pi(a|s) \cdot R(s,a) rπ(s)=∑aπ(a∣s)⋅R(s,a)
2. 另一种常见的等价表达式
在很多 RL 论文中,你会看到这样一个极限形式的定义:
r ˉ π = lim n → ∞ 1 n E [ ∑ t = 1 n R t ] \bar{r}\pi = \lim{n \to \infty} \frac{1}{n} \mathbb{E} \left[ \sum_{t=1}^{n} R_t \right] rˉπ=n→∞limn1E[t=1∑nRt]
- 解释:把前 n n n 步拿到的所有奖励加起来,除以步数 n n n,然后让 n n n 趋于无穷大。
- 结论:这和上面的 ∑ d π ( s ) r π ( s ) \sum d_\pi(s)r_\pi(s) ∑dπ(s)rπ(s) 是完全等价的。
- 为什么?因为当 n → ∞ n \to \infty n→∞ 时,初始状态 s 0 s_0 s0 已经不重要了,智能体访问各个状态的频率就会收敛到稳态分布 d π ( s ) d_\pi(s) dπ(s)。
3. 两个重要性质 (Remarks)
A. 它是策略的函数
无论是 v ˉ π \bar{v}\pi vˉπ 还是 r ˉ π \bar{r}\pi rˉπ,它们都是策略参数 θ \theta θ 的函数。我们的目标依然是找到 θ ∗ \theta^* θ∗ 来最大化这些指标。B. 平均奖励 vs 平均价值 (Relation)
B. 平均奖励 vs 平均价值 (Relation)
你可能会觉得:
- r ˉ π \bar{r}_\pi rˉπ 看起来很"短视",因为它只关心一步 (Immediate Reward) 的平均。
- v ˉ π \bar{v}\pi vˉπ 看起来很"长远",因为它关心累积 (Accumulated Return) 的期望。但令人惊讶的是,在有折扣 (Discounted, γ < 1 \gamma < 1 γ<1) 的情况下,它们是等价的!它们满足如下关系: r ˉ π = ( 1 − γ ) ⋅ v ˉ π \bar{r}\pi = (1 - \gamma) \cdot \bar{v}\pi rˉπ=(1−γ)⋅vˉπ(注:这里假设 v ˉ π \bar{v}\pi vˉπ 的权重是稳态分布 d π d_\pi dπ)
- 结论:最大化平均奖励 r ˉ π \bar{r}\pi rˉπ 等同于最大化平均价值 v ˉ π \bar{v}\pi vˉπ。
- 这意味着我们在设计算法时,优化哪一个指标都可以,最终得到的最优策略是一样的。
解释:
我们知道贝尔曼方程(价值的核心定义):今天的价值 = 今天的奖励 + γ × \gamma \times γ× 明天的价值写成符号就是: v ( s ) = r ( s ) + γ ⋅ v ( n e x t _ s ) v(s) = r(s) + \gamma \cdot v(next\_s) v(s)=r(s)+γ⋅v(next_s)现在,我们对这个公式求一个**"整体平均值"**(想象把所有状态都加起来平均一下):
- 左边:所有状态的"今天的价值"平均一下 → \rightarrow → v ˉ π \bar{v}_\pi vˉπ (平均价值)。
- 右边第一项:所有状态的"今天的奖励"平均一下 → \rightarrow → r ˉ π \bar{r}_\pi rˉπ (平均奖励)。
- 右边第二项:关键来了! γ × \gamma \times γ× 所有状态的"明天的价值"平均一下。
关键点 (The Magic):如果是稳态分布(系统稳定运行很久了),那么**"明天的平均情况"和"今天的平均情况"是一样的**。 所以,"明天的平均价值"其实也等于 v ˉ π \bar{v}_\pi vˉπ。
于是公式变成了: v ˉ π = r ˉ π + γ ⋅ v ˉ π \bar{v}\pi = \bar{r}\pi + \gamma \cdot \bar{v}\pi vˉπ=rˉπ+γ⋅vˉπ现在我们就像解小学方程一样, x = a + 0.9 x x = a + 0.9x x=a+0.9x,求 a a a:把带 v ˉ π \bar{v}\pi vˉπ 的项移到左边: v ˉ π − γ ⋅ v ˉ π = r ˉ π \bar{v}\pi - \gamma \cdot \bar{v}\pi = \bar{r}_\pi vˉπ−γ⋅vˉπ=rˉπ
提取公因式 v ˉ π \bar{v}\pi vˉπ: v ˉ π ⋅ ( 1 − γ ) = r ˉ π \bar{v}\pi \cdot (1 - \gamma) = \bar{r}_\pi vˉπ⋅(1−γ)=rˉπ
这不就是那个公式吗! r ˉ π = ( 1 − γ ) ⋅ v ˉ π \bar{r}\pi = (1 - \gamma) \cdot \bar{v}\pi rˉπ=(1−γ)⋅vˉπ
4.论文中常见的第三种形式
另一种在 Actor-Critic 论文中常见的写法:
J ( θ ) = E s ∼ d [ v π ( s ) ] J(\theta) = \mathbb{E}{s \sim d} [v\pi(s)] J(θ)=Es∼d[vπ(s)]
或者展开写成:
J ( θ ) = ∑ s 0 d ( s 0 ) ⋅ E [ ∑ t = 0 ∞ γ t R t + 1 ∣ S 0 = s 0 ] J(\theta) = \sum_{s_0} d(s_0) \cdot \mathbb{E} \left[ \sum_{t=0}^{\infty} \gamma^t R_{t+1} \mid S_0 = s_0 \right] J(θ)=s0∑d(s0)⋅E[t=0∑∞γtRt+1∣S0=s0]
- 本质:这其实就是上面讲的 平均状态价值 v ˉ π \bar{v}_\pi vˉπ。
- 推导:
- 里面的期望 E [ ∑ . . . ] \mathbb{E}[\sum ...] E[∑...] 就是状态价值 v π ( s 0 ) v_\pi(s_0) vπ(s0)。
- 外面的求和 ∑ d ( s 0 ) . . . \sum d(s_0) ... ∑d(s0)... 就是对价值求期望。
- Takeaway:以后在论文里看到这长长的一串公式,不用慌,它就是 v ˉ π \bar{v}_\pi vˉπ。
💡 总结 (Takeaway)到目前为止,我们介绍了两种(其实是三种)看似不同但本质紧密相关的指标:
- 平均价值 v ˉ π \bar{v}\pi vˉπ: ∑ d ( s ) v π ( s ) \sum d(s) v\pi(s) ∑d(s)vπ(s)
- 平均奖励 r ˉ π \bar{r}\pi rˉπ: ∑ d ( s ) r π ( s ) \sum d(s) r\pi(s) ∑d(s)rπ(s)
- 累积折扣回报的期望: E [ ∑ γ t R t ] \mathbb{E}[\sum \gamma^t R_t] E[∑γtRt]
好消息:在稳态分布下,它们本质上是一回事(差一个常数倍数)。优化任意一个,都能得到最优策略。下一步:既然目标函数确定了,下一节我们将攻克最难的一关------如何计算它们的梯度 ∇ J ( θ ) \nabla J(\theta) ∇J(θ)。
策略梯度定理
1. 统一的梯度公式
虽然我们要面对多种情况(平均价值/平均奖励,有折扣/无折扣),推导过程极其复杂,但最终的结论可以用一个统一的公式来表达:
∇ θ J ( θ ) ≈ ∑ s η ( s ) ∑ a ∇ θ π ( a ∣ s , θ ) ⋅ q π ( s , a ) \nabla_\theta J(\theta) \approx \sum_{s} \eta(s) \sum_{a} \nabla_\theta \pi(a|s, \theta) \cdot q_\pi(s, a) ∇θJ(θ)≈s∑η(s)a∑∇θπ(a∣s,θ)⋅qπ(s,a)
J ( θ ) J(\theta) J(θ):目标函数(比如 v ˉ π \bar{v}\pi vˉπ 或 r ˉ π \bar{r}\pi rˉπ)。
η ( s ) \eta(s) η(s):状态分布(比如稳态分布 d π ( s ) d_\pi(s) dπ(s))。
q π ( s , a ) q_\pi(s, a) qπ(s,a):动作价值函数。
≈ \approx ≈:在某些情况下是严格相等,有些是近似或成比例,但方向是一致的。
2. 对数似然技巧 (Log-Likelihood Trick)
公式里的 ∇ θ π ( a ∣ s , θ ) \nabla_\theta \pi(a|s, \theta) ∇θπ(a∣s,θ) 看起来不太好处理,为了把它变成期望的形式(方便采样),我们使用了一个极其重要的数学技巧。
🛠️ 数学恒等式利用对数求导法则 ∇ ln x = 1 x ∇ x \nabla \ln x = \frac{1}{x} \nabla x ∇lnx=x1∇x,我们可以得到:
∇ θ π = π ⋅ ∇ θ π π = π ⋅ ∇ θ ln π \nabla_\theta \pi = \pi \cdot \frac{\nabla_\theta \pi}{\pi} = \pi \cdot \nabla_\theta \ln \pi ∇θπ=π⋅π∇θπ=π⋅∇θlnπ
🔄 公式变形将这个恒等式代入原梯度公式:
∇ θ J ( θ ) = ∑ s η ( s ) ∑ a π ( a ∣ s , θ ) ⋅ ∇ θ ln π ( a ∣ s , θ ) ⏟ 替换原来的 ∇ π ⋅ q π ( s , a ) = E S ∼ η , A ∼ π [ ∇ θ ln π ( A ∣ S , θ ) ⋅ q π ( S , A ) ] \begin{aligned} \nabla_\theta J(\theta) &= \sum_{s} \eta(s) \sum_{a} \underbrace{\pi(a|s, \theta) \cdot \nabla_\theta \ln \pi(a|s, \theta)}{\text{替换原来的 } \nabla \pi} \cdot q\pi(s, a) \\ &= \mathbb{E}{S \sim \eta, A \sim \pi} \left[ \nabla\theta \ln \pi(A|S, \theta) \cdot q_\pi(S, A) \right] \end{aligned} ∇θJ(θ)=s∑η(s)a∑替换原来的 ∇π π(a∣s,θ)⋅∇θlnπ(a∣s,θ)⋅qπ(s,a)=ES∼η,A∼π[∇θlnπ(A∣S,θ)⋅qπ(S,A)]
3. 这个公式的优势
这个最终的期望形式 E [ ∇ ln π ⋅ q π ] \mathbb{E} [\nabla \ln \pi \cdot q_\pi] E[∇lnπ⋅qπ] 极其重要,因为它告诉我们:
1.不需要求分布的导数:最让人头疼的 ∇ θ η ( s ) \nabla_\theta \eta(s) ∇θη(s) (状态分布随策略变化的导数)在推导中被神奇地抵消或简化了。我们只需要关注当前策略的梯度。
2.可以采样 (Sampling):公式变成了一个期望。这意味着我们不需要算出所有状态的和,只需要让智能体在环境里跑(采样),用跑出来的样本 ( s , a ) (s, a) (s,a) 来近似计算这个期望。
- 这就是 随机梯度上升 (Stochastic Gradient Ascent) 的基础。
解释:
1. 为什么我们要用这个?
首先,我们看原来的梯度公式里有一项: ∑ a ∇ θ π ( a ∣ s ) \sum_{a} \nabla_\theta \pi(a|s) a∑∇θπ(a∣s)这里有个大麻烦:它仅仅是一个求和(Sum),而不是期望(Expectation)。
-
期望 ( E \mathbb{E} E) 的定义是:概率 × \times × 数值。即 ∑ P ( x ) ⋅ f ( x ) \sum P(x) \cdot f(x) ∑P(x)⋅f(x)。
-
只有当公式写成 期望 的形式,我们才能用 "采样" (Sampling) 来代替死算。
- 比如:你想算全中国人的平均身高(期望)。你不需要量 14 亿人,你只要街头随机采访 1000 个人(采样)算平均值,就能近似代替。
-
原来的公式里, ∇ π \nabla \pi ∇π 这一项前面没有乘概率 π \pi π。缺了这个概率,我们就没法去街头"采样",只能坐在家里死算所有可能性的和。但动作空间太大了,根本算不过来。
目标:强行凑出一个 π \pi π 乘在前面,把它变成期望形式。
2. 这个"数学恒等式"是怎么变出来的?
我们需要用到大一高数的一个最简单的求导法则:对数求导。我们知道 ( ln x ) ′ = 1 x (\ln x)' = \frac{1}{x} (lnx)′=x1。根据链式法则,对函数求导:
∇ ln f ( x ) = 1 f ( x ) ⋅ ∇ f ( x ) \nabla \ln f(x) = \frac{1}{f(x)} \cdot \nabla f(x) ∇lnf(x)=f(x)1⋅∇f(x)
我们要把 ∇ f ( x ) \nabla f(x) ∇f(x) 单独拎出来,就是:
∇ f ( x ) = f ( x ) ⋅ ∇ ln f ( x ) \nabla f(x) = f(x) \cdot \nabla \ln f(x) ∇f(x)=f(x)⋅∇lnf(x)
把 f ( x ) f(x) f(x) 换成我们的策略 π \pi π,就得到了讲义里的公式: ∇ π = π ⋅ ∇ π π = π ⋅ ∇ ln π \nabla \pi = \pi \cdot \frac{\nabla \pi}{\pi} = \pi \cdot \nabla \ln \pi ∇π=π⋅π∇π=π⋅∇lnπ
直观理解:
这就好比说: A = A × B A A = A \times \frac{B}{A} A=A×AB。
我们为了凑出前面的那个 π \pi π(为了凑成期望格式),强行乘了一个 π \pi π,然后再除以一个 π \pi π(放在导数里变成了 ln \ln ln)。数值没变,但形式变了。
3. 见证奇迹:从"求和"变"期望"
现在我们把这个替换带回去。
变形前(死算模式):
梯度 = ∑ a ∇ π ( a ∣ s ) ⋅ Q ( s , a ) \text{梯度} = \sum_{a} \nabla \pi(a|s) \cdot Q(s,a) 梯度=a∑∇π(a∣s)⋅Q(s,a)
- 意思:把所有动作 a 的梯度加起来。
- 痛点:必须知道所有动作的梯度,必须遍历所有动作。
变形后(采样模式):
梯度 = ∑ a π ( a ∣ s ) ⋅ [ ∇ ln π ( a ∣ s ) ⋅ Q ( s , a ) ] \text{梯度} = \sum_{a} \pi(a|s) \cdot [\nabla \ln \pi(a|s) \cdot Q(s,a)] 梯度=a∑π(a∣s)⋅[∇lnπ(a∣s)⋅Q(s,a)]
- 注意看!现在变成了 ∑ π ⋅ [ ... ] \sum \pi \cdot [\dots] ∑π⋅[...] 的形式。
- 这就是标准的数学定义:期望 E A ∼ π [ ... ] \mathbb{E}_{A \sim \pi} [\dots] EA∼π[...]。
这就意味着:
我们不再需要遍历所有动作 a 了!既然是期望 ,我们只需要让智能体在环境里玩游戏。它实际做出的动作 ,就是根据概率 π \pi π 自动采样出来的样本。我们只要拿这些"实际发生的动作"去算方括号里的东西,算个平均值,就等于整个公式的结果。
4. 伟大之处:解决了两大难题
✅ 1. 可以采样 (Sampling) ------ 变"上帝"为"玩家"
- 以前:你需要当上帝,知道每个状态下所有可能的动作,并一个个计算。
- 现在 :你只需要当个玩家。你在游戏里跑一跑,跑出什么状态 s,做出什么动作 a,就用这个 (s, a) 代入公式 ∇ ln π ( a ∣ s ) ⋅ Q ( s , a ) \nabla \ln \pi(a|s) \cdot Q(s,a) ∇lnπ(a∣s)⋅Q(s,a) 算一下。跑得越多,算的越准。
- 这就是 随机梯度上升 (Stochastic Gradient Ascent):用随机跑出来的样本梯度,去近似真实的梯度。
✅ 2. 这里的 η ( s ) \eta(s) η(s) 消失了?
- 直觉上的困难 :当你改变策略 π \pi π 时,智能体常去的地方(状态分布 η ( s ) \eta(s) η(s))也会变。按理说求导时,要考虑"策略改变导致的状态分布改变"。这非常难算,因为环境太复杂了。
- 定理的结论 :数学家证明了,最终的梯度公式里,不需要算状态分布变化的导数!
- 为什么? :因为公式最终变成了 E S ∼ η [ ... ] \mathbb{E}_{S \sim \eta}[\dots] ES∼η[...]。这意味着,只要你的智能体是在当前策略下跑的,它出现的频率自然就符合 η ( s ) \eta(s) η(s) 。你不需要显式地去算 η ( s ) \eta(s) η(s) 是多少,它的出现本身就是一种采样。
5. 终极直觉:这个公式在干什么?
最后,让我们看看这一项 ∇ ln π ( a ∣ s ) ⋅ Q ( s , a ) \nabla \ln \pi(a|s) \cdot Q(s, a) ∇lnπ(a∣s)⋅Q(s,a) 的物理含义,你会发现它非常符合直觉:
- ∇ ln π \nabla \ln \pi ∇lnπ:这是一个向量,指向**"让这个动作概率变大"**的方向。
- Q ( s , a ) Q(s, a) Q(s,a):这是个标量(分数),表示**"这个动作好不好"**。
乘在一起:
- 如果 Q 是正的(好动作):梯度方向不变,增加该动作的概率。
- 如果 Q 是负的(坏动作):梯度方向变反,减少该动作的概率。
- 如果 Q 很大(极好):大幅增加概率。
这就是强化学习最朴素的道理:做得好就奖励(多做),做得差就惩罚(少做)。 对数似然技巧只是为了让我们能用数学公式合法地把它写出来而已。
4. 为什么要用 Softmax?
为了使用 ln π \ln \pi lnπ,我们必须保证概率 π ( a ∣ s ) > 0 \pi(a|s) > 0 π(a∣s)>0(因为 ln 0 \ln 0 ln0 无意义)。
- 解决方法:在神经网络的输出层使用 Softmax 函数。
π ( a ∣ s ) = e h ( s , a ) ∑ a ′ e h ( s , a ′ ) \pi(a|s) = \frac{e^{h(s, a)}}{\sum_{a'} e^{h(s, a')}} π(a∣s)=∑a′eh(s,a′)eh(s,a)
- 效果:
- 保证所有动作的概率之和为 1。
- 保证所有概率都严格大于 0。
- 这意味着策略本质上是 随机的 (Stochastic) 和 探索性的 (Exploratory)。
💡 总结 (Takeaway)核心公式:梯度 = 期望 [ 策略对数概率的梯度 × \times × 动作价值 Q ] ∇ J ∝ E [ ∇ ln π ⋅ Q ] \nabla J \propto \mathbb{E} [\nabla \ln \pi \cdot Q] ∇J∝E[∇lnπ⋅Q]
物理含义:
- 如果一个动作 a a a 的价值 Q ( s , a ) Q(s, a) Q(s,a) 很高(是好动作),我们就增加它出现的概率(让梯度往 ln π \ln \pi lnπ 增加的方向走)。
- 如果 Q Q Q 很低,就减少概率。
REINFORCE 算法详解
1.公式到行动
上面内容中:
我们千辛万苦推导出了这个梯度公式: ∇ J ≈ E [ ∇ ln π ( a ∣ s ) ⋅ Q π ( s , a ) ] \nabla J \approx \mathbb{E} [\nabla \ln \pi(a|s) \cdot Q_\pi(s, a)] ∇J≈E[∇lnπ(a∣s)⋅Qπ(s,a)]
这公式看着很漂亮,但有一个致命的实际问题:
- 问题:公式里有个 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a)。这是真实的动作价值。
- 现状:我们手里没有这个 Q Q Q 值啊!我们只有策略 π \pi π,还没有训练好的 Q-table 或 Q-network。
怎么办?我们需要找个"替身"来冒充 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a)。
2. 找替身:蒙特卡洛 (Monte Carlo) 方法
强化学习里最朴素的思想:实践出真知。
- 既然不知道 Q ( s , a ) Q(s, a) Q(s,a) (动作 a a a 到底值多少分),那我们就真的玩一局看看!
- 从状态 s s s 开始,执行动作 a a a,然后一直玩到游戏结束。
- 把这期间拿到的所有奖励加起来,得到回报 G t G_t Gt (Return)。
- 核心替换:我们就用这个实际跑出来的分 G t G_t Gt,去代替那个未知的 Q ( s , a ) Q(s, a) Q(s,a)。
这就是 REINFORCE 算法 的由来(也叫蒙特卡洛策略梯度)。
3. REINFORCE 算法流程
这个算法就像是在"复盘"。
第一步:玩游戏 (Sampling)智能体用当前的策略 π θ \pi_\theta πθ 去环境里完整地玩一局(Episode)。记录下整个过程: s 0 , a 0 , r 1 , s 1 , a 1 , r 2 , ... s_0, a_0, r_1, s_1, a_1, r_2, \dots s0,a0,r1,s1,a1,r2,...
第二步:算总账 (Calculate Return)
- 游戏结束后,从后往前推。
- 对于每一步 t t t,算出从这一步开始直到游戏结束拿到的总分 G t G_t Gt。
- 比如:如果在第 5 步做了一个动作,虽然当时没得分,但最后赢了,那 G 5 G_5 G5 就是高分。
第三步:改策略 (Update)对于每一步 t t t,根据结果好坏来修改参数 θ \theta θ: θ ← θ + α ⋅ γ t ⋅ G t ⋅ ∇ ln π ( a t ∣ s t ) \theta \leftarrow \theta + \alpha \cdot \gamma^t \cdot G_t \cdot \nabla \ln \pi(a_t|s_t) θ←θ+α⋅γt⋅Gt⋅∇lnπ(at∣st) α \alpha α:学习率。
G t G_t Gt:这一步动作的"实际效果"。如果 G t G_t Gt 大(赢了),就拼命鼓励这个动作;如果 G t G_t Gt 小(输了),就抑制它。
∇ ln π \nabla \ln \pi ∇lnπ:方向。告诉参数往哪个方向调,能让这个动作出现的概率变大。
4. 深度解析:为什么这个算法有效?
变形分析: θ n e w = θ + α ⋅ β t ⋅ ∇ π ( a ∣ s ) \theta_{new} = \theta + \alpha \cdot \beta_t \cdot \nabla \pi(a|s) θnew=θ+α⋅βt⋅∇π(a∣s)
其中 β t = Q t π ( a ∣ s ) \beta_t = \frac{Q_t}{\pi(a|s)} βt=π(a∣s)Qt。这个 β t \beta_t βt 就像是一个自动调节的平衡器,它完美平衡了 开发 (Exploitation) 和 探索 (Exploration):
1.开发 (Exploitation):
- 如果 Q t Q_t Qt (或 G t G_t Gt) 很大(动作是个好动作), β t \beta_t βt 就大。
- 结果: π ( a ∣ s ) \pi(a|s) π(a∣s) 会被大幅度拉高。
- 潜台词:"这招好用,下次多用!"
- 探索 (Exploration):
- 这是一个反直觉的点。 β t \beta_t βt 的分母是 π \pi π。
- 如果某个动作 a a a 当前的概率 π \pi π 很小(以前不怎么用),但是偶尔试了一次发现 Q t Q_t Qt 是正的。
- 因为分母 π \pi π 很小,所以 β t \beta_t βt 会变得非常大!
- 结果:这个冷门动作的概率会被剧烈提升。
- 潜台词:"哎哟,这个不起眼的招数居然也不错?赶紧重视起来!"
5. 算法优缺点 (Key Takeaway)
- 优点:无偏 (Unbiased):因为它直接用真实跑出来的 G t G_t Gt 做
- 目标,所以数学上是对的,最终能收敛到很好的策略。
- 简单:不需要额外的 Critic 网络来估算价值。
- 缺点:
- 方差大 (High Variance):这是蒙特卡洛方法的通病。因为每一局游戏的随机因素太多了(运气成分),导致 G t G_t Gt 忽高忽低。这会让训练过程像过山车一样不稳定,收敛很慢。
- 回合更新 (Episode-based):必须等游戏彻底结束才能更新。如果是无尽模式的游戏(如股票交易),它就没法用了。