【强化学习入门-2】深入理解策略优化和值函数估计
昨天的内容详细阐述了策略函数和价值函数的内容,今天的文章将再昨天内容的基础上再深入一些,首先将再对策略和价值做一个更深入的解释,然后将深入区分并理解策略优化于值函数估计。
基于概率or基于价值?
抉择
- 基于概率的强化学习将生成对应的每个动作可能的可能性,但是对于最终的选择可能不一定会选择概率最高的动作。
- 基于价值的强化学习则会直接生成每个动作的价值,然后选择价值最高的动作。
空间
- 基于概率的强化学习在连续的空间中可以生成动作的概率。
- 基于价值的强化学习难以在连续空间中进行操作。
算法
1. 策略优化 (Policy Optimization)
1.1 策略的定义
策略 π ( a ∣ s ) \pi(a|s) π(a∣s) 是一个函数,定义在状态 s s s 下采取动作 a a a 的概率分布。它可以是 随机策略 或 确定性策略:
- 随机策略: π ( a ∣ s ; θ ) \pi(a|s; \theta) π(a∣s;θ) 输出动作概率分布,动作通过采样获得。
- 确定性策略: μ ( s ; θ ) \mu(s; \theta) μ(s;θ) 输出具体动作。
目标是通过优化策略的参数 θ \theta θ,找到能够 最大化累积奖励 的最优策略。
1.2 策略的目标
强化学习的目标是最大化某个策略下的预期累积奖励
J
(
π
)
J(\pi)
J(π):
J
(
π
)
=
E
π
[
∑
t
=
0
∞
γ
t
r
(
s
t
,
a
t
)
]
J(\pi) = \mathbb{E}_{\pi} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \right]
J(π)=Eπ[t=0∑∞γtr(st,at)]
1.3 策略梯度
策略梯度方法通过计算目标函数
J
(
π
)
J(\pi)
J(π) 对策略参数
θ
\theta
θ 的梯度,从而优化策略:
∇
θ
J
(
π
)
=
E
π
[
∇
θ
log
π
(
a
∣
s
;
θ
)
Q
π
(
s
,
a
)
]
\nabla_{\theta} J(\pi) = \mathbb{E}_{\pi} \left[ \nabla_{\theta} \log \pi(a|s; \theta) Q^\pi(s, a) \right]
∇θJ(π)=Eπ[∇θlogπ(a∣s;θ)Qπ(s,a)]
公式解释:
-
log
π
(
a
∣
s
;
θ
)
\log \pi(a|s; \theta)
logπ(a∣s;θ):
- 策略的对数概率,表示在状态 s s s 下选择动作 a a a 的倾向性。
-
Q
π
(
s
,
a
)
Q^\pi(s, a)
Qπ(s,a):
- 评估当前动作 a a a 的“好坏”。
- 梯度的作用:
- 如果 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a) 大(动作 a a a 的回报高),则增大其概率 π ( a ∣ s ; θ ) \pi(a|s; \theta) π(a∣s;θ)。
- 如果 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a) 小,则减少其概率。
1.4 策略优化的关键
- 策略梯度方法直接优化策略,但需要一个外部信号(例如值函数 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a) 或优势函数 A ( s , a ) A(s, a) A(s,a))来指导优化过程。
- 优化过程需要平衡 探索 和 开发(即既要尝试新策略,也要利用现有策略)。
2. 值函数估计 (Value Function Approximation)
2.1 值函数的定义
值函数是强化学习中用于评估状态或动作“好坏”的工具,分为以下两种:
-
状态值函数 V π ( s ) V^\pi(s) Vπ(s):
- 表示从状态
s
s
s 开始,按照策略
π
\pi
π 行动的期望累积奖励:
V π ( s ) = E π [ ∑ t = 0 ∞ γ t r ( s t , a t ) ∣ s 0 = s ] V^\pi(s) = \mathbb{E}_{\pi} \left[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \mid s_0 = s \right] Vπ(s)=Eπ[t=0∑∞γtr(st,at)∣s0=s]
- 表示从状态
s
s
s 开始,按照策略
π
\pi
π 行动的期望累积奖励:
-
状态-动作值函数 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a):
- 表示在状态
s
s
s 下执行动作
a
a
a,然后按照策略
π
\pi
π 行动的期望累积奖励:
Q π ( s , a ) = E π [ r ( s , a ) + γ V π ( s ′ ) ] Q^\pi(s, a) = \mathbb{E}_{\pi} \left[ r(s, a) + \gamma V^\pi(s') \right] Qπ(s,a)=Eπ[r(s,a)+γVπ(s′)]
- 表示在状态
s
s
s 下执行动作
a
a
a,然后按照策略
π
\pi
π 行动的期望累积奖励:
2.2 值函数的作用
- 值函数提供对当前策略的评估。
- 强化学习算法通过估计值函数来指导策略优化。
值函数在算法中的用法
- 评估策略的好坏:
- V π ( s ) V^\pi(s) Vπ(s) 和 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a) 衡量当前策略的表现。
- 指导动作选择:
- 通过值函数,策略可以选择使 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a) 最大化的动作。
2.3 值函数的更新方法
值函数基于 贝尔曼方程 进行更新:
-
贝尔曼方程:
- 状态值函数:
V π ( s ) = E π [ r ( s , a ) + γ V π ( s ′ ) ] V^\pi(s) = \mathbb{E}_{\pi} \left[ r(s, a) + \gamma V^\pi(s') \right] Vπ(s)=Eπ[r(s,a)+γVπ(s′)] - 状态-动作值函数:
Q π ( s , a ) = r ( s , a ) + γ E a ′ ∼ π [ Q π ( s ′ , a ′ ) ] Q^\pi(s, a) = r(s, a) + \gamma \mathbb{E}_{a' \sim \pi} [Q^\pi(s', a')] Qπ(s,a)=r(s,a)+γEa′∼π[Qπ(s′,a′)]
- 状态值函数:
-
迭代更新:
- 使用 时序差分(Temporal Difference, TD)学习 来更新值函数。
- 目标是最小化预测值与目标值的误差,例如:
L ( θ v ) = E ( s , a , r , s ′ ) [ ( Q target − Q ( s , a ; θ v ) ) 2 ] L(\theta^v) = \mathbb{E}_{(s, a, r, s')} \left[ \left( Q^\text{target} - Q(s, a; \theta^v) \right)^2 \right] L(θv)=E(s,a,r,s′)[(Qtarget−Q(s,a;θv))2] - 目标值:
Q target = r + γ Q ( s ′ , a ′ ; θ v ) Q^\text{target} = r + \gamma Q(s', a'; \theta^v) Qtarget=r+γQ(s′,a′;θv)
3. 策略优化与值函数估计的结合
策略优化和值函数估计是强化学习的两大支柱。Actor-Critic 方法将两者结合:
- Actor(策略网络):
- 负责优化策略 π ( a ∣ s ; θ π ) \pi(a|s; \theta^\pi) π(a∣s;θπ),直接输出动作概率。
- Critic(值函数网络):
- 负责评估策略,估计 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a) 或 V π ( s ) V^\pi(s) Vπ(s)。
结合方法
- Critic 提供一个信号(如
Q
π
(
s
,
a
)
Q^\pi(s, a)
Qπ(s,a))给 Actor,用于计算策略梯度:
∇ θ π J = E π [ ∇ θ π log π ( a ∣ s ; θ π ) Q π ( s , a ) ] \nabla_{\theta^\pi} J = \mathbb{E}_{\pi} \left[ \nabla_{\theta^\pi} \log \pi(a|s; \theta^\pi) Q^\pi(s, a) \right] ∇θπJ=Eπ[∇θπlogπ(a∣s;θπ)Qπ(s,a)] - Actor 优化策略,而 Critic 用于引导 Actor。
4. 举例:策略优化和值函数估计的实际流程
以一个机器人控制任务为例:
- 初始策略:
- 策略 π ( a ∣ s ; θ ) \pi(a|s; \theta) π(a∣s;θ) 是一个神经网络,输出给定状态 s s s 下的动作分布。
- 与环境交互:
- 使用策略 π \pi π 选择动作 a a a,执行后获得奖励 r r r 和新状态 s ′ s' s′。
- 值函数估计:
- 使用 Critic 网络估计 Q ( s , a ) Q(s, a) Q(s,a) 或 V ( s ) V(s) V(s)。
- 计算 TD 误差:
δ = r + γ V ( s ′ ) − V ( s ) \delta = r + \gamma V(s') - V(s) δ=r+γV(s′)−V(s) - 更新 Critic 网络参数以最小化误差。
- 策略更新:
- 使用 Critic 提供的
Q
(
s
,
a
)
Q(s, a)
Q(s,a) 或优势函数
A
(
s
,
a
)
A(s, a)
A(s,a) 更新策略:
∇ θ π J = ∇ θ π log π ( a ∣ s ; θ π ) A ( s , a ) \nabla_{\theta^\pi} J = \nabla_{\theta^\pi} \log \pi(a|s; \theta^\pi) A(s, a) ∇θπJ=∇θπlogπ(a∣s;θπ)A(s,a)
- 使用 Critic 提供的
Q
(
s
,
a
)
Q(s, a)
Q(s,a) 或优势函数
A
(
s
,
a
)
A(s, a)
A(s,a) 更新策略:
5. 总结
- 策略优化:
- 直接优化策略,使其产生更高的累计奖励。
- 核心公式:策略梯度 ∇ θ π J = ∇ θ π log π ( a ∣ s ; θ π ) Q π ( s , a ) \nabla_{\theta^\pi} J = \nabla_{\theta^\pi} \log \pi(a|s; \theta^\pi) Q^\pi(s, a) ∇θπJ=∇θπlogπ(a∣s;θπ)Qπ(s,a)。
- 值函数估计:
- 评估当前策略,用于指导优化。
- 核心公式:基于贝尔曼方程学习 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a) 或 V π ( s ) V^\pi(s) Vπ(s)。
在理解了策略优化和值函数估计后,可以更好的理解强化学习中的 Actor-Critic 方法,以及其他基于策略和值函数的深度强化学习算法。
PS:图片来自b站莫凡python强化学习课程。很好的教程推荐希望了解并学习的初学者观看:链接