1. 基于策略的强化学习概述
强化学习作为机器学习的重要分支,主要包含三种技术范式:基于价值的强化学习(Value-based)、基于策略的强化学习(Policy-based)以及结合两者的Actor-Critic方法。本章将重点探讨基于策略的强化学习这一独立分支,它在OpenAI和加州大学伯克利分校等顶尖研究机构中占据重要地位。
1.1 三种强化学习范式的比较
基于价值的强化学习的核心在于学习价值函数(Value Function),通过计算每个状态下各个动作的未来预期收益(即"价值值")来指导决策。例如,当面临两条路径选择时,系统会分别计算走A路和B路的未来收益分值,选择分值更高的路径。这种方法通过不断迭代"策略评估→策略提升→新策略采样"的循环来优化决策。
基于策略的强化学习则采用截然不同的思路——直接学习"行动规则"(即策略函数)。就像人类通过大量练习总结出"看到A情况采取B行动"的经验法则,这种方法的策略函数会直接输出动作选择,即使某些选择在短期内看似不利,但长期来看是最优的。
Actor-Critic方法作为前两者的结合体,将策略函数和价值函数的学习融为一体,我们将在后续章节详细讨论。
1.2 基于策略方法的独特优势
基于策略的强化学习在以下场景展现出不可替代的价值:
-
随机策略需求场景:在某些环境中,最优策略实际上是随机策略。例如在"剪刀石头布"游戏中,纯确定性策略很容易被针对,而基于价值的方法通常只能输出确定性策略。
-
连续动作空间处理:对于自动驾驶控制等需要输出连续值(如方向盘转角、油门深度)的场景,基于价值的方法需要复杂的数值优化来找最大价值动作,而基于策略的方法可以直接输出动作的概率分布参数,天然适合连续控制。
关键区别:基于价值的方法通过价值函数间接指导动作选择,而基于策略的方法直接参数化策略本身,避免了中间的价值估计步骤。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 策略函数的设计与实现
2.1 策略函数的数学表示
策略函数π(a|s,θ)表示在状态s下选择动作a的概率分布,其中θ是策略函数的参数。根据动作空间的不同,策略函数有两种主要实现形式:
-
离散动作空间:输出层使用softmax激活函数,每个神经元对应一个离散动作的概率值。例如在格子世界游戏中,输出可能是[不动:0.1, 上:0.3, 下:0.2, 左:0.2, 右:0.2]。
-
连续动作空间:输出层给出概率分布的参数。例如对于高斯策略,输出可能是均值和方差,动作则从这个分布中采样得到。
2.2 神经网络架构设计
策略函数通常采用神经网络实现,其架构设计需考虑以下要点:
- 输入层:状态特征的维度决定输入层大小
- 隐藏层:根据问题复杂度选择层数和神经元数量
- 输出层:
- 离散动作:神经元数=动作数,加softmax激活
- 连续动作:输出分布参数(如高斯策略的μ和σ)
python复制# 离散动作策略网络示例
class DiscretePolicy(nn.Module):
def __init__(self, state_dim, hidden_dim, action_dim):
super().__init__()
self.fc1 = nn.Linear(state_dim, hidden_dim)
self.fc2 = nn.Linear(hidden_dim, action_dim)
def forward(self, x):
x = F.relu(self.fc1(x))
x = self.fc2(x)
return F.softmax(x, dim=-1)
3. 策略优化目标函数
3.1 目标函数的选择
由于真实最优策略未知,我们需要设计合适的替代目标函数。两个主要选择是:
-
平均状态价值v̄π:所有状态价值的加权平均,权重为各状态出现的概率d(s)
v̄π = Σ d(s)vπ(s)
-
单步平均奖励r̄π:即时奖励的期望值
r̄π = Σ d(s)Σ π(a|s)r(s,a)
数学上可以证明,优化这两个目标函数是等价的,因为它们通过折扣因子γ相互关联。
3.2 目标函数的性质
- 策略依赖性:d(s)可能是策略相关的(如非均匀访问的状态)或策略无关的(均匀访问)
- 长期vs短期:v̄π考虑折扣后的长期回报,r̄π侧重即时奖励
- 函数形式:两者都是策略参数θ的函数,可通过优化θ来最大化目标
4. 策略梯度定理与REINFORCE算法
4.1 策略梯度基本公式
策略梯度定理给出了目标函数J(θ)(可以是v̄π或r̄π)关于参数θ的梯度:
∇J(θ) = E[∇lnπ(a|s,θ) qπ(s,a)]
这个优雅的公式表明,梯度可以通过策略函数的对数梯度与动作价值函数的乘积的期望来计算。
4.2 REINFORCE算法实现
REINFORCE是最基础的策略梯度算法,其核心步骤包括:
- 用当前策略πθ收集多条完整轨迹(episode)
- 对每个(s,a)对,用蒙特卡洛方法计算回报Gt
- 计算梯度估计:∇J(θ) ≈ Σ Gt ∇lnπ(at|st,θ)
- 执行梯度上升:θ ← θ + α∇J(θ)
python复制def reinforce(env, policy, episodes, alpha):
for _ in range(episodes):
states, actions, rewards = [], [], []
state = env.reset()
# 收集轨迹
while True:
action_probs = policy(state)
action = np.random.choice(len(action_probs), p=action_probs)
next_state, reward, done, _ = env.step(action)
states.append(state)
actions.append(action)
rewards.append(reward)
state = next_state
if done: break
# 计算回报
G = 0
returns = []
for r in reversed(rewards):
G = r + gamma * G
returns.insert(0, G)
# 更新策略
optimizer.zero_grad()
loss = 0
for s, a, G in zip(states, actions, returns):
log_prob = torch.log(policy(s)[a])
loss += -log_prob * G
loss.backward()
optimizer.step()
4.3 方差缩减技术
原始REINFORCE算法面临高方差问题,常用改进技术包括:
-
基线减法:从回报中减去状态相关的基线(如状态价值函数)
∇J(θ) ≈ Σ (Gt - b(s)) ∇lnπ(at|st,θ) -
因果时序约束:只考虑当前动作之后的回报,忽略之前的历史
-
折扣因子:引入γ<1来降低远期回报的影响
5. 连续动作空间的策略梯度
5.1 高斯策略实现
对于连续动作空间,常用高斯策略:
π(a|s) = N(μ(s),σ²(s))
其中μ和σ由神经网络输出,动作从该分布采样得到。
python复制class GaussianPolicy(nn.Module):
def __init__(self, state_dim, hidden_dim):
super().__init__()
self.fc1 = nn.Linear(state_dim, hidden_dim)
self.fc_mu = nn.Linear(hidden_dim, 1)
self.fc_sigma = nn.Linear(hidden_dim, 1)
def forward(self, x):
x = F.relu(self.fc1(x))
mu = self.fc_mu(x)
sigma = F.softplus(self.fc_sigma(x)) # 保证正值
return torch.distributions.Normal(mu, sigma)
5.2 策略梯度调整
连续动作空间的策略梯度需要相应调整:
∇J(θ) = E[∇lnπ(a|s,θ) (qπ(s,a) - b(s))]
其中对数概率的计算需考虑连续分布的特性。
6. 策略梯度的数学理解
从深度学习视角看,策略梯度训练与监督学习有本质区别:
- 目标函数性质:监督学习有明确的损失函数,而强化学习的目标J(θ)需要通过采样估计
- 梯度计算:策略梯度将动作价值q(s,a)作为"权重"来调整参数更新幅度
- 高回报动作:��加其选择概率
- 低回报动作:减少其选择概率
- 自动探索机制:当π(a|s)→0时,∇lnπ(a|s)→∞,这种性质促使策略保持一定探索性
7. 实践建议与常见问题
7.1 实现注意事项
- 输入标准化:对状态特征进行标准化处理(减均值除标准差)
- 回报缩放:对蒙特卡洛回报进行归一化处理
- 策略初始化:初始策略应保持一定随机性促进探索
- 学习率选择:需要谨慎调整,过大导致不稳定,过小收敛慢
7.2 常见问题排查
-
策略过早收敛:
- 检查探索机制(如熵正则化)
- 验证梯度更新是否合理
-
训练不稳定:
- 尝试减小学习率
- 增加批量大小
- 使用优势估计替代原始回报
-
性能停滞:
- 检查神经网络表达能力
- 考虑更复杂的基线函数
- 评估状态表征是否充分
8. 扩展与进阶方向
虽然REINFORCE算法原理简单直接,但存在样本效率低、训练不稳定等缺点。后续发展出多种改进算法:
- 自然策略梯度:考虑参数空间的几何性质,使用Fisher信息矩阵进行归一化
- 信赖域方法(如TRPO):限制策略更新的幅度,保证单调改进
- 近端策略优化(PPO):通过裁剪机制实现稳定的策略更新
- Actor-Critic架构:引入价值函数作为基线,大幅降低方差
这些进阶方法都建立在策略梯度的基础之上,深入理解本章内容将为学习这些高级算法奠定坚实基础。在实际应用中,需要根据具体问题特点选择合适的策略优化方法,平衡样本效率、稳定性和实现复杂度等因素。
